alter-runtime 0.4.8__tar.gz → 0.4.10__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.
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/LICENSE +1 -1
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/PKG-INFO +11 -13
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/README.md +9 -11
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/__init__.py +1 -1
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/adapters/__init__.py +2 -2
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/adapters/claude_jsonl_watcher.py +2 -2
- alter_runtime-0.4.10/alter_runtime/adapters/loom_verdict_exporter.py +540 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/adapters/worktree_watcher.py +2 -3
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/cli.py +92 -1
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/clients/token_usage_client.py +3 -3
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/config.py +124 -19
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/consent.py +43 -12
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/daemon.py +40 -24
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/http_auth.py +1 -1
- alter_runtime-0.4.10/alter_runtime/messaging.py +147 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/sdk/client.py +1 -1
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/services/systemd/alter-runtime.service.in +6 -9
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/sockets/unix.py +60 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/__init__.py +5 -3
- alter_runtime-0.4.10/alter_runtime/subscribers/doctrine_projection.py +678 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/inbox_writer.py +43 -2
- alter_runtime-0.4.10/alter_runtime/subscribers/loom_verdict_subscriber.py +340 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/session_presence.py +3 -3
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/update_loop.py +112 -14
- alter_runtime-0.4.10/alter_runtime/verified_apply.py +340 -0
- alter_runtime-0.4.10/hatch_build.py +17 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/pyproject.toml +15 -9
- alter_runtime-0.4.8/.gitignore +0 -39
- alter_runtime-0.4.8/alter_runtime/adapters/weave_watcher.py +0 -546
- alter_runtime-0.4.8/alter_runtime/subscribers/weave_intent_writer.py +0 -608
- alter_runtime-0.4.8/alter_runtime/weave/__init__.py +0 -21
- alter_runtime-0.4.8/alter_runtime/weave/resolver.py +0 -544
- alter_runtime-0.4.8/alter_runtime/weave_log.py +0 -437
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/adapters/contract.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/adapters/git_watcher.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/cap_cache.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/clients/__init__.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/floor_loop.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/floor_preflight.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/invocation_signing.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/notifiers/__init__.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/notifiers/desktop.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/sdk/__init__.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/service_install.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/services/__init__.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/services/launchd/com.alter.runtime.plist.in +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/sockets/__init__.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/sockets/dbus.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/active_sessions_cron_emitter.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/active_sessions_do_publisher.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/active_sessions_gc.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/active_sessions_writer.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/adapters_writer.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/agent_frames.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/attunement_refresher.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/bus.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/cache_writer.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/ceremony_echo.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/do_sse.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/ebpf.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/mcp_fallback.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/presence_feed_writer.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/presence_writer.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/session_refresher.py +0 -0
- {alter_runtime-0.4.8 → alter_runtime-0.4.10}/alter_runtime/subscribers/sse.py +0 -0
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
|
177
177
|
|
|
178
|
-
Copyright 2026
|
|
178
|
+
Copyright 2026 Alter Meridian Pty Ltd
|
|
179
179
|
|
|
180
180
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
181
|
you may not use this file except in compliance with the License.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alter-runtime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.10
|
|
4
4
|
Summary: ~Alter Identity Runtime - local daemon for the continuous identity field. Subscribes to per-~handle Cloudflare Durable Objects, exposes Unix socket + D-Bus + CLI surfaces, falls back gracefully to direct MCP polling.
|
|
5
5
|
Project-URL: Homepage, https://truealter.com
|
|
6
6
|
Project-URL: Documentation, https://truealter.com/docs/alter-runtime
|
|
7
7
|
Project-URL: Repository, https://github.com/true-alter/alter-runtime
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/true-alter/alter-runtime/issues
|
|
9
9
|
Author: ~Alter
|
|
10
|
-
Author-email:
|
|
10
|
+
Author-email: Alter Meridian Pty Ltd <hello@truealter.com>
|
|
11
11
|
License: Apache-2.0
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
Keywords: agent,ai-agents,alter,cloudflare,durable-object,identity,llm,mcp,model-context-protocol,psychometric,sovereign-identity,verifiable-credentials,x402
|
|
@@ -75,10 +75,10 @@ Description-Content-Type: text/markdown
|
|
|
75
75
|
|
|
76
76
|
## Alpha release - filesystem key storage
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
**This is an alpha release.** The public API surface (CLI flags,
|
|
79
79
|
Unix-socket JSON schema, D-Bus interface, Python SDK signatures) may change in
|
|
80
|
-
backwards-incompatible ways before the
|
|
81
|
-
downstream tooling
|
|
80
|
+
backwards-incompatible ways before the stable release. Pin exact versions in
|
|
81
|
+
downstream tooling before upgrading.
|
|
82
82
|
|
|
83
83
|
**Private keys are stored on the filesystem, not in an OS keychain.** On first
|
|
84
84
|
`alter-runtime init`, the device Ed25519 keypair is written to
|
|
@@ -88,7 +88,7 @@ owning user and never leaves the device. This behaviour is deliberate for the
|
|
|
88
88
|
alpha: it keeps the daemon self-contained on any POSIX host and avoids a hard
|
|
89
89
|
dependency on distro-specific secret stores during early testing.
|
|
90
90
|
|
|
91
|
-
**OS-native secret storage is deferred to
|
|
91
|
+
**OS-native secret storage is deferred to a future release:** Linux `libsecret` /
|
|
92
92
|
`kwallet`, macOS Keychain, and Windows Credential Manager integration will ship
|
|
93
93
|
behind a `keystore = "native"` config knob. Filesystem storage will remain the
|
|
94
94
|
documented fallback.
|
|
@@ -100,10 +100,9 @@ attestation). The filesystem-stored device key then scopes only to ambient
|
|
|
100
100
|
signal ingestion, not to high-assurance authorisations, which require a fresh
|
|
101
101
|
hardware passkey ceremony per session.
|
|
102
102
|
|
|
103
|
-
**Reporting issues.** Security-relevant reports: please
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
`support@truealter.com`.
|
|
103
|
+
**Reporting issues.** Security-relevant reports: please email
|
|
104
|
+
`security@truealter.com` rather than filing a public issue. Non-security bugs
|
|
105
|
+
and feature requests: email `support@truealter.com`.
|
|
107
106
|
|
|
108
107
|
## Status
|
|
109
108
|
|
|
@@ -161,7 +160,7 @@ alter-runtime stop
|
|
|
161
160
|
`https://api.truealter.com/api/v1/mcp` when the DO is unreachable for more than 3
|
|
162
161
|
seconds. Your surfaces never know which path served them.
|
|
163
162
|
|
|
164
|
-
3. **Exposes three local transports
|
|
163
|
+
3. **Exposes** three local transports:
|
|
165
164
|
- **Unix socket** at `/run/user/$UID/alter.sock` (Linux) or
|
|
166
165
|
`~/Library/Application Support/alter/runtime.sock` (macOS) - line-delimited JSON
|
|
167
166
|
- **D-Bus** interface `org.alter.Identity1` on the session bus (Linux) - used by
|
|
@@ -245,8 +244,7 @@ asyncio.run(main())
|
|
|
245
244
|
- **Arch Linux (AUR)** - `alter-runtime`
|
|
246
245
|
- **Homebrew** - `brew install alter-runtime`
|
|
247
246
|
|
|
248
|
-
Pin an exact version in downstream tooling during the alpha
|
|
249
|
-
CHANGELOG before upgrading.
|
|
247
|
+
Pin an exact version in downstream tooling during the alpha before upgrading.
|
|
250
248
|
|
|
251
249
|
## Related projects
|
|
252
250
|
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
## Alpha release - filesystem key storage
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
**This is an alpha release.** The public API surface (CLI flags,
|
|
11
11
|
Unix-socket JSON schema, D-Bus interface, Python SDK signatures) may change in
|
|
12
|
-
backwards-incompatible ways before the
|
|
13
|
-
downstream tooling
|
|
12
|
+
backwards-incompatible ways before the stable release. Pin exact versions in
|
|
13
|
+
downstream tooling before upgrading.
|
|
14
14
|
|
|
15
15
|
**Private keys are stored on the filesystem, not in an OS keychain.** On first
|
|
16
16
|
`alter-runtime init`, the device Ed25519 keypair is written to
|
|
@@ -20,7 +20,7 @@ owning user and never leaves the device. This behaviour is deliberate for the
|
|
|
20
20
|
alpha: it keeps the daemon self-contained on any POSIX host and avoids a hard
|
|
21
21
|
dependency on distro-specific secret stores during early testing.
|
|
22
22
|
|
|
23
|
-
**OS-native secret storage is deferred to
|
|
23
|
+
**OS-native secret storage is deferred to a future release:** Linux `libsecret` /
|
|
24
24
|
`kwallet`, macOS Keychain, and Windows Credential Manager integration will ship
|
|
25
25
|
behind a `keystore = "native"` config knob. Filesystem storage will remain the
|
|
26
26
|
documented fallback.
|
|
@@ -32,10 +32,9 @@ attestation). The filesystem-stored device key then scopes only to ambient
|
|
|
32
32
|
signal ingestion, not to high-assurance authorisations, which require a fresh
|
|
33
33
|
hardware passkey ceremony per session.
|
|
34
34
|
|
|
35
|
-
**Reporting issues.** Security-relevant reports: please
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
`support@truealter.com`.
|
|
35
|
+
**Reporting issues.** Security-relevant reports: please email
|
|
36
|
+
`security@truealter.com` rather than filing a public issue. Non-security bugs
|
|
37
|
+
and feature requests: email `support@truealter.com`.
|
|
39
38
|
|
|
40
39
|
## Status
|
|
41
40
|
|
|
@@ -93,7 +92,7 @@ alter-runtime stop
|
|
|
93
92
|
`https://api.truealter.com/api/v1/mcp` when the DO is unreachable for more than 3
|
|
94
93
|
seconds. Your surfaces never know which path served them.
|
|
95
94
|
|
|
96
|
-
3. **Exposes three local transports
|
|
95
|
+
3. **Exposes** three local transports:
|
|
97
96
|
- **Unix socket** at `/run/user/$UID/alter.sock` (Linux) or
|
|
98
97
|
`~/Library/Application Support/alter/runtime.sock` (macOS) - line-delimited JSON
|
|
99
98
|
- **D-Bus** interface `org.alter.Identity1` on the session bus (Linux) - used by
|
|
@@ -177,8 +176,7 @@ asyncio.run(main())
|
|
|
177
176
|
- **Arch Linux (AUR)** - `alter-runtime`
|
|
178
177
|
- **Homebrew** - `brew install alter-runtime`
|
|
179
178
|
|
|
180
|
-
Pin an exact version in downstream tooling during the alpha
|
|
181
|
-
CHANGELOG before upgrading.
|
|
179
|
+
Pin an exact version in downstream tooling during the alpha before upgrading.
|
|
182
180
|
|
|
183
181
|
## Related projects
|
|
184
182
|
|
|
@@ -14,12 +14,12 @@ runtime component.
|
|
|
14
14
|
|
|
15
15
|
from alter_runtime.adapters.claude_jsonl_watcher import ClaudeJsonlWatcher
|
|
16
16
|
from alter_runtime.adapters.git_watcher import GitWatcher
|
|
17
|
-
from alter_runtime.adapters.
|
|
17
|
+
from alter_runtime.adapters.loom_verdict_exporter import LoomVerdictExporter
|
|
18
18
|
from alter_runtime.adapters.worktree_watcher import WorktreeWatcher
|
|
19
19
|
|
|
20
20
|
__all__ = [
|
|
21
21
|
"ClaudeJsonlWatcher",
|
|
22
22
|
"GitWatcher",
|
|
23
|
-
"
|
|
23
|
+
"LoomVerdictExporter",
|
|
24
24
|
"WorktreeWatcher",
|
|
25
25
|
]
|
|
@@ -4,7 +4,7 @@ Watches the per-project ``*.jsonl`` transcript files under Claude Code's
|
|
|
4
4
|
home projects directory with ``watchdog``.
|
|
5
5
|
On modification, reads new lines from the persisted byte offset, parses each
|
|
6
6
|
via the privacy-hard-stop ``parse_assistant_line`` function, and POSTs
|
|
7
|
-
batches to the
|
|
7
|
+
batches to the ~alter backend token-usage audit endpoint.
|
|
8
8
|
|
|
9
9
|
Privacy guarantee
|
|
10
10
|
-----------------
|
|
@@ -123,7 +123,7 @@ def parse_assistant_line(record: dict) -> Optional[dict]:
|
|
|
123
123
|
"""Parse one JSONL record and return a token-usage dict, or None.
|
|
124
124
|
|
|
125
125
|
This is the privacy hard-stop between Claude Code's local transcripts
|
|
126
|
-
and
|
|
126
|
+
and ~alter's audit database. It is a strict whitelist: the output dict is
|
|
127
127
|
constructed key-by-key from explicitly named fields. ``record``,
|
|
128
128
|
``message``, and ``usage`` are NEVER spread. No key beyond the whitelist
|
|
129
129
|
can reach the output.
|