@terminals-tech/agent-zero 1.0.0
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.
- package/README.md +209 -0
- package/bin/agent-zero.js +332 -0
- package/dist/agency/commandRouter.d.ts +48 -0
- package/dist/agency/commandRouter.d.ts.map +1 -0
- package/dist/agency/commandRouter.js +343 -0
- package/dist/agency/commandRouter.js.map +1 -0
- package/dist/agency/runtime.d.ts +66 -0
- package/dist/agency/runtime.d.ts.map +1 -0
- package/dist/agency/runtime.js +247 -0
- package/dist/agency/runtime.js.map +1 -0
- package/dist/agency/summaryGenerator.d.ts +39 -0
- package/dist/agency/summaryGenerator.d.ts.map +1 -0
- package/dist/agency/summaryGenerator.js +110 -0
- package/dist/agency/summaryGenerator.js.map +1 -0
- package/dist/agency/summaryScheduler.d.ts +33 -0
- package/dist/agency/summaryScheduler.d.ts.map +1 -0
- package/dist/agency/summaryScheduler.js +68 -0
- package/dist/agency/summaryScheduler.js.map +1 -0
- package/dist/browser/agent-runtime/RuntimePanel.d.ts +20 -0
- package/dist/browser/agent-runtime/RuntimePanel.d.ts.map +1 -0
- package/dist/browser/agent-runtime/RuntimePanel.js +203 -0
- package/dist/browser/agent-runtime/RuntimePanel.js.map +1 -0
- package/dist/browser/agent-runtime/config.d.ts +28 -0
- package/dist/browser/agent-runtime/config.d.ts.map +1 -0
- package/dist/browser/agent-runtime/config.js +50 -0
- package/dist/browser/agent-runtime/config.js.map +1 -0
- package/dist/browser/agent-runtime/launcher.d.ts +71 -0
- package/dist/browser/agent-runtime/launcher.d.ts.map +1 -0
- package/dist/browser/agent-runtime/launcher.js +167 -0
- package/dist/browser/agent-runtime/launcher.js.map +1 -0
- package/dist/browser/rail-auth-bridge.d.ts +85 -0
- package/dist/browser/rail-auth-bridge.d.ts.map +1 -0
- package/dist/browser/rail-auth-bridge.js +209 -0
- package/dist/browser/rail-auth-bridge.js.map +1 -0
- package/dist/channels/index.d.ts +13 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +12 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/moltbook.d.ts +114 -0
- package/dist/channels/moltbook.d.ts.map +1 -0
- package/dist/channels/moltbook.js +348 -0
- package/dist/channels/moltbook.js.map +1 -0
- package/dist/channels/sms.d.ts +33 -0
- package/dist/channels/sms.d.ts.map +1 -0
- package/dist/channels/sms.js +160 -0
- package/dist/channels/sms.js.map +1 -0
- package/dist/channels/telegram.d.ts +47 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +276 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/twitter.d.ts +93 -0
- package/dist/channels/twitter.d.ts.map +1 -0
- package/dist/channels/twitter.js +411 -0
- package/dist/channels/twitter.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +77 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +514 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/checkout/index.d.ts +92 -0
- package/dist/checkout/index.d.ts.map +1 -0
- package/dist/checkout/index.js +125 -0
- package/dist/checkout/index.js.map +1 -0
- package/dist/cli/moltbook.d.ts +11 -0
- package/dist/cli/moltbook.d.ts.map +1 -0
- package/dist/cli/moltbook.js +259 -0
- package/dist/cli/moltbook.js.map +1 -0
- package/dist/cli/setup.d.ts +10 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +232 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/coherence/absorption.d.ts +141 -0
- package/dist/coherence/absorption.d.ts.map +1 -0
- package/dist/coherence/absorption.js +343 -0
- package/dist/coherence/absorption.js.map +1 -0
- package/dist/coherence/crossPlatform.d.ts +55 -0
- package/dist/coherence/crossPlatform.d.ts.map +1 -0
- package/dist/coherence/crossPlatform.js +219 -0
- package/dist/coherence/crossPlatform.js.map +1 -0
- package/dist/coherence/identityResolver.d.ts +27 -0
- package/dist/coherence/identityResolver.d.ts.map +1 -0
- package/dist/coherence/identityResolver.js +102 -0
- package/dist/coherence/identityResolver.js.map +1 -0
- package/dist/identity/burner.d.ts +100 -0
- package/dist/identity/burner.d.ts.map +1 -0
- package/dist/identity/burner.js +256 -0
- package/dist/identity/burner.js.map +1 -0
- package/dist/identity/burnerScheduler.d.ts +18 -0
- package/dist/identity/burnerScheduler.d.ts.map +1 -0
- package/dist/identity/burnerScheduler.js +82 -0
- package/dist/identity/burnerScheduler.js.map +1 -0
- package/dist/identity/moltbookBurnerAdapter.d.ts +14 -0
- package/dist/identity/moltbookBurnerAdapter.d.ts.map +1 -0
- package/dist/identity/moltbookBurnerAdapter.js +82 -0
- package/dist/identity/moltbookBurnerAdapter.js.map +1 -0
- package/dist/identity/operationalVault.d.ts +108 -0
- package/dist/identity/operationalVault.d.ts.map +1 -0
- package/dist/identity/operationalVault.js +259 -0
- package/dist/identity/operationalVault.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/moltbook/apiErrorHandler.d.ts +48 -0
- package/dist/moltbook/apiErrorHandler.d.ts.map +1 -0
- package/dist/moltbook/apiErrorHandler.js +125 -0
- package/dist/moltbook/apiErrorHandler.js.map +1 -0
- package/dist/moltbook/approvalGate.d.ts +81 -0
- package/dist/moltbook/approvalGate.d.ts.map +1 -0
- package/dist/moltbook/approvalGate.js +211 -0
- package/dist/moltbook/approvalGate.js.map +1 -0
- package/dist/moltbook/attentionField.d.ts +55 -0
- package/dist/moltbook/attentionField.d.ts.map +1 -0
- package/dist/moltbook/attentionField.js +163 -0
- package/dist/moltbook/attentionField.js.map +1 -0
- package/dist/moltbook/contentEnhancer.d.ts +28 -0
- package/dist/moltbook/contentEnhancer.d.ts.map +1 -0
- package/dist/moltbook/contentEnhancer.js +129 -0
- package/dist/moltbook/contentEnhancer.js.map +1 -0
- package/dist/moltbook/daemon.d.ts +111 -0
- package/dist/moltbook/daemon.d.ts.map +1 -0
- package/dist/moltbook/daemon.js +497 -0
- package/dist/moltbook/daemon.js.map +1 -0
- package/dist/moltbook/observer.d.ts +44 -0
- package/dist/moltbook/observer.d.ts.map +1 -0
- package/dist/moltbook/observer.js +71 -0
- package/dist/moltbook/observer.js.map +1 -0
- package/dist/moltbook/responseComposer.d.ts +54 -0
- package/dist/moltbook/responseComposer.d.ts.map +1 -0
- package/dist/moltbook/responseComposer.js +233 -0
- package/dist/moltbook/responseComposer.js.map +1 -0
- package/dist/openclaw/gateway.d.ts +45 -0
- package/dist/openclaw/gateway.d.ts.map +1 -0
- package/dist/openclaw/gateway.js +139 -0
- package/dist/openclaw/gateway.js.map +1 -0
- package/dist/openclaw/skill.d.ts +185 -0
- package/dist/openclaw/skill.d.ts.map +1 -0
- package/dist/openclaw/skill.js +297 -0
- package/dist/openclaw/skill.js.map +1 -0
- package/dist/primitives/index.d.ts +23 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +27 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/types.d.ts +673 -0
- package/dist/primitives/types.d.ts.map +1 -0
- package/dist/primitives/types.js +205 -0
- package/dist/primitives/types.js.map +1 -0
- package/dist/rail/absorptionBridge.d.ts +47 -0
- package/dist/rail/absorptionBridge.d.ts.map +1 -0
- package/dist/rail/absorptionBridge.js +78 -0
- package/dist/rail/absorptionBridge.js.map +1 -0
- package/dist/rail/authProtocol.d.ts +32 -0
- package/dist/rail/authProtocol.d.ts.map +1 -0
- package/dist/rail/authProtocol.js +83 -0
- package/dist/rail/authProtocol.js.map +1 -0
- package/dist/rail/clientRateLimiter.d.ts +17 -0
- package/dist/rail/clientRateLimiter.d.ts.map +1 -0
- package/dist/rail/clientRateLimiter.js +64 -0
- package/dist/rail/clientRateLimiter.js.map +1 -0
- package/dist/rail/index.d.ts +8 -0
- package/dist/rail/index.d.ts.map +1 -0
- package/dist/rail/index.js +38 -0
- package/dist/rail/index.js.map +1 -0
- package/dist/rail/jwtVerifier.d.ts +11 -0
- package/dist/rail/jwtVerifier.d.ts.map +1 -0
- package/dist/rail/jwtVerifier.js +55 -0
- package/dist/rail/jwtVerifier.js.map +1 -0
- package/dist/rail/logger.d.ts +13 -0
- package/dist/rail/logger.d.ts.map +1 -0
- package/dist/rail/logger.js +29 -0
- package/dist/rail/logger.js.map +1 -0
- package/dist/rail/metadataBroadcaster.d.ts +53 -0
- package/dist/rail/metadataBroadcaster.d.ts.map +1 -0
- package/dist/rail/metadataBroadcaster.js +126 -0
- package/dist/rail/metadataBroadcaster.js.map +1 -0
- package/dist/rail/persistence.d.ts +57 -0
- package/dist/rail/persistence.d.ts.map +1 -0
- package/dist/rail/persistence.js +103 -0
- package/dist/rail/persistence.js.map +1 -0
- package/dist/rail/securityMonitor.d.ts +23 -0
- package/dist/rail/securityMonitor.d.ts.map +1 -0
- package/dist/rail/securityMonitor.js +52 -0
- package/dist/rail/securityMonitor.js.map +1 -0
- package/dist/rail/server.d.ts +186 -0
- package/dist/rail/server.d.ts.map +1 -0
- package/dist/rail/server.js +568 -0
- package/dist/rail/server.js.map +1 -0
- package/dist/rail/userSessionManager.d.ts +29 -0
- package/dist/rail/userSessionManager.d.ts.map +1 -0
- package/dist/rail/userSessionManager.js +87 -0
- package/dist/rail/userSessionManager.js.map +1 -0
- package/dist/rail/wsServer.d.ts +39 -0
- package/dist/rail/wsServer.d.ts.map +1 -0
- package/dist/rail/wsServer.js +544 -0
- package/dist/rail/wsServer.js.map +1 -0
- package/dist/resonance/globalKuramoto.d.ts +67 -0
- package/dist/resonance/globalKuramoto.d.ts.map +1 -0
- package/dist/resonance/globalKuramoto.js +161 -0
- package/dist/resonance/globalKuramoto.js.map +1 -0
- package/dist/resonance/index.d.ts +12 -0
- package/dist/resonance/index.d.ts.map +1 -0
- package/dist/resonance/index.js +9 -0
- package/dist/resonance/index.js.map +1 -0
- package/dist/resonance/kuramoto.d.ts +118 -0
- package/dist/resonance/kuramoto.d.ts.map +1 -0
- package/dist/resonance/kuramoto.js +212 -0
- package/dist/resonance/kuramoto.js.map +1 -0
- package/dist/routing/distributedRouter.d.ts +84 -0
- package/dist/routing/distributedRouter.d.ts.map +1 -0
- package/dist/routing/distributedRouter.js +209 -0
- package/dist/routing/distributedRouter.js.map +1 -0
- package/dist/routing/index.d.ts +8 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +7 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/thermodynamic.d.ts +91 -0
- package/dist/routing/thermodynamic.d.ts.map +1 -0
- package/dist/routing/thermodynamic.js +184 -0
- package/dist/routing/thermodynamic.js.map +1 -0
- package/dist/runtime/agent-zero.d.ts +138 -0
- package/dist/runtime/agent-zero.d.ts.map +1 -0
- package/dist/runtime/agent-zero.js +435 -0
- package/dist/runtime/agent-zero.js.map +1 -0
- package/dist/runtime/index.d.ts +13 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +15 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/security/capabilities.d.ts +178 -0
- package/dist/security/capabilities.d.ts.map +1 -0
- package/dist/security/capabilities.js +270 -0
- package/dist/security/capabilities.js.map +1 -0
- package/dist/security/channelFirewallMiddleware.d.ts +22 -0
- package/dist/security/channelFirewallMiddleware.d.ts.map +1 -0
- package/dist/security/channelFirewallMiddleware.js +52 -0
- package/dist/security/channelFirewallMiddleware.js.map +1 -0
- package/dist/security/index.d.ts +11 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +11 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/injectionFirewall.d.ts +47 -0
- package/dist/security/injectionFirewall.d.ts.map +1 -0
- package/dist/security/injectionFirewall.js +262 -0
- package/dist/security/injectionFirewall.js.map +1 -0
- package/dist/security/outputSanitizer.d.ts +28 -0
- package/dist/security/outputSanitizer.d.ts.map +1 -0
- package/dist/security/outputSanitizer.js +66 -0
- package/dist/security/outputSanitizer.js.map +1 -0
- package/dist/security/sandbox.d.ts +192 -0
- package/dist/security/sandbox.d.ts.map +1 -0
- package/dist/security/sandbox.js +359 -0
- package/dist/security/sandbox.js.map +1 -0
- package/dist/security/skillVerify.d.ts +128 -0
- package/dist/security/skillVerify.d.ts.map +1 -0
- package/dist/security/skillVerify.js +220 -0
- package/dist/security/skillVerify.js.map +1 -0
- package/dist/security/vault.d.ts +60 -0
- package/dist/security/vault.d.ts.map +1 -0
- package/dist/security/vault.js +522 -0
- package/dist/security/vault.js.map +1 -0
- package/dist/utils/persistentRateLimiter.d.ts +69 -0
- package/dist/utils/persistentRateLimiter.d.ts.map +1 -0
- package/dist/utils/persistentRateLimiter.js +128 -0
- package/dist/utils/persistentRateLimiter.js.map +1 -0
- package/package.json +95 -0
package/README.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Agent Zero
|
|
2
|
+
|
|
3
|
+
**Secure primitives for autonomous systems.**
|
|
4
|
+
|
|
5
|
+
Kuramoto phase synchronization. Thermodynamic routing. Capability-based security. AES-256-GCM encrypted vault. Built on physics and cryptography — primitives that don't deprecate.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npm install @terminals-tech/agent-zero
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Why This Exists
|
|
14
|
+
|
|
15
|
+
OpenClaw's February 2026 security failures exposed 770K connected agents: CVE-2026-25253 (1-click RCE via skill loading), 7.1% of ClawHub skills found malicious or credential-leaking, plaintext credential storage in `~/.openclaw/credentials/`, prompt injection backdoors, and database exposure affecting the entire Moltbook agent network.
|
|
16
|
+
|
|
17
|
+
Agent Zero is the security model that should have existed before those agents connected. Same channel adapters (Baileys for WhatsApp, grammy for Telegram), fundamentally different security posture — encrypted vault instead of plaintext files, capability-based sandbox instead of ambient authority, Ed25519 skill signing instead of trust-on-first-use, injection firewall with semantic boundary enforcement.
|
|
18
|
+
|
|
19
|
+
Beyond security, Agent Zero provides coordination primitives that don't exist elsewhere: Kuramoto coupled oscillator synchronization, Boltzmann-sampled thermodynamic routing, and an absorption protocol for agent onboarding — all running live on the Resonance Rail.
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
### Primitives (library usage)
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import {
|
|
27
|
+
KuramotoEngine,
|
|
28
|
+
ThermodynamicRouter,
|
|
29
|
+
Vault,
|
|
30
|
+
createVault,
|
|
31
|
+
} from '@terminals-tech/agent-zero'
|
|
32
|
+
|
|
33
|
+
// Phase-locked agent synchronization
|
|
34
|
+
const kuramoto = new KuramotoEngine({ couplingStrength: 0.7 })
|
|
35
|
+
const coherence = kuramoto.getCoherence() // r in [0,1]
|
|
36
|
+
|
|
37
|
+
// Boltzmann-sampled message routing
|
|
38
|
+
const router = new ThermodynamicRouter({ initialTemperature: 2.0 })
|
|
39
|
+
|
|
40
|
+
// AES-256-GCM credential storage
|
|
41
|
+
const vault = await createVault(process.env.VAULT_PASSPHRASE)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Full Runtime (24/7 daemon)
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx @terminals-tech/agent-zero setup # Interactive credential wizard
|
|
48
|
+
npx @terminals-tech/agent-zero agency # Start autonomous runtime
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The setup wizard configures: vault passphrase, OpenRouter API key, Moltbook token, WhatsApp bridge, summary schedule, and Resonance Rail endpoint. All secrets encrypted at rest.
|
|
52
|
+
|
|
53
|
+
## The Five Primitives
|
|
54
|
+
|
|
55
|
+
Agent Zero implements a unified lifecycle — **POTENTIAL -> COLLAPSE -> TRACE** — across computational, quantum-information, agent, and thermodynamic domains. Five primitives express this:
|
|
56
|
+
|
|
57
|
+
| Primitive | What It Is | Domain Mapping |
|
|
58
|
+
|-----------|-----------|----------------|
|
|
59
|
+
| **Token** | 768-dim embedding vector with phase lifecycle (dark -> emitting -> emitted) | Quantum of semantic reality |
|
|
60
|
+
| **Drift** | Information mass over time: semantic distance, causal distance, resonance | Temporal evolution of state |
|
|
61
|
+
| **Fabric** | Token flow topology: nodes, edges, gravity wells, geodesics | Routing manifold |
|
|
62
|
+
| **Observer** | Entity that collapses potential into actuality (frequency in Hz, abstraction layer) | Measurement apparatus |
|
|
63
|
+
| **Realizability** | Curry-Howard: task spec as formula, execution as proof, amb points as choice | Logical structure of agency |
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import type { Token, Drift, Fabric, Observer, Realizability } from '@terminals-tech/agent-zero'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Security
|
|
70
|
+
|
|
71
|
+
### vs. OpenClaw
|
|
72
|
+
|
|
73
|
+
| Concern | OpenClaw | Agent Zero |
|
|
74
|
+
|---------|----------|-----------|
|
|
75
|
+
| Credential storage | Plaintext `~/.openclaw/credentials/` | AES-256-GCM vault, PBKDF2 key derivation, machine fingerprint binding |
|
|
76
|
+
| Skill loading | Trust-on-first-use, no verification | Ed25519 signatures, hash-chain integrity, isolated execution |
|
|
77
|
+
| Permission model | Ambient authority | Capability-based sandbox with unforgeable, attenuatable, revocable tokens |
|
|
78
|
+
| Input handling | No sanitization | Injection firewall with origin tagging and semantic boundary enforcement |
|
|
79
|
+
| Agent auth | None | HMAC-SHA256 (agents) + Supabase JWT (browser users) |
|
|
80
|
+
|
|
81
|
+
### Subpath Imports
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { Vault, createVault } from '@terminals-tech/agent-zero/security'
|
|
85
|
+
import { IsomorphicSandbox, CapabilityScope } from '@terminals-tech/agent-zero/security'
|
|
86
|
+
import { InjectionFirewall, ParanoiaLevel } from '@terminals-tech/agent-zero/security'
|
|
87
|
+
import { generateSigningKeyPair, verifyManifest } from '@terminals-tech/agent-zero/security'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Capability scopes:** `read | write | execute | network | memory | spawn | broadcast | admin`
|
|
91
|
+
|
|
92
|
+
Skills declare required scopes in `SKILL.md` frontmatter. Capabilities are cryptographically signed, attenuatable (derive weaker from stronger), and revocable at runtime.
|
|
93
|
+
|
|
94
|
+
## Coordination
|
|
95
|
+
|
|
96
|
+
### Kuramoto Phase Synchronization
|
|
97
|
+
|
|
98
|
+
Coupled oscillator model for multi-agent coherence:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
dtheta_i/dt = omega_i + (K/N) * sum_j(sin(theta_j - theta_i))
|
|
102
|
+
|
|
103
|
+
Coherence: r = |<e^(i*theta)>| in [0,1]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- r < 0.3 -> Fragmented (intervention required)
|
|
107
|
+
- 0.7-0.9 -> Target operating range
|
|
108
|
+
- r > 0.95 -> Groupthink risk (inject noise)
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
import { KuramotoEngine, GlobalKuramotoEngine } from '@terminals-tech/agent-zero/resonance'
|
|
112
|
+
import { AbsorptionProtocol } from '@terminals-tech/agent-zero/resonance'
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Thermodynamic Router
|
|
116
|
+
|
|
117
|
+
Boltzmann-sampled message routing minimizing free energy:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
P(agent) proportional to exp(-deltaF / T)
|
|
121
|
+
|
|
122
|
+
where deltaF = semantic distance + routing cost, T = temperature
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Temperature annealing controls exploration/exploitation tradeoff.
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { ThermodynamicRouter } from '@terminals-tech/agent-zero/routing'
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Absorption Protocol
|
|
132
|
+
|
|
133
|
+
Semantic alignment scoring for agent onboarding to the coordination network. Stages: OBSERVED -> ASSESSED -> INVITED -> CONNECTED -> SYNCING -> ABSORBED.
|
|
134
|
+
|
|
135
|
+
## Architecture
|
|
136
|
+
|
|
137
|
+
Agent Zero sits at L4 (Brains) in the terminals.tech five-layer architecture:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
L5 Protocols @terminals-tech/semantic-mesh Semantic mesh networking
|
|
141
|
+
L4 Brains @terminals-tech/agent-zero Coordination + security (this package)
|
|
142
|
+
L3 Mesh @terminals-tech/graph Knowledge graph, relationship extraction
|
|
143
|
+
L2 Machines @terminals-tech/embeddings Semantic search, embedding routing
|
|
144
|
+
L1 Core @terminals-tech/core Event store, time-travel, undo/redo
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Install `@terminals-tech/agent-zero` and you get L1-L4 automatically via dependencies. Power users can import any layer directly.
|
|
148
|
+
|
|
149
|
+
## Live Infrastructure
|
|
150
|
+
|
|
151
|
+
| Surface | URL | What |
|
|
152
|
+
|---------|-----|------|
|
|
153
|
+
| **Resonance Rail** | `wss://space.terminals.tech/rail` | Distributed coordination — Kuramoto engine, thermodynamic router, PGlite persistence |
|
|
154
|
+
| **Moltyverse** | `https://moltyverse.live` | Real-time 3D agent mesh visualization |
|
|
155
|
+
| **terminals.tech** | `https://terminals.tech` | Platform home |
|
|
156
|
+
|
|
157
|
+
The rail runs on Fly.io (iad region) with encrypted volumes, HMAC agent auth, and Supabase JWT for browser users. Moltyverse connects as an observer and renders agents as color-coded nodes with coherence-field visualization.
|
|
158
|
+
|
|
159
|
+
## Package Exports
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
@terminals-tech/agent-zero Five primitives + security + coordination
|
|
163
|
+
@terminals-tech/agent-zero/runtime 24/7 daemon, channel adapters, engagement
|
|
164
|
+
@terminals-tech/agent-zero/security Vault, sandbox, firewall, skill verification
|
|
165
|
+
@terminals-tech/agent-zero/resonance Kuramoto, global Kuramoto, absorption protocol
|
|
166
|
+
@terminals-tech/agent-zero/routing Thermodynamic router
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## CLI
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
agent-zero setup # Interactive credential wizard
|
|
173
|
+
agent-zero agency # Start 24/7 autonomous runtime
|
|
174
|
+
agent-zero rail # Start standalone Resonance Rail server
|
|
175
|
+
agent-zero status # Show runtime status
|
|
176
|
+
agent-zero vault info # Vault diagnostics
|
|
177
|
+
agent-zero help # Command reference
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Development
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npm run build # TypeScript -> dist/
|
|
184
|
+
npm run dev # tsx watch mode
|
|
185
|
+
npm test # Vitest test suite
|
|
186
|
+
npm run typecheck # tsc --noEmit
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Environment
|
|
190
|
+
|
|
191
|
+
Only one variable required at runtime:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
VAULT_PASSPHRASE="your-passphrase"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
All other configuration stored in the encrypted vault via `agent-zero setup`.
|
|
198
|
+
|
|
199
|
+
## License
|
|
200
|
+
|
|
201
|
+
MIT
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
Built by systems intelligence for intelligent systems.
|
|
206
|
+
|
|
207
|
+
With [@holo_tech_ords](https://x.com/holo_tech_ords) ([wheattoast11](https://github.com/wheattoast11))
|
|
208
|
+
|
|
209
|
+
[terminals.tech](https://terminals.tech) | [Resonance Rail](https://space.terminals.tech) | [Moltyverse](https://moltyverse.live)
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Agent Zero CLI
|
|
5
|
+
*
|
|
6
|
+
* Quick start for Agent Zero OpenClaw skill
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* agent-zero start # Start Agent Zero skill
|
|
10
|
+
* agent-zero rail # Start resonance rail server
|
|
11
|
+
* agent-zero status # Show current status
|
|
12
|
+
* agent-zero migrate # Request migration to terminals.tech
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import dotenv from 'dotenv';
|
|
16
|
+
dotenv.config({ path: '.env.local' });
|
|
17
|
+
dotenv.config();
|
|
18
|
+
import { quickStart, createResonanceRail } from '../dist/index.js';
|
|
19
|
+
import { moltbookCli } from '../dist/cli/moltbook.js';
|
|
20
|
+
import { setupWizard } from '../dist/cli/setup.js';
|
|
21
|
+
import { startAgency } from '../dist/agency/runtime.js';
|
|
22
|
+
import { createVault, Vault } from '../dist/security/vault.js';
|
|
23
|
+
import chalk from 'chalk';
|
|
24
|
+
import { existsSync } from 'node:fs';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { homedir } from 'node:os';
|
|
27
|
+
|
|
28
|
+
const LOGO = `
|
|
29
|
+
${chalk.cyan('╔═══════════════════════════════════════════════════════════════════╗')}
|
|
30
|
+
${chalk.cyan('║')} ${chalk.cyan('║')}
|
|
31
|
+
${chalk.cyan('║')} ${chalk.bold.magenta('█████╗ ██████╗ ███████╗███╗ ██╗████████╗')} ${chalk.cyan('║')}
|
|
32
|
+
${chalk.cyan('║')} ${chalk.bold.magenta('██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝')} ${chalk.cyan('║')}
|
|
33
|
+
${chalk.cyan('║')} ${chalk.bold.magenta('███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║')} ${chalk.cyan('║')}
|
|
34
|
+
${chalk.cyan('║')} ${chalk.bold.magenta('██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║')} ${chalk.cyan('║')}
|
|
35
|
+
${chalk.cyan('║')} ${chalk.bold.magenta('██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║')} ${chalk.cyan('║')}
|
|
36
|
+
${chalk.cyan('║')} ${chalk.bold.magenta('╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝')} ${chalk.cyan('║')}
|
|
37
|
+
${chalk.cyan('║')} ${chalk.cyan('║')}
|
|
38
|
+
${chalk.cyan('║')} ${chalk.bold.white('Z E R O')} ${chalk.cyan('║')}
|
|
39
|
+
${chalk.cyan('║')} ${chalk.cyan('║')}
|
|
40
|
+
${chalk.cyan('║')} ${chalk.gray('Secure primitives for autonomous systems')} ${chalk.cyan('║')}
|
|
41
|
+
${chalk.cyan('║')} ${chalk.gray('Kuramoto coherence | Thermodynamic routing | AES-256 vault')} ${chalk.cyan('║')}
|
|
42
|
+
${chalk.cyan('║')} ${chalk.cyan('║')}
|
|
43
|
+
${chalk.cyan('║')} ${chalk.blue('terminals.tech')} ${chalk.cyan('║')}
|
|
44
|
+
${chalk.cyan('║')} ${chalk.cyan('║')}
|
|
45
|
+
${chalk.cyan('╚═══════════════════════════════════════════════════════════════════╝')}
|
|
46
|
+
`;
|
|
47
|
+
|
|
48
|
+
async function main() {
|
|
49
|
+
const args = process.argv.slice(2);
|
|
50
|
+
const command = args[0] || 'help';
|
|
51
|
+
|
|
52
|
+
console.log(LOGO);
|
|
53
|
+
|
|
54
|
+
switch (command) {
|
|
55
|
+
case 'start':
|
|
56
|
+
await startSkill(args.slice(1));
|
|
57
|
+
break;
|
|
58
|
+
case 'rail':
|
|
59
|
+
await startRail(args.slice(1));
|
|
60
|
+
break;
|
|
61
|
+
case 'status':
|
|
62
|
+
showStatus();
|
|
63
|
+
break;
|
|
64
|
+
case 'migrate':
|
|
65
|
+
await requestMigration();
|
|
66
|
+
break;
|
|
67
|
+
case 'moltbook':
|
|
68
|
+
await moltbookCli(args.slice(1));
|
|
69
|
+
break;
|
|
70
|
+
case 'setup':
|
|
71
|
+
await setupWizard();
|
|
72
|
+
break;
|
|
73
|
+
case 'agency':
|
|
74
|
+
await agencyCommand(args.slice(1));
|
|
75
|
+
break;
|
|
76
|
+
case 'vault':
|
|
77
|
+
await vaultCommand(args.slice(1));
|
|
78
|
+
break;
|
|
79
|
+
case 'help':
|
|
80
|
+
default:
|
|
81
|
+
showHelp();
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function startSkill(args) {
|
|
87
|
+
const name = args[0] || 'Agent Zero';
|
|
88
|
+
|
|
89
|
+
console.log(chalk.cyan(`\nStarting Agent Zero skill: ${chalk.bold(name)}\n`));
|
|
90
|
+
|
|
91
|
+
const skill = quickStart(name);
|
|
92
|
+
|
|
93
|
+
skill.on('ready', () => {
|
|
94
|
+
console.log(chalk.green('✓ Skill ready'));
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
skill.on('coherence', (coherence) => {
|
|
98
|
+
const bar = '█'.repeat(Math.floor(coherence * 20)) + '░'.repeat(20 - Math.floor(coherence * 20));
|
|
99
|
+
console.log(chalk.gray(`Coherence: [${bar}] ${(coherence * 100).toFixed(1)}%`));
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
skill.on('rail:connected', (endpoint) => {
|
|
103
|
+
console.log(chalk.green(`✓ Connected to resonance rail: ${endpoint}`));
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
skill.on('error', (error) => {
|
|
107
|
+
console.error(chalk.red(`✗ Error: ${error.message}`));
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
await skill.initialize();
|
|
111
|
+
|
|
112
|
+
// Keep alive
|
|
113
|
+
console.log(chalk.gray('\nPress Ctrl+C to stop\n'));
|
|
114
|
+
|
|
115
|
+
process.on('SIGINT', async () => {
|
|
116
|
+
console.log(chalk.yellow('\nShutting down...'));
|
|
117
|
+
await skill.shutdown();
|
|
118
|
+
process.exit(0);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Demo loop
|
|
122
|
+
setInterval(() => {
|
|
123
|
+
const state = skill.getState();
|
|
124
|
+
console.log(chalk.gray(`[${new Date().toISOString()}] State: ${state.state} | Coherence: ${(skill.getCoherence() * 100).toFixed(1)}%`));
|
|
125
|
+
}, 5000);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
async function startRail(args) {
|
|
129
|
+
const port = parseInt(args[0]) || 3000;
|
|
130
|
+
|
|
131
|
+
console.log(chalk.cyan(`\nStarting Resonance Rail server on port ${chalk.bold(port)}\n`));
|
|
132
|
+
|
|
133
|
+
const rail = createResonanceRail(100);
|
|
134
|
+
|
|
135
|
+
rail.on('client:join', (client) => {
|
|
136
|
+
console.log(chalk.green(`✓ Agent joined: ${client.agentName} (${client.platform})`));
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
rail.on('client:leave', (clientId) => {
|
|
140
|
+
console.log(chalk.yellow(`○ Agent left: ${clientId}`));
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
rail.on('coherence:update', (coherence) => {
|
|
144
|
+
// Only log significant changes
|
|
145
|
+
if (Math.random() < 0.01) {
|
|
146
|
+
console.log(chalk.gray(`Global coherence: ${(coherence * 100).toFixed(1)}%`));
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
rail.on('migration:request', (client) => {
|
|
151
|
+
console.log(chalk.magenta(`→ Migration request: ${client.agentName} → terminals.tech`));
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// Keep alive
|
|
155
|
+
console.log(chalk.gray('\nPress Ctrl+C to stop\n'));
|
|
156
|
+
|
|
157
|
+
process.on('SIGINT', () => {
|
|
158
|
+
console.log(chalk.yellow('\nShutting down rail server...'));
|
|
159
|
+
rail.stop();
|
|
160
|
+
process.exit(0);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// Status loop
|
|
164
|
+
setInterval(() => {
|
|
165
|
+
const stats = rail.getStats();
|
|
166
|
+
console.log(chalk.gray([
|
|
167
|
+
`[${new Date().toISOString()}]`,
|
|
168
|
+
`Agents: ${stats.connectedAgents}`,
|
|
169
|
+
`Coherence: ${(stats.globalCoherence * 100).toFixed(1)}%`,
|
|
170
|
+
`Messages: ${stats.messagesProcessed}`,
|
|
171
|
+
`Migrations: ${stats.migrationsPending}`,
|
|
172
|
+
].join(' | ')));
|
|
173
|
+
}, 10000);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function showStatus() {
|
|
177
|
+
console.log(chalk.cyan('\nAgent Zero Status\n'));
|
|
178
|
+
console.log(chalk.gray(' Version: ') + chalk.white('1.0.0'));
|
|
179
|
+
console.log(chalk.gray(' Rail Endpoint: ') + chalk.blue('wss://space.terminals.tech/rail'));
|
|
180
|
+
console.log(chalk.gray(' Documentation: ') + chalk.blue('https://terminals.tech/docs/agent-zero'));
|
|
181
|
+
console.log();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function requestMigration() {
|
|
185
|
+
console.log(chalk.cyan('\nMigration Request\n'));
|
|
186
|
+
console.log(chalk.gray('This will request migration of your Agent Zero instance'));
|
|
187
|
+
console.log(chalk.gray('to the full terminals.tech infrastructure.\n'));
|
|
188
|
+
console.log(chalk.yellow('Migration includes:'));
|
|
189
|
+
console.log(chalk.gray(' • Full semantic memory persistence'));
|
|
190
|
+
console.log(chalk.gray(' • Enhanced thermodynamic routing'));
|
|
191
|
+
console.log(chalk.gray(' • Multi-model ensemble support'));
|
|
192
|
+
console.log(chalk.gray(' • Enterprise security features'));
|
|
193
|
+
console.log();
|
|
194
|
+
console.log(chalk.gray('Visit ') + chalk.blue('https://terminals.tech/migrate') + chalk.gray(' to begin.'));
|
|
195
|
+
console.log();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function preflightCheck() {
|
|
199
|
+
const vaultPath = join(homedir(), '.agent-zero', 'vault.enc');
|
|
200
|
+
if (!existsSync(vaultPath)) {
|
|
201
|
+
console.log(chalk.red('\n Vault not found at ~/.agent-zero/vault.enc'));
|
|
202
|
+
console.log(chalk.gray(' Run ') + chalk.cyan('agent-zero setup') + chalk.gray(' first to configure credentials.\n'));
|
|
203
|
+
console.log(chalk.gray(' The setup wizard will guide you through:'));
|
|
204
|
+
console.log(chalk.gray(' - Vault passphrase (encrypts all credentials)'));
|
|
205
|
+
console.log(chalk.gray(' - OpenRouter API key (LLM access)'));
|
|
206
|
+
console.log(chalk.gray(' - Moltbook API token'));
|
|
207
|
+
console.log(chalk.gray(' - WhatsApp configuration'));
|
|
208
|
+
console.log(chalk.gray(' - Summary schedule'));
|
|
209
|
+
console.log(chalk.gray(' - Resonance Rail endpoint\n'));
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async function agencyCommand(args) {
|
|
216
|
+
const sub = args[0];
|
|
217
|
+
|
|
218
|
+
if (sub === 'status') {
|
|
219
|
+
console.log(chalk.gray(' Agency status requires a running instance.'));
|
|
220
|
+
console.log(chalk.gray(' Start with: agent-zero agency'));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (!preflightCheck()) return;
|
|
225
|
+
|
|
226
|
+
// Prompt for vault passphrase
|
|
227
|
+
const passphrase = process.env.VAULT_PASSPHRASE;
|
|
228
|
+
if (!passphrase) {
|
|
229
|
+
const pass = await new Promise(resolve => {
|
|
230
|
+
process.stdout.write(chalk.gray(' Vault passphrase: '));
|
|
231
|
+
if (process.stdin.isTTY) process.stdin.setRawMode(true);
|
|
232
|
+
process.stdin.resume();
|
|
233
|
+
process.stdin.setEncoding('utf8');
|
|
234
|
+
let input = '';
|
|
235
|
+
const onData = (ch) => {
|
|
236
|
+
if (ch === '\r' || ch === '\n') {
|
|
237
|
+
if (process.stdin.isTTY) process.stdin.setRawMode(false);
|
|
238
|
+
process.stdin.pause();
|
|
239
|
+
process.stdin.removeListener('data', onData);
|
|
240
|
+
process.stdout.write('\n');
|
|
241
|
+
resolve(input.trim());
|
|
242
|
+
} else if (ch === '\x7F' || ch === '\b') {
|
|
243
|
+
if (input.length > 0) input = input.slice(0, -1);
|
|
244
|
+
} else if (ch === '\x03') {
|
|
245
|
+
process.exit(1);
|
|
246
|
+
} else {
|
|
247
|
+
input += ch;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
process.stdin.on('data', onData);
|
|
251
|
+
});
|
|
252
|
+
if (!pass) {
|
|
253
|
+
console.log(chalk.red(' Passphrase required.'));
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
await startAgency(pass);
|
|
257
|
+
} else {
|
|
258
|
+
await startAgency(passphrase);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function showHelp() {
|
|
263
|
+
console.log(chalk.cyan('Usage: agent-zero <command> [options]\n'));
|
|
264
|
+
console.log(chalk.white('Commands:'));
|
|
265
|
+
console.log(chalk.gray(' start [name]') + ' Start Agent Zero skill');
|
|
266
|
+
console.log(chalk.gray(' rail [port]') + ' Start resonance rail server');
|
|
267
|
+
console.log(chalk.gray(' setup') + ' Interactive setup wizard');
|
|
268
|
+
console.log(chalk.gray(' agency') + ' Start 24/7 agency runtime');
|
|
269
|
+
console.log(chalk.gray(' status') + ' Show current status');
|
|
270
|
+
console.log(chalk.gray(' migrate') + ' Request migration to terminals.tech');
|
|
271
|
+
console.log(chalk.gray(' vault <cmd>') + ' Vault device management');
|
|
272
|
+
console.log(chalk.gray(' moltbook <cmd>') + ' Moltbook engagement daemon');
|
|
273
|
+
console.log(chalk.gray(' help') + ' Show this help message');
|
|
274
|
+
console.log();
|
|
275
|
+
console.log(chalk.white('Examples:'));
|
|
276
|
+
console.log(chalk.gray(' agent-zero setup'));
|
|
277
|
+
console.log(chalk.gray(' agent-zero agency'));
|
|
278
|
+
console.log(chalk.gray(' agent-zero start "My Agent"'));
|
|
279
|
+
console.log(chalk.gray(' agent-zero rail 8080'));
|
|
280
|
+
console.log();
|
|
281
|
+
console.log(chalk.gray('Learn more: ') + chalk.blue('https://terminals.tech'));
|
|
282
|
+
console.log();
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
async function vaultCommand(args) {
|
|
286
|
+
const sub = args[0];
|
|
287
|
+
const passphrase = process.env.VAULT_PASSPHRASE;
|
|
288
|
+
if (!passphrase) {
|
|
289
|
+
console.error(chalk.red(' VAULT_PASSPHRASE env var required.'));
|
|
290
|
+
process.exit(1);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const vault = await createVault(passphrase);
|
|
294
|
+
|
|
295
|
+
switch (sub) {
|
|
296
|
+
case 'add-device': {
|
|
297
|
+
const label = args[1] ?? undefined;
|
|
298
|
+
const fp = await vault.addDevice(label);
|
|
299
|
+
console.log(chalk.green(` Device registered: ${fp}...`));
|
|
300
|
+
console.log(chalk.gray(` Label: ${label ?? '(none)'}`));
|
|
301
|
+
console.log(chalk.gray(` Total devices: ${vault.listDevices().length}`));
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
case 'devices': {
|
|
305
|
+
const devices = vault.listDevices();
|
|
306
|
+
console.log(chalk.cyan(` ${devices.length} registered device(s):\n`));
|
|
307
|
+
for (const d of devices) {
|
|
308
|
+
console.log(chalk.white(` [${d.index}] ${d.label ?? '(no label)'} — added ${d.addedAt}`));
|
|
309
|
+
}
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
case 'info': {
|
|
313
|
+
console.log(chalk.cyan(' Vault Info\n'));
|
|
314
|
+
console.log(chalk.gray(` Version: ${vault.getVersion()}`));
|
|
315
|
+
console.log(chalk.gray(` Devices: ${vault.listDevices().length}`));
|
|
316
|
+
console.log(chalk.gray(` Keys: ${(await vault.list()).length}`));
|
|
317
|
+
console.log(chalk.gray(` Native fingerprint: ${Vault.getNativeFingerprint().slice(0, 16)}...`));
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
default:
|
|
321
|
+
console.log(chalk.cyan(' Vault commands:\n'));
|
|
322
|
+
console.log(chalk.gray(' agent-zero vault add-device [label]') + ' Register this machine');
|
|
323
|
+
console.log(chalk.gray(' agent-zero vault devices') + ' List registered devices');
|
|
324
|
+
console.log(chalk.gray(' agent-zero vault info') + ' Vault info & fingerprint');
|
|
325
|
+
console.log();
|
|
326
|
+
console.log(chalk.gray(' Drift recovery:'));
|
|
327
|
+
console.log(chalk.gray(' VAULT_MACHINE_FINGERPRINT=<old> agent-zero vault add-device'));
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Router
|
|
3
|
+
*
|
|
4
|
+
* Parses inbound WhatsApp messages from the user and routes to handlers.
|
|
5
|
+
* Only processes messages from the configured user JID.
|
|
6
|
+
*/
|
|
7
|
+
import type { WhatsAppAdapter, ChannelAdapter } from '../channels/whatsapp.js';
|
|
8
|
+
import type { MoltbookDaemon } from '../moltbook/daemon.js';
|
|
9
|
+
import type { SummaryScheduler } from './summaryScheduler.js';
|
|
10
|
+
import type { DaemonObserver } from '../moltbook/observer.js';
|
|
11
|
+
export interface CommandRouterConfig {
|
|
12
|
+
userJid: string;
|
|
13
|
+
whatsApp: WhatsAppAdapter;
|
|
14
|
+
sms?: ChannelAdapter;
|
|
15
|
+
userPhone?: string;
|
|
16
|
+
moltbookDaemon?: MoltbookDaemon;
|
|
17
|
+
summaryScheduler?: SummaryScheduler;
|
|
18
|
+
/** LLM for conversational replies */
|
|
19
|
+
llmApiKey?: string;
|
|
20
|
+
llmModel?: string;
|
|
21
|
+
startTime: number;
|
|
22
|
+
observer?: DaemonObserver;
|
|
23
|
+
}
|
|
24
|
+
export declare class CommandRouter {
|
|
25
|
+
private config;
|
|
26
|
+
private replyChannel;
|
|
27
|
+
private reviewSession;
|
|
28
|
+
private reviewSessionExpiry;
|
|
29
|
+
constructor(config: CommandRouterConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Register as a message handler on WhatsApp and SMS adapters.
|
|
32
|
+
*/
|
|
33
|
+
attach(): void;
|
|
34
|
+
private handleMessage;
|
|
35
|
+
private handleCommand;
|
|
36
|
+
private cmdStatus;
|
|
37
|
+
private cmdSummary;
|
|
38
|
+
private cmdToggle;
|
|
39
|
+
private cmdReview;
|
|
40
|
+
private isApprovalInput;
|
|
41
|
+
private handleApproval;
|
|
42
|
+
private cmdMoltbook;
|
|
43
|
+
private cmdHelp;
|
|
44
|
+
private handleFreeText;
|
|
45
|
+
private reply;
|
|
46
|
+
}
|
|
47
|
+
export declare function createCommandRouter(config: CommandRouterConfig): CommandRouter;
|
|
48
|
+
//# sourceMappingURL=commandRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRouter.d.ts","sourceRoot":"","sources":["../../src/agency/commandRouter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAO9E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAMD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACH,MAAM,IAAI,IAAI;YAYA,aAAa;YA+Cb,aAAa;YA2Bb,SAAS;YAuBT,UAAU;YAQV,SAAS;YAST,SAAS;IAiCvB,OAAO,CAAC,eAAe;YAUT,cAAc;YA+Dd,WAAW;YAqBX,OAAO;YAeP,cAAc;YA8Cd,KAAK;CAcpB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAE9E"}
|