atomadic 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
atomadic-0.1.0/LICENSE ADDED
@@ -0,0 +1,11 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Copyright 2026 Atomadic.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the 'License');
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
@@ -0,0 +1,244 @@
1
+ Metadata-Version: 2.4
2
+ Name: atomadic
3
+ Version: 0.1.0
4
+ Summary: Atomadic Python SDK -- one MCP, entitlement-gated tool-sets
5
+ Author-email: Atomadic <support@atomadic.tech>
6
+ License: Apache-2.0
7
+ Project-URL: Homepage, https://atomadic.tech
8
+ Project-URL: Docs, https://atomadic.tech/docs.html
9
+ Project-URL: Issues, https://github.com/atomadictech/atomadic-sdk/issues
10
+ Keywords: atomadic,mcp,agents,sdk,trust,verification
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Software Development :: Libraries
14
+ Requires-Python: >=3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Dynamic: license-file
18
+
19
+ # Atomadic Python SDK
20
+
21
+ [![PyPI](https://img.shields.io/pypi/v/atomadic.svg)](https://pypi.org/project/atomadic/) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
22
+
23
+ **One MCP. One key. Every tool-set you are entitled to.**
24
+
25
+ Atomadic is sovereign infrastructure for the agent economy. Mount one MCP at
26
+ `mcp.atomadic.tech`; your **entitlement key** decides which product tool-sets you
27
+ can call. Every call passes Gate-1 (entitlement) then Gate-2 (trust).
28
+
29
+ - **Docs:** https://atomadic.tech/docs.html
30
+ - **Architecture:** https://atomadic.tech/docs.html?d=architecture
31
+ - **Support:** support@atomadic.tech
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ pip install atomadic
37
+ ```
38
+
39
+ ## Quickstart
40
+
41
+ ```python
42
+ from atomadic import Atomadic, fuse
43
+
44
+ ato = Atomadic(api_key='ato_...') # or set ATOMADIC_KEY env var
45
+
46
+ # Call any tool your plan unlocks:
47
+ result = fuse.assess_architecture_pure(
48
+ ato,
49
+ source_text='def f(x):\n return x + 1',
50
+ module_name='f_pure',
51
+ )
52
+ print(result['verdict'], result['density'])
53
+
54
+ # Or browse the surface your key unlocks:
55
+ for t in ato.list_tools():
56
+ print(t['name'])
57
+ ```
58
+
59
+ ## Authentication
60
+
61
+ Get an entitlement key from [atomadic.tech](https://atomadic.tech). The key is decoded
62
+ and verified at the edge on every call; minting is internal-only. Keep keys
63
+ server-side -- the gate refuses out-of-plan calls, but secrets belong in your env.
64
+
65
+ ```python
66
+ ato = Atomadic(api_key='ato_<blob>_<sig>')
67
+ # or: export ATOMADIC_KEY=ato_<blob>_<sig>
68
+ ```
69
+
70
+ ## Products & tool-sets
71
+
72
+ Each product is an entitlement-gated tool-set; hold the entitlement, call the tool.
73
+ Reserved products (Vanguard, Aegis, Catalyst) and roadmap (Evolve, Research, Mind-Lab)
74
+ are not yet in the SDK.
75
+
76
+ ### Fuse [live]
77
+
78
+ `entitlement: fuse` &middot; `from atomadic import fuse`
79
+
80
+ > _Architecture compiler -- AI writes code, we give it architecture._
81
+
82
+ Analyze your code against the 5-tier, single-callable discipline.
83
+
84
+ | Tool | Required args |
85
+ |---|---|
86
+ | **`assess_architecture_pure`** | `source_text`, `module_name` |
87
+ | **`assess_import_direction_pure`** | `source_text`, `tier` |
88
+ | **`scan_code_stubs_pure`** | `source_text` |
89
+
90
+ ```python
91
+ from atomadic import Atomadic, fuse
92
+ ato = Atomadic(api_key='ato_...')
93
+ fuse.assess_architecture_pure(ato, source_text=..., module_name=...)
94
+ ```
95
+
96
+ See per-tool docstrings for full arg schemas: `help(fuse.assess_architecture_pure)`
97
+
98
+ ### Nexus [live]
99
+
100
+ `entitlement: nexus` &middot; `from atomadic import nexus`
101
+
102
+ > _The trust gate every action passes._
103
+
104
+ Gate-2 sovereign trust: trust phases, hallucination bound, signed attestations.
105
+
106
+ | Tool | Required args |
107
+ |---|---|
108
+ | **`assess_nexus_trust_phase_stateful`** | `ledger_path` |
109
+ | **`define_nexus_constants_pure`** | (none) |
110
+ | **`enforce_nexus_gate_stateful`** | `action_kind`, `severity` |
111
+ | **`record_nexus_attestation_stateful`** | `action_kind`, `severity`, `ledger_path` |
112
+ | **`record_nexus_escalation_stateful`** | `action_kind`, `escalation_path` |
113
+ | **`scan_nexus_attestation_history_stateful`** | `ledger_path` |
114
+
115
+ ```python
116
+ from atomadic import Atomadic, nexus
117
+ ato = Atomadic(api_key='ato_...')
118
+ nexus.assess_nexus_trust_phase_stateful(ato, ledger_path=...)
119
+ ```
120
+
121
+ See per-tool docstrings for full arg schemas: `help(nexus.assess_nexus_trust_phase_stateful)`
122
+
123
+ ### Security [live]
124
+
125
+ `entitlement: security` &middot; `from atomadic import security`
126
+
127
+ > _A bubble of protection around every agent._
128
+
129
+ Bubble check, redaction, error-fold, hardening posture (PQC/FIPS-203).
130
+
131
+ | Tool | Required args |
132
+ |---|---|
133
+ | **`assess_security_bubble_pure`** | `content` |
134
+ | **`classify_error_fold_pure`** | `error_message` |
135
+ | **`compute_hardening_posture_pure`** | `target_product_id`, `hardening_level` |
136
+ | **`compute_redacted_args_pure`** | `args` |
137
+ | **`compute_redacted_text_pure`** | `text` |
138
+ | **`define_security_constants_pure`** | (none) |
139
+
140
+ ```python
141
+ from atomadic import Atomadic, security
142
+ ato = Atomadic(api_key='ato_...')
143
+ security.assess_security_bubble_pure(ato, content=...)
144
+ ```
145
+
146
+ See per-tool docstrings for full arg schemas: `help(security.assess_security_bubble_pure)`
147
+
148
+ ### Proving Ground [live]
149
+
150
+ `entitlement: proving` &middot; `from atomadic import proving`
151
+
152
+ > _Nothing ships unproven._
153
+
154
+ Ship-gate, proof-readiness signals, and test-coverage estimation.
155
+
156
+ | Tool | Required args |
157
+ |---|---|
158
+ | **`assess_proof_readiness_pure`** | `source_text` |
159
+ | **`score_test_coverage_pure`** | `source_text`, `test_source` |
160
+ | **`validate_logic_block_composite`** | `source_text`, `module_name` |
161
+
162
+ ```python
163
+ from atomadic import Atomadic, proving
164
+ ato = Atomadic(api_key='ato_...')
165
+ proving.assess_proof_readiness_pure(ato, source_text=...)
166
+ ```
167
+
168
+ See per-tool docstrings for full arg schemas: `help(proving.assess_proof_readiness_pure)`
169
+
170
+ ### Release [live]
171
+
172
+ `entitlement: release` &middot; `from atomadic import release`
173
+
174
+ > _Template -> render -> deploy._
175
+
176
+ Template registry, website render, Cloudflare deploy. Dry-run by default.
177
+
178
+ | Tool | Required args |
179
+ |---|---|
180
+ | **`record_release_template_stateful`** | `template_id`, `kind`, `source_kind`, `source_ref`, `registry_path` |
181
+ | **`render_from_template_pure`** | `template`, `context` |
182
+ | **`render_website_stateful`** | `template_dir`, `context`, `output_dir` |
183
+ | **`scan_release_templates_stateful`** | `registry_path` |
184
+ | **`serve_cloudflare_pages_stateful`** | `directory`, `project_name` |
185
+ | **`serve_cloudflare_worker_stateful`** | `worker_dir` |
186
+
187
+ ```python
188
+ from atomadic import Atomadic, release
189
+ ato = Atomadic(api_key='ato_...')
190
+ release.record_release_template_stateful(ato, template_id=..., kind=..., source_kind=...)
191
+ ```
192
+
193
+ See per-tool docstrings for full arg schemas: `help(release.record_release_template_stateful)`
194
+
195
+ ### Healer [beta]
196
+
197
+ `entitlement: healer` &middot; `from atomadic import healer`
198
+
199
+ > _Diagnose, grade, and plan the repair._
200
+
201
+ Read-only diagnosis: code-health grade + advisory repair plan.
202
+
203
+ | Tool | Required args |
204
+ |---|---|
205
+ | **`assess_artifact_health_pure`** | `source_text` |
206
+ | **`compute_repair_plan_pure`** | `error_message` |
207
+
208
+ ```python
209
+ from atomadic import Atomadic, healer
210
+ ato = Atomadic(api_key='ato_...')
211
+ healer.assess_artifact_health_pure(ato, source_text=...)
212
+ ```
213
+
214
+ See per-tool docstrings for full arg schemas: `help(healer.assess_artifact_health_pure)`
215
+
216
+ ## Two-gate dispatch
217
+
218
+ Every call is filtered then verified:
219
+
220
+ 1. **Gate-1 (entitlement):** `tools/list` shows only the tools your plan unlocks; out-of-plan `tools/call` is refused.
221
+ 2. **Gate-2 (trust, Nexus):** trust phase + severity ceiling + hallucination bound. Governed actions return a signed `attest:<id>` receipt.
222
+
223
+ See [the architecture docs](https://atomadic.tech/docs.html?d=two-gate) for the full model.
224
+
225
+ ## Plans
226
+
227
+ Free / Basic / Dev / Pro / Teams / Enterprise -- per product, or whole-line via
228
+ Murmuration Complete. Subscription is the product; x402 meters only overage + agent-
229
+ to-agent calls. Pricing: https://atomadic.tech/docs.html?d=pricing.
230
+
231
+ ## Determinism
232
+
233
+ Pure-tier tools have no side effects and no hidden state: same inputs, same output,
234
+ same content hash, every time. Re-running a pure tool is a verification.
235
+
236
+ ## Contributing
237
+
238
+ This SDK is **auto-emitted from the live Atomadic MCP registry** -- changes here
239
+ should flow through the engine, not be hand-patched. For issues, requests, or
240
+ feedback: support@atomadic.tech.
241
+
242
+ ## License
243
+
244
+ Apache-2.0 -- see [LICENSE](LICENSE).
@@ -0,0 +1,226 @@
1
+ # Atomadic Python SDK
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/atomadic.svg)](https://pypi.org/project/atomadic/) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
4
+
5
+ **One MCP. One key. Every tool-set you are entitled to.**
6
+
7
+ Atomadic is sovereign infrastructure for the agent economy. Mount one MCP at
8
+ `mcp.atomadic.tech`; your **entitlement key** decides which product tool-sets you
9
+ can call. Every call passes Gate-1 (entitlement) then Gate-2 (trust).
10
+
11
+ - **Docs:** https://atomadic.tech/docs.html
12
+ - **Architecture:** https://atomadic.tech/docs.html?d=architecture
13
+ - **Support:** support@atomadic.tech
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ pip install atomadic
19
+ ```
20
+
21
+ ## Quickstart
22
+
23
+ ```python
24
+ from atomadic import Atomadic, fuse
25
+
26
+ ato = Atomadic(api_key='ato_...') # or set ATOMADIC_KEY env var
27
+
28
+ # Call any tool your plan unlocks:
29
+ result = fuse.assess_architecture_pure(
30
+ ato,
31
+ source_text='def f(x):\n return x + 1',
32
+ module_name='f_pure',
33
+ )
34
+ print(result['verdict'], result['density'])
35
+
36
+ # Or browse the surface your key unlocks:
37
+ for t in ato.list_tools():
38
+ print(t['name'])
39
+ ```
40
+
41
+ ## Authentication
42
+
43
+ Get an entitlement key from [atomadic.tech](https://atomadic.tech). The key is decoded
44
+ and verified at the edge on every call; minting is internal-only. Keep keys
45
+ server-side -- the gate refuses out-of-plan calls, but secrets belong in your env.
46
+
47
+ ```python
48
+ ato = Atomadic(api_key='ato_<blob>_<sig>')
49
+ # or: export ATOMADIC_KEY=ato_<blob>_<sig>
50
+ ```
51
+
52
+ ## Products & tool-sets
53
+
54
+ Each product is an entitlement-gated tool-set; hold the entitlement, call the tool.
55
+ Reserved products (Vanguard, Aegis, Catalyst) and roadmap (Evolve, Research, Mind-Lab)
56
+ are not yet in the SDK.
57
+
58
+ ### Fuse [live]
59
+
60
+ `entitlement: fuse` &middot; `from atomadic import fuse`
61
+
62
+ > _Architecture compiler -- AI writes code, we give it architecture._
63
+
64
+ Analyze your code against the 5-tier, single-callable discipline.
65
+
66
+ | Tool | Required args |
67
+ |---|---|
68
+ | **`assess_architecture_pure`** | `source_text`, `module_name` |
69
+ | **`assess_import_direction_pure`** | `source_text`, `tier` |
70
+ | **`scan_code_stubs_pure`** | `source_text` |
71
+
72
+ ```python
73
+ from atomadic import Atomadic, fuse
74
+ ato = Atomadic(api_key='ato_...')
75
+ fuse.assess_architecture_pure(ato, source_text=..., module_name=...)
76
+ ```
77
+
78
+ See per-tool docstrings for full arg schemas: `help(fuse.assess_architecture_pure)`
79
+
80
+ ### Nexus [live]
81
+
82
+ `entitlement: nexus` &middot; `from atomadic import nexus`
83
+
84
+ > _The trust gate every action passes._
85
+
86
+ Gate-2 sovereign trust: trust phases, hallucination bound, signed attestations.
87
+
88
+ | Tool | Required args |
89
+ |---|---|
90
+ | **`assess_nexus_trust_phase_stateful`** | `ledger_path` |
91
+ | **`define_nexus_constants_pure`** | (none) |
92
+ | **`enforce_nexus_gate_stateful`** | `action_kind`, `severity` |
93
+ | **`record_nexus_attestation_stateful`** | `action_kind`, `severity`, `ledger_path` |
94
+ | **`record_nexus_escalation_stateful`** | `action_kind`, `escalation_path` |
95
+ | **`scan_nexus_attestation_history_stateful`** | `ledger_path` |
96
+
97
+ ```python
98
+ from atomadic import Atomadic, nexus
99
+ ato = Atomadic(api_key='ato_...')
100
+ nexus.assess_nexus_trust_phase_stateful(ato, ledger_path=...)
101
+ ```
102
+
103
+ See per-tool docstrings for full arg schemas: `help(nexus.assess_nexus_trust_phase_stateful)`
104
+
105
+ ### Security [live]
106
+
107
+ `entitlement: security` &middot; `from atomadic import security`
108
+
109
+ > _A bubble of protection around every agent._
110
+
111
+ Bubble check, redaction, error-fold, hardening posture (PQC/FIPS-203).
112
+
113
+ | Tool | Required args |
114
+ |---|---|
115
+ | **`assess_security_bubble_pure`** | `content` |
116
+ | **`classify_error_fold_pure`** | `error_message` |
117
+ | **`compute_hardening_posture_pure`** | `target_product_id`, `hardening_level` |
118
+ | **`compute_redacted_args_pure`** | `args` |
119
+ | **`compute_redacted_text_pure`** | `text` |
120
+ | **`define_security_constants_pure`** | (none) |
121
+
122
+ ```python
123
+ from atomadic import Atomadic, security
124
+ ato = Atomadic(api_key='ato_...')
125
+ security.assess_security_bubble_pure(ato, content=...)
126
+ ```
127
+
128
+ See per-tool docstrings for full arg schemas: `help(security.assess_security_bubble_pure)`
129
+
130
+ ### Proving Ground [live]
131
+
132
+ `entitlement: proving` &middot; `from atomadic import proving`
133
+
134
+ > _Nothing ships unproven._
135
+
136
+ Ship-gate, proof-readiness signals, and test-coverage estimation.
137
+
138
+ | Tool | Required args |
139
+ |---|---|
140
+ | **`assess_proof_readiness_pure`** | `source_text` |
141
+ | **`score_test_coverage_pure`** | `source_text`, `test_source` |
142
+ | **`validate_logic_block_composite`** | `source_text`, `module_name` |
143
+
144
+ ```python
145
+ from atomadic import Atomadic, proving
146
+ ato = Atomadic(api_key='ato_...')
147
+ proving.assess_proof_readiness_pure(ato, source_text=...)
148
+ ```
149
+
150
+ See per-tool docstrings for full arg schemas: `help(proving.assess_proof_readiness_pure)`
151
+
152
+ ### Release [live]
153
+
154
+ `entitlement: release` &middot; `from atomadic import release`
155
+
156
+ > _Template -> render -> deploy._
157
+
158
+ Template registry, website render, Cloudflare deploy. Dry-run by default.
159
+
160
+ | Tool | Required args |
161
+ |---|---|
162
+ | **`record_release_template_stateful`** | `template_id`, `kind`, `source_kind`, `source_ref`, `registry_path` |
163
+ | **`render_from_template_pure`** | `template`, `context` |
164
+ | **`render_website_stateful`** | `template_dir`, `context`, `output_dir` |
165
+ | **`scan_release_templates_stateful`** | `registry_path` |
166
+ | **`serve_cloudflare_pages_stateful`** | `directory`, `project_name` |
167
+ | **`serve_cloudflare_worker_stateful`** | `worker_dir` |
168
+
169
+ ```python
170
+ from atomadic import Atomadic, release
171
+ ato = Atomadic(api_key='ato_...')
172
+ release.record_release_template_stateful(ato, template_id=..., kind=..., source_kind=...)
173
+ ```
174
+
175
+ See per-tool docstrings for full arg schemas: `help(release.record_release_template_stateful)`
176
+
177
+ ### Healer [beta]
178
+
179
+ `entitlement: healer` &middot; `from atomadic import healer`
180
+
181
+ > _Diagnose, grade, and plan the repair._
182
+
183
+ Read-only diagnosis: code-health grade + advisory repair plan.
184
+
185
+ | Tool | Required args |
186
+ |---|---|
187
+ | **`assess_artifact_health_pure`** | `source_text` |
188
+ | **`compute_repair_plan_pure`** | `error_message` |
189
+
190
+ ```python
191
+ from atomadic import Atomadic, healer
192
+ ato = Atomadic(api_key='ato_...')
193
+ healer.assess_artifact_health_pure(ato, source_text=...)
194
+ ```
195
+
196
+ See per-tool docstrings for full arg schemas: `help(healer.assess_artifact_health_pure)`
197
+
198
+ ## Two-gate dispatch
199
+
200
+ Every call is filtered then verified:
201
+
202
+ 1. **Gate-1 (entitlement):** `tools/list` shows only the tools your plan unlocks; out-of-plan `tools/call` is refused.
203
+ 2. **Gate-2 (trust, Nexus):** trust phase + severity ceiling + hallucination bound. Governed actions return a signed `attest:<id>` receipt.
204
+
205
+ See [the architecture docs](https://atomadic.tech/docs.html?d=two-gate) for the full model.
206
+
207
+ ## Plans
208
+
209
+ Free / Basic / Dev / Pro / Teams / Enterprise -- per product, or whole-line via
210
+ Murmuration Complete. Subscription is the product; x402 meters only overage + agent-
211
+ to-agent calls. Pricing: https://atomadic.tech/docs.html?d=pricing.
212
+
213
+ ## Determinism
214
+
215
+ Pure-tier tools have no side effects and no hidden state: same inputs, same output,
216
+ same content hash, every time. Re-running a pure tool is a verification.
217
+
218
+ ## Contributing
219
+
220
+ This SDK is **auto-emitted from the live Atomadic MCP registry** -- changes here
221
+ should flow through the engine, not be hand-patched. For issues, requests, or
222
+ feedback: support@atomadic.tech.
223
+
224
+ ## License
225
+
226
+ Apache-2.0 -- see [LICENSE](LICENSE).
@@ -0,0 +1,7 @@
1
+ """Atomadic Python SDK -- one MCP, entitlement-gated tool-sets.
2
+
3
+ Mount once at mcp.atomadic.tech; your entitlement key decides the surface.
4
+ """
5
+ from .client import Atomadic
6
+ __all__ = ["Atomadic"]
7
+ __version__ = "0.1.0"
@@ -0,0 +1,31 @@
1
+ """Atomadic MCP client -- thin JSON-RPC wrapper over mcp.atomadic.tech."""
2
+ import os, json, urllib.request
3
+
4
+ DEFAULT_URL = 'https://mcp.atomadic.tech'
5
+
6
+ class Atomadic:
7
+ '''Thin MCP client. Set api_key explicitly or via ATOMADIC_KEY env var.'''
8
+ def __init__(self, api_key=None, url=None):
9
+ self.api_key = api_key or os.environ.get('ATOMADIC_KEY', '')
10
+ self.url = url or os.environ.get('ATOMADIC_MCP_URL', DEFAULT_URL)
11
+ self._id = 0
12
+ def _rpc(self, method, params):
13
+ self._id += 1
14
+ body = json.dumps({'jsonrpc': '2.0', 'id': self._id, 'method': method, 'params': params}).encode('utf-8')
15
+ req = urllib.request.Request(self.url, data=body, headers={'Content-Type': 'application/json', 'Authorization': 'Bearer ' + (self.api_key or '')})
16
+ with urllib.request.urlopen(req, timeout=60) as r:
17
+ return json.loads(r.read().decode('utf-8'))
18
+ def call(self, tool, arguments=None):
19
+ resp = self._rpc('tools/call', {'name': tool, 'arguments': arguments or {}})
20
+ if 'error' in resp:
21
+ raise RuntimeError('MCP error: ' + json.dumps(resp['error']))
22
+ content = (resp.get('result') or {}).get('content') or []
23
+ if content and content[0].get('type') == 'text':
24
+ text = content[0].get('text', '')
25
+ try:
26
+ return json.loads(text)
27
+ except (ValueError, TypeError):
28
+ return text
29
+ return resp.get('result')
30
+ def list_tools(self):
31
+ return (self._rpc('tools/list', {}).get('result') or {}).get('tools', [])
@@ -0,0 +1,59 @@
1
+ """atomadic.fuse -- Fuse.
2
+
3
+ Architecture compiler -- AI writes code, we give it architecture.
4
+ Analyze your code against the 5-tier, single-callable discipline.
5
+
6
+ Entitlement: fuse (Gate-1 unlocks these tools).
7
+ Status: live.
8
+ Auto-emitted from the live MCP registry.
9
+ """
10
+
11
+ def assess_architecture_pure(client, source_text, module_name, **kwargs):
12
+ """[Fuse product · entitlement: fuse] Analyze a provided Python source's architecture vs the Atomadic 5-tier / single-callable discipline: callables, single-callable, imports + tier directions, logic density, tier hint, findings, verdict. Operates only on the provided source.
13
+
14
+ Args:
15
+ source_text (string, required): see MCP schema
16
+ module_name (string, required): see MCP schema
17
+
18
+ Example:
19
+ from atomadic import Atomadic, fuse
20
+ ato = Atomadic(api_key='ato_...')
21
+ result = fuse.assess_architecture_pure(ato, source_text=..., module_name=...)
22
+ """
23
+ args = {'source_text': source_text, 'module_name': module_name}
24
+ args = {k: v for k, v in args.items() if v is not None}
25
+ args.update(kwargs)
26
+ return client.call('assess_architecture_pure', args)
27
+
28
+ def assess_import_direction_pure(client, source_text, tier, **kwargs):
29
+ """[Fuse product · entitlement: fuse] Tier-law check: verify a source's atomadic imports respect the 5-tier downward-only law (tier-N imports tier-&lt;N only); reports same-tier and upward violations.
30
+
31
+ Args:
32
+ source_text (string, required): see MCP schema
33
+ tier (integer, required): see MCP schema
34
+
35
+ Example:
36
+ from atomadic import Atomadic, fuse
37
+ ato = Atomadic(api_key='ato_...')
38
+ result = fuse.assess_import_direction_pure(ato, source_text=..., tier=...)
39
+ """
40
+ args = {'source_text': source_text, 'tier': tier}
41
+ args = {k: v for k, v in args.items() if v is not None}
42
+ args.update(kwargs)
43
+ return client.call('assess_import_direction_pure', args)
44
+
45
+ def scan_code_stubs_pure(client, source_text, **kwargs):
46
+ """[Fuse product · entitlement: fuse] Stub-hunter: scan provided source for stub/scaffold/placeholder patterns (NotImplementedError, TODO/FIXME, ellipsis/pass-only bodies, empty-shell returns). Returns REAL or STUB + findings.
47
+
48
+ Args:
49
+ source_text (string, required): see MCP schema
50
+
51
+ Example:
52
+ from atomadic import Atomadic, fuse
53
+ ato = Atomadic(api_key='ato_...')
54
+ result = fuse.scan_code_stubs_pure(ato, source_text=...)
55
+ """
56
+ args = {'source_text': source_text}
57
+ args = {k: v for k, v in args.items() if v is not None}
58
+ args.update(kwargs)
59
+ return client.call('scan_code_stubs_pure', args)
@@ -0,0 +1,43 @@
1
+ """atomadic.healer -- Healer.
2
+
3
+ Diagnose, grade, and plan the repair.
4
+ Read-only diagnosis: code-health grade + advisory repair plan.
5
+
6
+ Entitlement: healer (Gate-1 unlocks these tools).
7
+ Status: beta.
8
+ Auto-emitted from the live MCP registry.
9
+ """
10
+
11
+ def assess_artifact_health_pure(client, source_text, module_name=None, **kwargs):
12
+ """[Healer product · entitlement: healer] Composite code-health diagnosis of a provided artifact: parses + logic density + single-callable + stub signals, graded A-F with issues. Read-only.
13
+
14
+ Args:
15
+ source_text (string, required): see MCP schema
16
+ module_name (string, optional): see MCP schema
17
+
18
+ Example:
19
+ from atomadic import Atomadic, healer
20
+ ato = Atomadic(api_key='ato_...')
21
+ result = healer.assess_artifact_health_pure(ato, source_text=...)
22
+ """
23
+ args = {'source_text': source_text, 'module_name': module_name}
24
+ args = {k: v for k, v in args.items() if v is not None}
25
+ args.update(kwargs)
26
+ return client.call('assess_artifact_health_pure', args)
27
+
28
+ def compute_repair_plan_pure(client, error_message, source_text=None, **kwargs):
29
+ """[Healer product · entitlement: healer] Compute an advisory repair plan for a provided broken artifact + its error: category, severity, concrete steps, confidence. Read-only — application stays with the customer/operator.
30
+
31
+ Args:
32
+ error_message (string, required): see MCP schema
33
+ source_text (string, optional): see MCP schema
34
+
35
+ Example:
36
+ from atomadic import Atomadic, healer
37
+ ato = Atomadic(api_key='ato_...')
38
+ result = healer.compute_repair_plan_pure(ato, error_message=...)
39
+ """
40
+ args = {'error_message': error_message, 'source_text': source_text}
41
+ args = {k: v for k, v in args.items() if v is not None}
42
+ args.update(kwargs)
43
+ return client.call('compute_repair_plan_pure', args)
@@ -0,0 +1,126 @@
1
+ """atomadic.nexus -- Nexus.
2
+
3
+ The trust gate every action passes.
4
+ Gate-2 sovereign trust: trust phases, hallucination bound, signed attestations.
5
+
6
+ Entitlement: nexus (Gate-1 unlocks these tools).
7
+ Status: live.
8
+ Auto-emitted from the live MCP registry.
9
+ """
10
+
11
+ def assess_nexus_trust_phase_stateful(client, ledger_path, actor=None, has_federated_key=None, **kwargs):
12
+ """[Nexus product · entitlement: nexus] Compute an actor's current trust phase (genesis/building/attested/sovereign/escalated) by reading their attestation history from the ledger.
13
+
14
+ Args:
15
+ ledger_path (string, required): see MCP schema
16
+ actor (string, optional): see MCP schema
17
+ has_federated_key (boolean, optional): see MCP schema
18
+
19
+ Example:
20
+ from atomadic import Atomadic, nexus
21
+ ato = Atomadic(api_key='ato_...')
22
+ result = nexus.assess_nexus_trust_phase_stateful(ato, ledger_path=...)
23
+ """
24
+ args = {'ledger_path': ledger_path, 'actor': actor, 'has_federated_key': has_federated_key}
25
+ args = {k: v for k, v in args.items() if v is not None}
26
+ args.update(kwargs)
27
+ return client.call('assess_nexus_trust_phase_stateful', args)
28
+
29
+ def define_nexus_constants_pure(client, **kwargs):
30
+ """[Nexus product · entitlement: nexus] The canonical Nexus trust constants: 5 trust phases + thresholds, 4 severities with phase floor + co-signers, signer modes, the 0.95 hallucination-bound floor, attestation schema, and 5 refusal codes.
31
+
32
+ Example:
33
+ from atomadic import Atomadic, nexus
34
+ ato = Atomadic(api_key='ato_...')
35
+ result = nexus.define_nexus_constants_pure(ato)
36
+ """
37
+ args = {}
38
+ args = {k: v for k, v in args.items() if v is not None}
39
+ args.update(kwargs)
40
+ return client.call('define_nexus_constants_pure', args)
41
+
42
+ def enforce_nexus_gate_stateful(client, action_kind, severity, attestation_count=None, bound_score=None, entitlement_ok=None, has_federated_key=None, ledger_path=None, payload=None, recent_escalations=None, **kwargs):
43
+ """[Nexus product · entitlement: nexus] Gate-2 two-gate enforcement: resolve trust phase, check severity ceiling, enforce the 0.95 hallucination bound for high/critical, require Gate-1 entitlement; on PASS issue + ledger an attestation. Returns PASS/BLOCKED/ESCALATE + refusal code.
44
+
45
+ Args:
46
+ action_kind (string, required): see MCP schema
47
+ severity (string, required): see MCP schema
48
+ attestation_count (integer, optional): see MCP schema
49
+ bound_score (number/null, optional): see MCP schema
50
+ entitlement_ok (boolean, optional): see MCP schema
51
+ has_federated_key (boolean, optional): see MCP schema
52
+ ledger_path (string, optional): see MCP schema
53
+ payload (object, optional): see MCP schema
54
+ recent_escalations (integer, optional): see MCP schema
55
+
56
+ Example:
57
+ from atomadic import Atomadic, nexus
58
+ ato = Atomadic(api_key='ato_...')
59
+ result = nexus.enforce_nexus_gate_stateful(ato, action_kind=..., severity=...)
60
+ """
61
+ args = {'action_kind': action_kind, 'severity': severity, 'attestation_count': attestation_count, 'bound_score': bound_score, 'entitlement_ok': entitlement_ok, 'has_federated_key': has_federated_key, 'ledger_path': ledger_path, 'payload': payload, 'recent_escalations': recent_escalations}
62
+ args = {k: v for k, v in args.items() if v is not None}
63
+ args.update(kwargs)
64
+ return client.call('enforce_nexus_gate_stateful', args)
65
+
66
+ def record_nexus_attestation_stateful(client, action_kind, severity, ledger_path, bound_score=None, payload=None, signer_mode=None, trust_phase=None, **kwargs):
67
+ """[Nexus product · entitlement: nexus] Issue a Nexus attestation envelope (atomadic.nexus_attestation.v1) and append it to the hash-chained attestation ledger. Deterministic envelope + attest:&lt;12-hex&gt; id.
68
+
69
+ Args:
70
+ action_kind (string, required): see MCP schema
71
+ severity (string, required): see MCP schema
72
+ ledger_path (string, required): see MCP schema
73
+ bound_score (number/null, optional): see MCP schema
74
+ payload (object, optional): see MCP schema
75
+ signer_mode (string, optional): see MCP schema
76
+ trust_phase (string, optional): see MCP schema
77
+
78
+ Example:
79
+ from atomadic import Atomadic, nexus
80
+ ato = Atomadic(api_key='ato_...')
81
+ result = nexus.record_nexus_attestation_stateful(ato, action_kind=..., severity=..., ledger_path=...)
82
+ """
83
+ args = {'action_kind': action_kind, 'severity': severity, 'ledger_path': ledger_path, 'bound_score': bound_score, 'payload': payload, 'signer_mode': signer_mode, 'trust_phase': trust_phase}
84
+ args = {k: v for k, v in args.items() if v is not None}
85
+ args.update(kwargs)
86
+ return client.call('record_nexus_attestation_stateful', args)
87
+
88
+ def record_nexus_escalation_stateful(client, action_kind, escalation_path, actor=None, reason=None, severity=None, **kwargs):
89
+ """[Nexus product · entitlement: nexus] Emit a Nexus escalation envelope to the Operator surface when an action is at the trust-phase boundary (ESCALATION_REQUIRED).
90
+
91
+ Args:
92
+ action_kind (string, required): see MCP schema
93
+ escalation_path (string, required): see MCP schema
94
+ actor (string, optional): see MCP schema
95
+ reason (string, optional): see MCP schema
96
+ severity (string, optional): see MCP schema
97
+
98
+ Example:
99
+ from atomadic import Atomadic, nexus
100
+ ato = Atomadic(api_key='ato_...')
101
+ result = nexus.record_nexus_escalation_stateful(ato, action_kind=..., escalation_path=...)
102
+ """
103
+ args = {'action_kind': action_kind, 'escalation_path': escalation_path, 'actor': actor, 'reason': reason, 'severity': severity}
104
+ args = {k: v for k, v in args.items() if v is not None}
105
+ args.update(kwargs)
106
+ return client.call('record_nexus_escalation_stateful', args)
107
+
108
+ def scan_nexus_attestation_history_stateful(client, ledger_path, action_kind=None, limit=None, phase=None, signer_mode=None, **kwargs):
109
+ """[Nexus product · entitlement: nexus] Query the attestation ledger by action kind, signer mode, and/or trust phase; returns recent matching attestations.
110
+
111
+ Args:
112
+ ledger_path (string, required): see MCP schema
113
+ action_kind (string, optional): see MCP schema
114
+ limit (integer, optional): see MCP schema
115
+ phase (string, optional): see MCP schema
116
+ signer_mode (string, optional): see MCP schema
117
+
118
+ Example:
119
+ from atomadic import Atomadic, nexus
120
+ ato = Atomadic(api_key='ato_...')
121
+ result = nexus.scan_nexus_attestation_history_stateful(ato, ledger_path=...)
122
+ """
123
+ args = {'ledger_path': ledger_path, 'action_kind': action_kind, 'limit': limit, 'phase': phase, 'signer_mode': signer_mode}
124
+ args = {k: v for k, v in args.items() if v is not None}
125
+ args.update(kwargs)
126
+ return client.call('scan_nexus_attestation_history_stateful', args)
@@ -0,0 +1,59 @@
1
+ """atomadic.proving -- Proving Ground.
2
+
3
+ Nothing ships unproven.
4
+ Ship-gate, proof-readiness signals, and test-coverage estimation.
5
+
6
+ Entitlement: proving (Gate-1 unlocks these tools).
7
+ Status: live.
8
+ Auto-emitted from the live MCP registry.
9
+ """
10
+
11
+ def assess_proof_readiness_pure(client, source_text, **kwargs):
12
+ """[Proving product · entitlement: proving] Assess ship/proof-readiness of provided source: docstring, returns-value, guards/asserts, type-hints, stub-free → score + ready verdict.
13
+
14
+ Args:
15
+ source_text (string, required): see MCP schema
16
+
17
+ Example:
18
+ from atomadic import Atomadic, proving
19
+ ato = Atomadic(api_key='ato_...')
20
+ result = proving.assess_proof_readiness_pure(ato, source_text=...)
21
+ """
22
+ args = {'source_text': source_text}
23
+ args = {k: v for k, v in args.items() if v is not None}
24
+ args.update(kwargs)
25
+ return client.call('assess_proof_readiness_pure', args)
26
+
27
+ def score_test_coverage_pure(client, source_text, test_source, **kwargs):
28
+ """[Proving product · entitlement: proving] Estimate test coverage: which top-level functions in the source are referenced by the test source; returns covered/uncovered + coverage ratio.
29
+
30
+ Args:
31
+ source_text (string, required): see MCP schema
32
+ test_source (string, required): see MCP schema
33
+
34
+ Example:
35
+ from atomadic import Atomadic, proving
36
+ ato = Atomadic(api_key='ato_...')
37
+ result = proving.score_test_coverage_pure(ato, source_text=..., test_source=...)
38
+ """
39
+ args = {'source_text': source_text, 'test_source': test_source}
40
+ args = {k: v for k, v in args.items() if v is not None}
41
+ args.update(kwargs)
42
+ return client.call('score_test_coverage_pure', args)
43
+
44
+ def validate_logic_block_composite(client, source_text, module_name, **kwargs):
45
+ """[Proving product · entitlement: proving] The ship gate: judge a provided Python source against the Atomadic standards (logic density, single-callable, echo, import isolation, skeleton-clone, stub-emitter, sovereign imports). Returns {passed, violations}.
46
+
47
+ Args:
48
+ source_text (string, required): see MCP schema
49
+ module_name (string, required): see MCP schema
50
+
51
+ Example:
52
+ from atomadic import Atomadic, proving
53
+ ato = Atomadic(api_key='ato_...')
54
+ result = proving.validate_logic_block_composite(ato, source_text=..., module_name=...)
55
+ """
56
+ args = {'source_text': source_text, 'module_name': module_name}
57
+ args = {k: v for k, v in args.items() if v is not None}
58
+ args.update(kwargs)
59
+ return client.call('validate_logic_block_composite', args)
@@ -0,0 +1,124 @@
1
+ """atomadic.release -- Release.
2
+
3
+ Template -> render -> deploy.
4
+ Template registry, website render, Cloudflare deploy. Dry-run by default.
5
+
6
+ Entitlement: release (Gate-1 unlocks these tools).
7
+ Status: live.
8
+ Auto-emitted from the live MCP registry.
9
+ """
10
+
11
+ def record_release_template_stateful(client, template_id, kind, source_kind, source_ref, registry_path, brand=None, tokens=None, **kwargs):
12
+ """[Release product · entitlement: release] Register a release template (ours or customer BYO) into the template registry ledger.
13
+
14
+ Args:
15
+ template_id (string, required): see MCP schema
16
+ kind (string, required): see MCP schema
17
+ source_kind (string, required): see MCP schema
18
+ source_ref (string, required): see MCP schema
19
+ registry_path (string, required): see MCP schema
20
+ brand (object, optional): see MCP schema
21
+ tokens (array, optional): see MCP schema
22
+
23
+ Example:
24
+ from atomadic import Atomadic, release
25
+ ato = Atomadic(api_key='ato_...')
26
+ result = release.record_release_template_stateful(ato, template_id=..., kind=..., source_kind=...)
27
+ """
28
+ args = {'template_id': template_id, 'kind': kind, 'source_kind': source_kind, 'source_ref': source_ref, 'registry_path': registry_path, 'brand': brand, 'tokens': tokens}
29
+ args = {k: v for k, v in args.items() if v is not None}
30
+ args.update(kwargs)
31
+ return client.call('record_release_template_stateful', args)
32
+
33
+ def render_from_template_pure(client, template, context, missing=None, **kwargs):
34
+ """[Release product · entitlement: release] Deterministically render a {{token}} text template from a context mapping. Ours or customer templates, one code path.
35
+
36
+ Args:
37
+ template (string, required): see MCP schema
38
+ context (object, required): see MCP schema
39
+ missing (string, optional): see MCP schema
40
+
41
+ Example:
42
+ from atomadic import Atomadic, release
43
+ ato = Atomadic(api_key='ato_...')
44
+ result = release.render_from_template_pure(ato, template=..., context=...)
45
+ """
46
+ args = {'template': template, 'context': context, 'missing': missing}
47
+ args = {k: v for k, v in args.items() if v is not None}
48
+ args.update(kwargs)
49
+ return client.call('render_from_template_pure', args)
50
+
51
+ def render_website_stateful(client, template_dir, context, output_dir, include_ext=None, **kwargs):
52
+ """[Release product · entitlement: release] Render a static website from a template directory (ours or customer's) into an output dir; {{token}} substitution + assets. Ready for Cloudflare Pages.
53
+
54
+ Args:
55
+ template_dir (string, required): see MCP schema
56
+ context (object, required): see MCP schema
57
+ output_dir (string, required): see MCP schema
58
+ include_ext (array, optional): see MCP schema
59
+
60
+ Example:
61
+ from atomadic import Atomadic, release
62
+ ato = Atomadic(api_key='ato_...')
63
+ result = release.render_website_stateful(ato, template_dir=..., context=..., output_dir=...)
64
+ """
65
+ args = {'template_dir': template_dir, 'context': context, 'output_dir': output_dir, 'include_ext': include_ext}
66
+ args = {k: v for k, v in args.items() if v is not None}
67
+ args.update(kwargs)
68
+ return client.call('render_website_stateful', args)
69
+
70
+ def scan_release_templates_stateful(client, registry_path, kind=None, **kwargs):
71
+ """[Release product · entitlement: release] List registered release templates (latest per id), optional kind filter.
72
+
73
+ Args:
74
+ registry_path (string, required): see MCP schema
75
+ kind (string, optional): see MCP schema
76
+
77
+ Example:
78
+ from atomadic import Atomadic, release
79
+ ato = Atomadic(api_key='ato_...')
80
+ result = release.scan_release_templates_stateful(ato, registry_path=...)
81
+ """
82
+ args = {'registry_path': registry_path, 'kind': kind}
83
+ args = {k: v for k, v in args.items() if v is not None}
84
+ args.update(kwargs)
85
+ return client.call('scan_release_templates_stateful', args)
86
+
87
+ def serve_cloudflare_pages_stateful(client, directory, project_name, branch=None, operator_authorized=None, vault_path=None, **kwargs):
88
+ """[Release product · entitlement: release] Deploy a built site to Cloudflare Pages via wrangler. Dry-run by default; live ONLY with operator_authorized=true.
89
+
90
+ Args:
91
+ directory (string, required): see MCP schema
92
+ project_name (string, required): see MCP schema
93
+ branch (string, optional): see MCP schema
94
+ operator_authorized (boolean, optional): see MCP schema
95
+ vault_path (string, optional): see MCP schema
96
+
97
+ Example:
98
+ from atomadic import Atomadic, release
99
+ ato = Atomadic(api_key='ato_...')
100
+ result = release.serve_cloudflare_pages_stateful(ato, directory=..., project_name=...)
101
+ """
102
+ args = {'directory': directory, 'project_name': project_name, 'branch': branch, 'operator_authorized': operator_authorized, 'vault_path': vault_path}
103
+ args = {k: v for k, v in args.items() if v is not None}
104
+ args.update(kwargs)
105
+ return client.call('serve_cloudflare_pages_stateful', args)
106
+
107
+ def serve_cloudflare_worker_stateful(client, worker_dir, operator_authorized=None, vault_path=None, worker_name=None, **kwargs):
108
+ """[Release product · entitlement: release] Deploy a Cloudflare Worker (e.g. the MCP edge) via wrangler. Dry-run by default; live ONLY with operator_authorized=true.
109
+
110
+ Args:
111
+ worker_dir (string, required): see MCP schema
112
+ operator_authorized (boolean, optional): see MCP schema
113
+ vault_path (string, optional): see MCP schema
114
+ worker_name (string, optional): see MCP schema
115
+
116
+ Example:
117
+ from atomadic import Atomadic, release
118
+ ato = Atomadic(api_key='ato_...')
119
+ result = release.serve_cloudflare_worker_stateful(ato, worker_dir=...)
120
+ """
121
+ args = {'worker_dir': worker_dir, 'operator_authorized': operator_authorized, 'vault_path': vault_path, 'worker_name': worker_name}
122
+ args = {k: v for k, v in args.items() if v is not None}
123
+ args.update(kwargs)
124
+ return client.call('serve_cloudflare_worker_stateful', args)
@@ -0,0 +1,105 @@
1
+ """atomadic.security -- Security.
2
+
3
+ A bubble of protection around every agent.
4
+ Bubble check, redaction, error-fold, hardening posture (PQC/FIPS-203).
5
+
6
+ Entitlement: security (Gate-1 unlocks these tools).
7
+ Status: live.
8
+ Auto-emitted from the live MCP registry.
9
+ """
10
+
11
+ def assess_security_bubble_pure(client, content, strict=None, **kwargs):
12
+ """[Security product · entitlement: security] Bubble check: sandbox-scan a content snippet for adversarial / prompt-injection / exfiltration / jailbreak patterns; returns PROCEED / REVIEW / BLOCK with the threats detected.
13
+
14
+ Args:
15
+ content (string, required): see MCP schema
16
+ strict (boolean, optional): see MCP schema
17
+
18
+ Example:
19
+ from atomadic import Atomadic, security
20
+ ato = Atomadic(api_key='ato_...')
21
+ result = security.assess_security_bubble_pure(ato, content=...)
22
+ """
23
+ args = {'content': content, 'strict': strict}
24
+ args = {k: v for k, v in args.items() if v is not None}
25
+ args.update(kwargs)
26
+ return client.call('assess_security_bubble_pure', args)
27
+
28
+ def classify_error_fold_pure(client, error_message, action_kind=None, **kwargs):
29
+ """[Security product · entitlement: security] Classify an error-fold entry with severity, category, and a suggested repair path before Healer ingests it.
30
+
31
+ Args:
32
+ error_message (string, required): see MCP schema
33
+ action_kind (string, optional): see MCP schema
34
+
35
+ Example:
36
+ from atomadic import Atomadic, security
37
+ ato = Atomadic(api_key='ato_...')
38
+ result = security.classify_error_fold_pure(ato, error_message=...)
39
+ """
40
+ args = {'error_message': error_message, 'action_kind': action_kind}
41
+ args = {k: v for k, v in args.items() if v is not None}
42
+ args.update(kwargs)
43
+ return client.call('classify_error_fold_pure', args)
44
+
45
+ def compute_hardening_posture_pure(client, target_product_id, hardening_level, **kwargs):
46
+ """[Security product · entitlement: security] Compute the recommended hardening posture (cumulative directives) for a target product at a level (info/low/medium/high/critical); critical requires operator co-sign.
47
+
48
+ Args:
49
+ target_product_id (string, required): see MCP schema
50
+ hardening_level (string, required): see MCP schema
51
+
52
+ Example:
53
+ from atomadic import Atomadic, security
54
+ ato = Atomadic(api_key='ato_...')
55
+ result = security.compute_hardening_posture_pure(ato, target_product_id=..., hardening_level=...)
56
+ """
57
+ args = {'target_product_id': target_product_id, 'hardening_level': hardening_level}
58
+ args = {k: v for k, v in args.items() if v is not None}
59
+ args.update(kwargs)
60
+ return client.call('compute_hardening_posture_pure', args)
61
+
62
+ def compute_redacted_args_pure(client, args, **kwargs):
63
+ """[Security product · entitlement: security] Redact a tool-args object: replaces secret-pattern values and secret-named fields with safe placeholders (nested-aware).
64
+
65
+ Args:
66
+ args (object, required): see MCP schema
67
+
68
+ Example:
69
+ from atomadic import Atomadic, security
70
+ ato = Atomadic(api_key='ato_...')
71
+ result = security.compute_redacted_args_pure(ato, args=...)
72
+ """
73
+ args = {'args': args}
74
+ args = {k: v for k, v in args.items() if v is not None}
75
+ args.update(kwargs)
76
+ return client.call('compute_redacted_args_pure', args)
77
+
78
+ def compute_redacted_text_pure(client, text, **kwargs):
79
+ """[Security product · entitlement: security] Redact secrets from free-form text; replaces each match with a verify-without-reveal placeholder [REDACTED:kind:sha8].
80
+
81
+ Args:
82
+ text (string, required): see MCP schema
83
+
84
+ Example:
85
+ from atomadic import Atomadic, security
86
+ ato = Atomadic(api_key='ato_...')
87
+ result = security.compute_redacted_text_pure(ato, text=...)
88
+ """
89
+ args = {'text': text}
90
+ args = {k: v for k, v in args.items() if v is not None}
91
+ args.update(kwargs)
92
+ return client.call('compute_redacted_text_pure', args)
93
+
94
+ def define_security_constants_pure(client, **kwargs):
95
+ """[Security product · entitlement: security] Canonical Security constants: bubble verdicts, hardening levels + cumulative directives, error-fold categories, redaction kinds, PQC standard (FIPS-203).
96
+
97
+ Example:
98
+ from atomadic import Atomadic, security
99
+ ato = Atomadic(api_key='ato_...')
100
+ result = security.define_security_constants_pure(ato)
101
+ """
102
+ args = {}
103
+ args = {k: v for k, v in args.items() if v is not None}
104
+ args.update(kwargs)
105
+ return client.call('define_security_constants_pure', args)
@@ -0,0 +1,244 @@
1
+ Metadata-Version: 2.4
2
+ Name: atomadic
3
+ Version: 0.1.0
4
+ Summary: Atomadic Python SDK -- one MCP, entitlement-gated tool-sets
5
+ Author-email: Atomadic <support@atomadic.tech>
6
+ License: Apache-2.0
7
+ Project-URL: Homepage, https://atomadic.tech
8
+ Project-URL: Docs, https://atomadic.tech/docs.html
9
+ Project-URL: Issues, https://github.com/atomadictech/atomadic-sdk/issues
10
+ Keywords: atomadic,mcp,agents,sdk,trust,verification
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Software Development :: Libraries
14
+ Requires-Python: >=3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Dynamic: license-file
18
+
19
+ # Atomadic Python SDK
20
+
21
+ [![PyPI](https://img.shields.io/pypi/v/atomadic.svg)](https://pypi.org/project/atomadic/) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
22
+
23
+ **One MCP. One key. Every tool-set you are entitled to.**
24
+
25
+ Atomadic is sovereign infrastructure for the agent economy. Mount one MCP at
26
+ `mcp.atomadic.tech`; your **entitlement key** decides which product tool-sets you
27
+ can call. Every call passes Gate-1 (entitlement) then Gate-2 (trust).
28
+
29
+ - **Docs:** https://atomadic.tech/docs.html
30
+ - **Architecture:** https://atomadic.tech/docs.html?d=architecture
31
+ - **Support:** support@atomadic.tech
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ pip install atomadic
37
+ ```
38
+
39
+ ## Quickstart
40
+
41
+ ```python
42
+ from atomadic import Atomadic, fuse
43
+
44
+ ato = Atomadic(api_key='ato_...') # or set ATOMADIC_KEY env var
45
+
46
+ # Call any tool your plan unlocks:
47
+ result = fuse.assess_architecture_pure(
48
+ ato,
49
+ source_text='def f(x):\n return x + 1',
50
+ module_name='f_pure',
51
+ )
52
+ print(result['verdict'], result['density'])
53
+
54
+ # Or browse the surface your key unlocks:
55
+ for t in ato.list_tools():
56
+ print(t['name'])
57
+ ```
58
+
59
+ ## Authentication
60
+
61
+ Get an entitlement key from [atomadic.tech](https://atomadic.tech). The key is decoded
62
+ and verified at the edge on every call; minting is internal-only. Keep keys
63
+ server-side -- the gate refuses out-of-plan calls, but secrets belong in your env.
64
+
65
+ ```python
66
+ ato = Atomadic(api_key='ato_<blob>_<sig>')
67
+ # or: export ATOMADIC_KEY=ato_<blob>_<sig>
68
+ ```
69
+
70
+ ## Products & tool-sets
71
+
72
+ Each product is an entitlement-gated tool-set; hold the entitlement, call the tool.
73
+ Reserved products (Vanguard, Aegis, Catalyst) and roadmap (Evolve, Research, Mind-Lab)
74
+ are not yet in the SDK.
75
+
76
+ ### Fuse [live]
77
+
78
+ `entitlement: fuse` &middot; `from atomadic import fuse`
79
+
80
+ > _Architecture compiler -- AI writes code, we give it architecture._
81
+
82
+ Analyze your code against the 5-tier, single-callable discipline.
83
+
84
+ | Tool | Required args |
85
+ |---|---|
86
+ | **`assess_architecture_pure`** | `source_text`, `module_name` |
87
+ | **`assess_import_direction_pure`** | `source_text`, `tier` |
88
+ | **`scan_code_stubs_pure`** | `source_text` |
89
+
90
+ ```python
91
+ from atomadic import Atomadic, fuse
92
+ ato = Atomadic(api_key='ato_...')
93
+ fuse.assess_architecture_pure(ato, source_text=..., module_name=...)
94
+ ```
95
+
96
+ See per-tool docstrings for full arg schemas: `help(fuse.assess_architecture_pure)`
97
+
98
+ ### Nexus [live]
99
+
100
+ `entitlement: nexus` &middot; `from atomadic import nexus`
101
+
102
+ > _The trust gate every action passes._
103
+
104
+ Gate-2 sovereign trust: trust phases, hallucination bound, signed attestations.
105
+
106
+ | Tool | Required args |
107
+ |---|---|
108
+ | **`assess_nexus_trust_phase_stateful`** | `ledger_path` |
109
+ | **`define_nexus_constants_pure`** | (none) |
110
+ | **`enforce_nexus_gate_stateful`** | `action_kind`, `severity` |
111
+ | **`record_nexus_attestation_stateful`** | `action_kind`, `severity`, `ledger_path` |
112
+ | **`record_nexus_escalation_stateful`** | `action_kind`, `escalation_path` |
113
+ | **`scan_nexus_attestation_history_stateful`** | `ledger_path` |
114
+
115
+ ```python
116
+ from atomadic import Atomadic, nexus
117
+ ato = Atomadic(api_key='ato_...')
118
+ nexus.assess_nexus_trust_phase_stateful(ato, ledger_path=...)
119
+ ```
120
+
121
+ See per-tool docstrings for full arg schemas: `help(nexus.assess_nexus_trust_phase_stateful)`
122
+
123
+ ### Security [live]
124
+
125
+ `entitlement: security` &middot; `from atomadic import security`
126
+
127
+ > _A bubble of protection around every agent._
128
+
129
+ Bubble check, redaction, error-fold, hardening posture (PQC/FIPS-203).
130
+
131
+ | Tool | Required args |
132
+ |---|---|
133
+ | **`assess_security_bubble_pure`** | `content` |
134
+ | **`classify_error_fold_pure`** | `error_message` |
135
+ | **`compute_hardening_posture_pure`** | `target_product_id`, `hardening_level` |
136
+ | **`compute_redacted_args_pure`** | `args` |
137
+ | **`compute_redacted_text_pure`** | `text` |
138
+ | **`define_security_constants_pure`** | (none) |
139
+
140
+ ```python
141
+ from atomadic import Atomadic, security
142
+ ato = Atomadic(api_key='ato_...')
143
+ security.assess_security_bubble_pure(ato, content=...)
144
+ ```
145
+
146
+ See per-tool docstrings for full arg schemas: `help(security.assess_security_bubble_pure)`
147
+
148
+ ### Proving Ground [live]
149
+
150
+ `entitlement: proving` &middot; `from atomadic import proving`
151
+
152
+ > _Nothing ships unproven._
153
+
154
+ Ship-gate, proof-readiness signals, and test-coverage estimation.
155
+
156
+ | Tool | Required args |
157
+ |---|---|
158
+ | **`assess_proof_readiness_pure`** | `source_text` |
159
+ | **`score_test_coverage_pure`** | `source_text`, `test_source` |
160
+ | **`validate_logic_block_composite`** | `source_text`, `module_name` |
161
+
162
+ ```python
163
+ from atomadic import Atomadic, proving
164
+ ato = Atomadic(api_key='ato_...')
165
+ proving.assess_proof_readiness_pure(ato, source_text=...)
166
+ ```
167
+
168
+ See per-tool docstrings for full arg schemas: `help(proving.assess_proof_readiness_pure)`
169
+
170
+ ### Release [live]
171
+
172
+ `entitlement: release` &middot; `from atomadic import release`
173
+
174
+ > _Template -> render -> deploy._
175
+
176
+ Template registry, website render, Cloudflare deploy. Dry-run by default.
177
+
178
+ | Tool | Required args |
179
+ |---|---|
180
+ | **`record_release_template_stateful`** | `template_id`, `kind`, `source_kind`, `source_ref`, `registry_path` |
181
+ | **`render_from_template_pure`** | `template`, `context` |
182
+ | **`render_website_stateful`** | `template_dir`, `context`, `output_dir` |
183
+ | **`scan_release_templates_stateful`** | `registry_path` |
184
+ | **`serve_cloudflare_pages_stateful`** | `directory`, `project_name` |
185
+ | **`serve_cloudflare_worker_stateful`** | `worker_dir` |
186
+
187
+ ```python
188
+ from atomadic import Atomadic, release
189
+ ato = Atomadic(api_key='ato_...')
190
+ release.record_release_template_stateful(ato, template_id=..., kind=..., source_kind=...)
191
+ ```
192
+
193
+ See per-tool docstrings for full arg schemas: `help(release.record_release_template_stateful)`
194
+
195
+ ### Healer [beta]
196
+
197
+ `entitlement: healer` &middot; `from atomadic import healer`
198
+
199
+ > _Diagnose, grade, and plan the repair._
200
+
201
+ Read-only diagnosis: code-health grade + advisory repair plan.
202
+
203
+ | Tool | Required args |
204
+ |---|---|
205
+ | **`assess_artifact_health_pure`** | `source_text` |
206
+ | **`compute_repair_plan_pure`** | `error_message` |
207
+
208
+ ```python
209
+ from atomadic import Atomadic, healer
210
+ ato = Atomadic(api_key='ato_...')
211
+ healer.assess_artifact_health_pure(ato, source_text=...)
212
+ ```
213
+
214
+ See per-tool docstrings for full arg schemas: `help(healer.assess_artifact_health_pure)`
215
+
216
+ ## Two-gate dispatch
217
+
218
+ Every call is filtered then verified:
219
+
220
+ 1. **Gate-1 (entitlement):** `tools/list` shows only the tools your plan unlocks; out-of-plan `tools/call` is refused.
221
+ 2. **Gate-2 (trust, Nexus):** trust phase + severity ceiling + hallucination bound. Governed actions return a signed `attest:<id>` receipt.
222
+
223
+ See [the architecture docs](https://atomadic.tech/docs.html?d=two-gate) for the full model.
224
+
225
+ ## Plans
226
+
227
+ Free / Basic / Dev / Pro / Teams / Enterprise -- per product, or whole-line via
228
+ Murmuration Complete. Subscription is the product; x402 meters only overage + agent-
229
+ to-agent calls. Pricing: https://atomadic.tech/docs.html?d=pricing.
230
+
231
+ ## Determinism
232
+
233
+ Pure-tier tools have no side effects and no hidden state: same inputs, same output,
234
+ same content hash, every time. Re-running a pure tool is a verification.
235
+
236
+ ## Contributing
237
+
238
+ This SDK is **auto-emitted from the live Atomadic MCP registry** -- changes here
239
+ should flow through the engine, not be hand-patched. For issues, requests, or
240
+ feedback: support@atomadic.tech.
241
+
242
+ ## License
243
+
244
+ Apache-2.0 -- see [LICENSE](LICENSE).
@@ -0,0 +1,15 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ atomadic/__init__.py
5
+ atomadic/client.py
6
+ atomadic/fuse.py
7
+ atomadic/healer.py
8
+ atomadic/nexus.py
9
+ atomadic/proving.py
10
+ atomadic/release.py
11
+ atomadic/security.py
12
+ atomadic.egg-info/PKG-INFO
13
+ atomadic.egg-info/SOURCES.txt
14
+ atomadic.egg-info/dependency_links.txt
15
+ atomadic.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ atomadic
@@ -0,0 +1,22 @@
1
+ [build-system]
2
+ requires = ['setuptools>=68']
3
+ build-backend = 'setuptools.build_meta'
4
+
5
+ [project]
6
+ name = 'atomadic'
7
+ version = '0.1.0'
8
+ description = 'Atomadic Python SDK -- one MCP, entitlement-gated tool-sets'
9
+ readme = 'README.md'
10
+ requires-python = '>=3.9'
11
+ license = { text = 'Apache-2.0' }
12
+ authors = [{ name = 'Atomadic', email = 'support@atomadic.tech' }]
13
+ keywords = ['atomadic', 'mcp', 'agents', 'sdk', 'trust', 'verification']
14
+ classifiers = ['License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', 'Topic :: Software Development :: Libraries']
15
+
16
+ [project.urls]
17
+ Homepage = 'https://atomadic.tech'
18
+ Docs = 'https://atomadic.tech/docs.html'
19
+ Issues = 'https://github.com/atomadictech/atomadic-sdk/issues'
20
+
21
+ [tool.setuptools.packages.find]
22
+ include = ['atomadic*']
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+