visionclaw 0.1.177 → 0.1.178-beta.1
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 +0 -77
- package/dist/agent/heartbeat-manager.d.ts +10 -0
- package/dist/agent/heartbeat-manager.d.ts.map +1 -1
- package/dist/agent/heartbeat-manager.js +46 -3
- package/dist/agent/heartbeat-manager.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +6 -0
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/subscription-gate.d.ts +22 -0
- package/dist/agent/subscription-gate.d.ts.map +1 -0
- package/dist/agent/subscription-gate.js +62 -0
- package/dist/agent/subscription-gate.js.map +1 -0
- package/dist/billing/payment-handler.d.ts +24 -0
- package/dist/billing/payment-handler.d.ts.map +1 -0
- package/dist/billing/payment-handler.js +106 -0
- package/dist/billing/payment-handler.js.map +1 -0
- package/dist/billing/types.d.ts +33 -0
- package/dist/billing/types.d.ts.map +1 -0
- package/dist/billing/types.js +12 -0
- package/dist/billing/types.js.map +1 -0
- package/dist/channels/interface.d.ts +10 -0
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/manager.d.ts +10 -0
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +24 -0
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/telegram.d.ts +20 -0
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +112 -1
- package/dist/channels/telegram.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +0 -4
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +2 -2
- package/dist/config/types.js.map +1 -1
- package/dist/onboarding/index.js +1 -1
- package/dist/onboarding/index.js.map +1 -1
- package/dist/onboarding/onboarding-service-client.d.ts +9 -0
- package/dist/onboarding/onboarding-service-client.d.ts.map +1 -1
- package/dist/onboarding/onboarding-service-client.js +29 -0
- package/dist/onboarding/onboarding-service-client.js.map +1 -1
- package/dist/onboarding/setup-steps.js +1 -1
- package/dist/onboarding/setup-steps.js.map +1 -1
- package/dist-agent/bundle.cjs +373 -61
- package/package.json +2 -4
- package/scripts/setup-openclaw-shim.mjs +16 -4
package/README.md
CHANGED
|
@@ -34,7 +34,6 @@ src/
|
|
|
34
34
|
skills/ # Skill installation logic
|
|
35
35
|
config/ # Configuration management
|
|
36
36
|
obs/ # Runtime observability HTTP server
|
|
37
|
-
gui/ # Electron desktop GUI
|
|
38
37
|
```
|
|
39
38
|
|
|
40
39
|
## Prerequisites
|
|
@@ -79,25 +78,6 @@ export TOS_ENDPOINT="tos-cn-beijing.volces.com" # optional
|
|
|
79
78
|
npx tsx scripts/upload-to-tos.ts --file ./local.bin --key uploads/local.bin
|
|
80
79
|
```
|
|
81
80
|
|
|
82
|
-
### Upload GUI release artifacts to TOS
|
|
83
|
-
|
|
84
|
-
Use the GUI uploader to publish install artifacts as public URLs under a versioned prefix:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
export TOS_ACCESS_KEY_ID="..."
|
|
88
|
-
export TOS_ACCESS_KEY_SECRET="..."
|
|
89
|
-
export TOS_REGION="cn-beijing"
|
|
90
|
-
export TOS_BUCKET="your-bucket"
|
|
91
|
-
export TOS_ENDPOINT="tos-cn-beijing.volces.com"
|
|
92
|
-
|
|
93
|
-
# Default file: gui/dist/VisionClaw-<gui-version>-arm64.dmg
|
|
94
|
-
# Default key: gui/releases/v<gui-version>/<filename>
|
|
95
|
-
pnpm upload:gui:dmg
|
|
96
|
-
|
|
97
|
-
# Override file/key if needed
|
|
98
|
-
pnpm upload:gui:dmg -- --file gui/dist/VisionClaw-0.1.0-arm64.dmg --key gui/releases/v0.1.0/VisionClaw-0.1.0-arm64.dmg
|
|
99
|
-
```
|
|
100
|
-
|
|
101
81
|
The first run triggers an interactive onboarding wizard that will:
|
|
102
82
|
1. Ask for your Anthropic API key
|
|
103
83
|
2. Ask for a dedicated Gmail address for the agent
|
|
@@ -129,63 +109,6 @@ This is controlled via **advanced config** (not asked during onboarding):
|
|
|
129
109
|
}
|
|
130
110
|
```
|
|
131
111
|
|
|
132
|
-
## GUI (Work in Progress)
|
|
133
|
-
|
|
134
|
-
> **Note**: The Electron GUI is under development and not yet functional. Use the CLI for now.
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
cd gui
|
|
138
|
-
pnpm install
|
|
139
|
-
pnpm start
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## GUI Release SOP
|
|
143
|
-
|
|
144
|
-
GUI shell releases are intentionally decoupled from the CLI npm release flow.
|
|
145
|
-
|
|
146
|
-
- Version source of truth: `gui/package.json`
|
|
147
|
-
- Release tag format: `gui-vX.Y.Z`
|
|
148
|
-
- Contract: tag version must equal `gui/package.json` version (validated in CI)
|
|
149
|
-
- Distribution channels: GitHub Releases (primary updater feed) + TOS public mirror
|
|
150
|
-
|
|
151
|
-
### Standard release flow
|
|
152
|
-
|
|
153
|
-
1. Bump GUI version in `gui/package.json`.
|
|
154
|
-
2. Commit and push to `main`.
|
|
155
|
-
3. Create and push tag:
|
|
156
|
-
- `git tag gui-vX.Y.Z`
|
|
157
|
-
- `git push origin gui-vX.Y.Z`
|
|
158
|
-
4. GitHub Actions workflow `.github/workflows/release-gui.yml` builds and publishes:
|
|
159
|
-
- macOS artifacts (`.dmg`, `-mac.zip`, `latest-mac.yml`)
|
|
160
|
-
- Windows artifacts (`.exe`, `-win.zip`, `latest.yml`)
|
|
161
|
-
- GitHub Release assets
|
|
162
|
-
- TOS mirrored public URLs
|
|
163
|
-
|
|
164
|
-
### Required release secrets
|
|
165
|
-
|
|
166
|
-
- `TOS_ACCESS_KEY_ID`
|
|
167
|
-
- `TOS_ACCESS_KEY_SECRET`
|
|
168
|
-
- `TOS_REGION`
|
|
169
|
-
- `TOS_BUCKET`
|
|
170
|
-
- `TOS_ENDPOINT`
|
|
171
|
-
- `APPLE_ID`
|
|
172
|
-
- `APPLE_APP_SPECIFIC_PASSWORD`
|
|
173
|
-
- `APPLE_TEAM_ID`
|
|
174
|
-
|
|
175
|
-
### macOS signing runner (Scheme A)
|
|
176
|
-
|
|
177
|
-
`Release GUI` uses a self-hosted macOS runner for the `build-macos` job, so your local Apple signing certificate can stay in your own keychain.
|
|
178
|
-
|
|
179
|
-
- Required runner labels: `self-hosted`, `macOS`, `ARM64`
|
|
180
|
-
- Required local identity: `Developer ID Application` certificate in runner keychain
|
|
181
|
-
- The workflow fails fast if signing identity or Apple notarization credentials are missing
|
|
182
|
-
|
|
183
|
-
### Rollback / hotfix guidance
|
|
184
|
-
|
|
185
|
-
- Do not overwrite existing release assets in-place.
|
|
186
|
-
- Cut a new hotfix tag (for example `gui-vX.Y.(Z+1)`) and let CI publish a new release.
|
|
187
|
-
- Clients on auto-update pick up the next valid release metadata.
|
|
188
|
-
|
|
189
112
|
## Channels
|
|
190
113
|
|
|
191
114
|
| Channel | Requirements | Status |
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { VisionClawConfig } from "../config/types.js";
|
|
9
9
|
import type { ChannelManager } from "../channels/manager.js";
|
|
10
|
+
import { type SubscriptionStatus } from "../onboarding/onboarding-service-client.js";
|
|
10
11
|
import { CommandDispatcher } from "./command-dispatcher.js";
|
|
11
12
|
import { type PendingUpgradeInfo } from "../config/index.js";
|
|
12
13
|
export declare class HeartbeatManager {
|
|
@@ -14,6 +15,8 @@ export declare class HeartbeatManager {
|
|
|
14
15
|
readonly commandDispatcher: CommandDispatcher;
|
|
15
16
|
private busyInterval;
|
|
16
17
|
private readonly config;
|
|
18
|
+
private channelManager;
|
|
19
|
+
private _lastSubscriptionStatus;
|
|
17
20
|
constructor(config: VisionClawConfig);
|
|
18
21
|
/**
|
|
19
22
|
* Initialize the heartbeat client and validate the API key.
|
|
@@ -23,11 +26,18 @@ export declare class HeartbeatManager {
|
|
|
23
26
|
init(channelManager: ChannelManager, telegramChatId: number | undefined, justUpgraded: PendingUpgradeInfo | null): Promise<void>;
|
|
24
27
|
/** Whether a heartbeat client is active. */
|
|
25
28
|
get enabled(): boolean;
|
|
29
|
+
/** The subscription status from the most recent heartbeat response. */
|
|
30
|
+
get lastSubscriptionStatus(): SubscriptionStatus;
|
|
26
31
|
/**
|
|
27
32
|
* Send a heartbeat at the start of each wake cycle.
|
|
28
33
|
* Dispatches any pending commands from the server and applies shared keys.
|
|
29
34
|
*/
|
|
30
35
|
onWake(busy: boolean): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Send a single heartbeat and return the subscription status from the response.
|
|
38
|
+
* Used by the subscription gate for fast-polling (10s interval).
|
|
39
|
+
*/
|
|
40
|
+
sendHeartbeatForSubscription(): Promise<SubscriptionStatus>;
|
|
31
41
|
/**
|
|
32
42
|
* Start a periodic heartbeat while the agent is busy processing a cycle.
|
|
33
43
|
* Keeps the dashboard up-to-date with the agent's current status.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-manager.d.ts","sourceRoot":"","sources":["../../src/agent/heartbeat-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"heartbeat-manager.d.ts","sourceRoot":"","sources":["../../src/agent/heartbeat-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAyCnF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAwC;IACtD,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,uBAAuB,CAA8B;gBAEjD,MAAM,EAAE,gBAAgB;IAQpC;;;;OAIG;IACG,IAAI,CACR,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,YAAY,EAAE,kBAAkB,GAAG,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAwEhB,4CAA4C;IAC5C,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,uEAAuE;IACvE,IAAI,sBAAsB,IAAI,kBAAkB,CAE/C;IAED;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B1C;;;OAGG;IACG,4BAA4B,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAqBjE;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAkBzB;;;OAGG;IACH,gBAAgB,IAAI,IAAI;CAmBzB"}
|
|
@@ -12,12 +12,13 @@ import { isOnboardingComplete } from "../config/index.js";
|
|
|
12
12
|
import { createCollectDataHandler } from "./data-collector.js";
|
|
13
13
|
import { createUpgradeHandler } from "./upgrade-handler.js";
|
|
14
14
|
import { createUsageHandler } from "./usage-handler.js";
|
|
15
|
+
import { createPaymentHandler } from "../billing/payment-handler.js";
|
|
15
16
|
import { setSharedGeminiApiKey } from "../gemini-credentials.js";
|
|
16
17
|
import { setSharedTosCredentials } from "../tos-credentials.js";
|
|
17
18
|
import { resetArchiveConfigCache } from "./image-archive.js";
|
|
18
19
|
import { logger } from "../logger.js";
|
|
19
20
|
const BUSY_HEARTBEAT_INTERVAL_MS = 30_000;
|
|
20
|
-
function applySharedKeysFromHeartbeat(config, sharedKeys) {
|
|
21
|
+
function applySharedKeysFromHeartbeat(config, _channelManager, sharedKeys) {
|
|
21
22
|
if (!sharedKeys)
|
|
22
23
|
return false;
|
|
23
24
|
let updated = false;
|
|
@@ -39,6 +40,8 @@ export class HeartbeatManager {
|
|
|
39
40
|
commandDispatcher;
|
|
40
41
|
busyInterval = null;
|
|
41
42
|
config;
|
|
43
|
+
channelManager = null;
|
|
44
|
+
_lastSubscriptionStatus = "skip";
|
|
42
45
|
constructor(config) {
|
|
43
46
|
this.config = config;
|
|
44
47
|
this.commandDispatcher = new CommandDispatcher();
|
|
@@ -52,6 +55,7 @@ export class HeartbeatManager {
|
|
|
52
55
|
* are silently disabled.
|
|
53
56
|
*/
|
|
54
57
|
async init(channelManager, telegramChatId, justUpgraded) {
|
|
58
|
+
this.channelManager = channelManager;
|
|
55
59
|
// Queue synthetic ack for a just-completed upgrade
|
|
56
60
|
if (justUpgraded?.commandId !== undefined) {
|
|
57
61
|
this.commandDispatcher.queueAck({
|
|
@@ -75,10 +79,17 @@ export class HeartbeatManager {
|
|
|
75
79
|
busy: false,
|
|
76
80
|
onboardingComplete: isOnboardingComplete(),
|
|
77
81
|
};
|
|
82
|
+
// Register payment handler now that we have channelManager and service client
|
|
83
|
+
if (telegramChatId) {
|
|
84
|
+
this.commandDispatcher.registerHandler("payment_required", createPaymentHandler(channelManager, telegramChatId, this.client));
|
|
85
|
+
}
|
|
78
86
|
try {
|
|
79
87
|
const startupResp = await this.client.heartbeatStrict(startupPayload);
|
|
80
88
|
logger.system("Runtime heartbeat: initial key validation succeeded");
|
|
81
|
-
if (
|
|
89
|
+
if (startupResp?.subscriptionStatus) {
|
|
90
|
+
this._lastSubscriptionStatus = startupResp.subscriptionStatus;
|
|
91
|
+
}
|
|
92
|
+
if (applySharedKeysFromHeartbeat(this.config, this.channelManager, startupResp?.sharedKeys)) {
|
|
82
93
|
logger.debug("Shared keys applied from startup heartbeat");
|
|
83
94
|
}
|
|
84
95
|
}
|
|
@@ -99,6 +110,10 @@ export class HeartbeatManager {
|
|
|
99
110
|
get enabled() {
|
|
100
111
|
return this.client !== null;
|
|
101
112
|
}
|
|
113
|
+
/** The subscription status from the most recent heartbeat response. */
|
|
114
|
+
get lastSubscriptionStatus() {
|
|
115
|
+
return this._lastSubscriptionStatus;
|
|
116
|
+
}
|
|
102
117
|
/**
|
|
103
118
|
* Send a heartbeat at the start of each wake cycle.
|
|
104
119
|
* Dispatches any pending commands from the server and applies shared keys.
|
|
@@ -117,10 +132,13 @@ export class HeartbeatManager {
|
|
|
117
132
|
onboardingComplete: isOnboardingComplete(),
|
|
118
133
|
...(acks.length > 0 ? { commandAcks: acks } : {}),
|
|
119
134
|
});
|
|
135
|
+
if (resp?.subscriptionStatus) {
|
|
136
|
+
this._lastSubscriptionStatus = resp.subscriptionStatus;
|
|
137
|
+
}
|
|
120
138
|
if (resp?.pendingCommands && resp.pendingCommands.length > 0) {
|
|
121
139
|
this.commandDispatcher.dispatch(resp.pendingCommands);
|
|
122
140
|
}
|
|
123
|
-
if (applySharedKeysFromHeartbeat(this.config, resp?.sharedKeys)) {
|
|
141
|
+
if (applySharedKeysFromHeartbeat(this.config, this.channelManager, resp?.sharedKeys)) {
|
|
124
142
|
logger.debug("Shared keys updated from heartbeat");
|
|
125
143
|
}
|
|
126
144
|
}
|
|
@@ -130,6 +148,31 @@ export class HeartbeatManager {
|
|
|
130
148
|
this.commandDispatcher.requeueAcks(acks);
|
|
131
149
|
}
|
|
132
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Send a single heartbeat and return the subscription status from the response.
|
|
153
|
+
* Used by the subscription gate for fast-polling (10s interval).
|
|
154
|
+
*/
|
|
155
|
+
async sendHeartbeatForSubscription() {
|
|
156
|
+
if (!this.client)
|
|
157
|
+
return this._lastSubscriptionStatus;
|
|
158
|
+
try {
|
|
159
|
+
const resp = await this.client.heartbeat({
|
|
160
|
+
version: getCurrentVersion(),
|
|
161
|
+
model: this.config.model,
|
|
162
|
+
provider: this.config.provider,
|
|
163
|
+
uptime: Math.round(process.uptime()),
|
|
164
|
+
busy: false,
|
|
165
|
+
onboardingComplete: isOnboardingComplete(),
|
|
166
|
+
});
|
|
167
|
+
if (resp?.subscriptionStatus) {
|
|
168
|
+
this._lastSubscriptionStatus = resp.subscriptionStatus;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// best-effort — keep last known status
|
|
173
|
+
}
|
|
174
|
+
return this._lastSubscriptionStatus;
|
|
175
|
+
}
|
|
133
176
|
/**
|
|
134
177
|
* Start a periodic heartbeat while the agent is busy processing a cycle.
|
|
135
178
|
* Keeps the dashboard up-to-date with the agent's current status.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-manager.js","sourceRoot":"","sources":["../../src/agent/heartbeat-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EACL,uBAAuB,
|
|
1
|
+
{"version":3,"file":"heartbeat-manager.js","sourceRoot":"","sources":["../../src/agent/heartbeat-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAapD,OAAO,EAAE,KAAK,UAAU,EAA4C,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAapD,OAAO,EAAE,KAAK,UAAU,EAA4C,MAAM,YAAY,CAAC;AAgBvF,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,cAAc,EAAE,cAAc,CAAC;QAAC,YAAY,EAAE,YAAY,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5I,GACA,OAAO,CAAC,IAAI,CAAC,CA2Vf"}
|
package/dist/agent/loop.js
CHANGED
|
@@ -26,6 +26,7 @@ import { maybeStartApiProxy } from "./providers/client-factory.js";
|
|
|
26
26
|
import { cleanupOldTranscripts } from "./session-trimmer.js";
|
|
27
27
|
import { initAgentState, registerShutdownCallback } from "./state.js";
|
|
28
28
|
import { runOnboardingGate } from "./onboarding-gate.js";
|
|
29
|
+
import { runSubscriptionGate } from "./subscription-gate.js";
|
|
29
30
|
import { InterruptHandler } from "./interrupt-handler.js";
|
|
30
31
|
import { gatherWakeContext } from "./gather-context.js";
|
|
31
32
|
import { ScreenshotInjector } from "./screenshot-injector.js";
|
|
@@ -233,6 +234,11 @@ export async function startAgentLoop(config, options) {
|
|
|
233
234
|
activityTracker.clear();
|
|
234
235
|
cleanOldScreenshots().catch(() => { });
|
|
235
236
|
await heartbeat.onWake(agentState.busy);
|
|
237
|
+
// --- Subscription gate ---
|
|
238
|
+
if (heartbeat.lastSubscriptionStatus === "expired") {
|
|
239
|
+
await runSubscriptionGate(config, channelManager, heartbeat);
|
|
240
|
+
// Gate returned — subscription is now active/skip, continue normally
|
|
241
|
+
}
|
|
236
242
|
heartbeat.startBusyInterval();
|
|
237
243
|
// --- Drain messages ---
|
|
238
244
|
const hasMessages = !messageQueue.isEmpty();
|
package/dist/agent/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAmB,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAwB,EACxB,OAIC;IAED,wEAAwE;IACxE,oBAAoB;IACpB,wEAAwE;IAExE,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAE9C,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;IAEhC,wBAAwB,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,mBAAmB,GAAG,KAAK,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,cAAc,CAAC,OAAO,EAAE;gBACxB,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAC/E;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CACT,+CAA+C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClG,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IACpF,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE/E,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;QAC/B,cAAc,CAAC,sBAAsB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,WAAW,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,cAAc,CAAC,2BAA2B,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,kBAAkB,GAAe,GAAG,EAAE,GAAwB,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAe;QAC7B,MAAM;QACN,WAAW;QACX,cAAc;QACd,YAAY;QACZ,eAAe;QACf,IAAI,EAAE,KAAK;QACX,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,GAAG,EAAE;YAChB,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YAChC,kBAAkB,EAAE,CAAC;QACvB,CAAC;QACD,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,iBAAiB,EAAE,KAAK;QACxB,aAAa,EAAE,OAAO,EAAE,aAAa;QACrC,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;QAC9C,UAAU,EAAE,KAAK;KAClB,CAAC;IAEF,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3B,MAAM,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAM,CAAC,UAAU,WAAW,CAAC,SAAS,KAAK,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;IAC7E,MAAM,CAAC,MAAM,CAAC,uBAAuB,WAAW,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC;IAChF,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElB,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEjC,qEAAqE;IACrE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,mCAAmC,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1E,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,MAAM,EAAE,cAAc,EAAE,4BAA4B,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrF,IAAI,4BAA4B,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,UAAU,4BAA4B,kCAAkC,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,cAAc,CAChC,MAAM,EACN,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,EAC5C,cAAc,EACd,EAAE,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,EAAE,CACvD,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,iBAAiB,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAE1F,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC;IAEpC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACpD,OAAO,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAClD,kBAAkB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAEjD,6BAA6B;IAC7B,IAAI,YAAY,GAAwB,IAAI,CAAC;IAE7C,SAAS,YAAY;QACnB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,YAAY,EAAE,CAAC;YACf,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC5C,OAAO,EAAE,OAAO,CAAC,aAAa;QAC9B,cAAc,EAAE,OAAO;QACvB,MAAM;QACN,WAAW;QACX,cAAc;QACd,YAAY;QACZ,eAAe;QACf,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU;QAC/B,YAAY;KACb,CAAC,CAAC;IAEH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QAChC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uBAAuB,CAAC;QACtB,UAAU;QACV,cAAc;QACd,YAAY;QACZ,OAAO;QACP,MAAM;QACN,WAAW;QACX,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC;IAC7F,MAAM,cAAc,GAAG,IAAI,uBAAuB,CAAC;QACjD,MAAM;QACN,cAAc,EAAE,OAAO;QACvB,YAAY;QACZ,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU;QAC/B,YAAY;KACb,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,EAAE,CAAC;IACvB,wBAAwB,CAAC,GAAG,EAAE;QAC5B,cAAc,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,wBAAwB,CAAC,GAAG,EAAE;QAC5B,kBAAkB,EAAE,CAAC;QACrB,uBAAuB,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACpD,MAAM,CAAC,IAAI,CACT,+CAA+C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClG,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IAEvE,4BAA4B;IAC5B,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,MAAM;QACN,WAAW;QACX,OAAO;QACP,eAAe;QACf,gBAAgB;QAChB,cAAc;QACd,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;IAE1E,wEAAwE;IACxE,eAAe;IACf,wEAAwE;IAExE,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,cAAc,GAAG,IAAI,CAAC;IAE1B,oGAAoG;IACpG,OAAO,IAAI,EAAE,CAAC;QACZ,gCAAgC;QAChC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;QACjC,UAAU,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACrC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,gBAAgB,CAAC,yBAAyB,EAAE,CAAC;QAC7C,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAE3B,0DAA0D;QAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;QACxE,MAAM,WAAW,GAAG,cAAc,CAAC;QACnC,cAAc,GAAG,KAAK,CAAC;QAEvB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,YAAY,GAAG,OAAO,CAAC;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;oBAC7B,YAAY,GAAG,IAAI,CAAC;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,YAAY,GAAG,IAAI,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,eAAe;QACf,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,mBAAmB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAqB,CAAC,CAAC,CAAC;QAEzD,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAE9B,yBAAyB;QACzB,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAEtD,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,GAAG;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE;oBACvD,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,YAAY,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;iBACpD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACzE,CAAC,CAAC,WAAW,CAAC;QAClB,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,eAAe,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,mBAAmB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE;gBAC5E,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,EAAE,EAAE,GAAG,CAAC,EAAE;aACX,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,MAAM,cAAc,GAAG,OAAO,KAAK,WAAW,IAAI,kBAAkB,EAAE,CAAC;QACvE,MAAM,cAAc,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAC7C,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,GAClD,MAAM,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAEnG,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;YAC3C,MAAM;YACN,OAAO;YACP,QAAQ;YACR,eAAe;YACf,UAAU;YACV,aAAa;YACb,aAAa,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC1E,YAAY,EAAE,OAAO,CAAC,qBAAqB,EAAE;YAC7C,mBAAmB,EAAE,OAAO,CAAC,sBAAsB,EAAE;YACrD,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;YAClD,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;SAChD,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAErC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,cAAc,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAqB,CAAC,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAClC,aAAa,EACb,OAAO,EACP,QAAQ,EACR,eAAe,EACf,iBAAiB,CAClB,CAAC;YACF,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,qEAAqE;YACrE,gEAAgE;YAChE,8CAA8C;YAC9C,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC7B,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subscription gate — blocks the agent when the subscription has expired.
|
|
3
|
+
*
|
|
4
|
+
* Follows the same pattern as onboarding-gate.ts:
|
|
5
|
+
* 1. Notify owner that subscription has expired
|
|
6
|
+
* 2. Poll heartbeat every 10s (no Claude API calls)
|
|
7
|
+
* 3. Once status is "active" or "skip", return so the agent can resume
|
|
8
|
+
*
|
|
9
|
+
* The agent never checks Stripe directly — it trusts the backend's
|
|
10
|
+
* `subscriptionStatus` field in the heartbeat response.
|
|
11
|
+
*/
|
|
12
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
13
|
+
import type { ChannelManager } from "../channels/manager.js";
|
|
14
|
+
import type { HeartbeatManager } from "./heartbeat-manager.js";
|
|
15
|
+
/**
|
|
16
|
+
* Run the subscription gate. Blocks until the subscription is renewed
|
|
17
|
+
* (status returns to "active" or "skip").
|
|
18
|
+
*
|
|
19
|
+
* Called from the main loop when `heartbeat.lastSubscriptionStatus === "expired"`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function runSubscriptionGate(_config: VisionClawConfig, channelManager: ChannelManager, heartbeat: HeartbeatManager): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=subscription-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription-gate.d.ts","sourceRoot":"","sources":["../../src/agent/subscription-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,EACzB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkDf"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subscription gate — blocks the agent when the subscription has expired.
|
|
3
|
+
*
|
|
4
|
+
* Follows the same pattern as onboarding-gate.ts:
|
|
5
|
+
* 1. Notify owner that subscription has expired
|
|
6
|
+
* 2. Poll heartbeat every 10s (no Claude API calls)
|
|
7
|
+
* 3. Once status is "active" or "skip", return so the agent can resume
|
|
8
|
+
*
|
|
9
|
+
* The agent never checks Stripe directly — it trusts the backend's
|
|
10
|
+
* `subscriptionStatus` field in the heartbeat response.
|
|
11
|
+
*/
|
|
12
|
+
import { loadOwnerConfig } from "../config/index.js";
|
|
13
|
+
import { logger } from "../logger.js";
|
|
14
|
+
const GATE_POLL_INTERVAL_MS = 10_000;
|
|
15
|
+
/**
|
|
16
|
+
* Run the subscription gate. Blocks until the subscription is renewed
|
|
17
|
+
* (status returns to "active" or "skip").
|
|
18
|
+
*
|
|
19
|
+
* Called from the main loop when `heartbeat.lastSubscriptionStatus === "expired"`.
|
|
20
|
+
*/
|
|
21
|
+
export async function runSubscriptionGate(_config, channelManager, heartbeat) {
|
|
22
|
+
const ownerConfig = loadOwnerConfig();
|
|
23
|
+
logger.system("Subscription expired — entering subscription gate (no Claude API calls)");
|
|
24
|
+
// Notify owner
|
|
25
|
+
const expiredMsg = "Your subscription has expired. Please renew to continue using the agent. " +
|
|
26
|
+
"The agent is paused and will resume automatically once your subscription is active.";
|
|
27
|
+
try {
|
|
28
|
+
if (ownerConfig.telegramChatId) {
|
|
29
|
+
await channelManager.sendMessage("telegram", String(ownerConfig.telegramChatId), expiredMsg);
|
|
30
|
+
}
|
|
31
|
+
else if (ownerConfig.ownerEmail) {
|
|
32
|
+
await channelManager.sendMessage("gmail", ownerConfig.ownerEmail, expiredMsg);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
logger.warn("Failed to send subscription expiry notification to owner");
|
|
37
|
+
}
|
|
38
|
+
// Poll heartbeat every 10s until subscription is renewed
|
|
39
|
+
let status = heartbeat.lastSubscriptionStatus;
|
|
40
|
+
while (status === "expired") {
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, GATE_POLL_INTERVAL_MS));
|
|
42
|
+
status = await heartbeat.sendHeartbeatForSubscription();
|
|
43
|
+
if (status !== "expired")
|
|
44
|
+
break;
|
|
45
|
+
logger.debug(`Subscription gate: still expired, polling again in ${GATE_POLL_INTERVAL_MS / 1000}s`);
|
|
46
|
+
}
|
|
47
|
+
logger.system("Subscription renewed — exiting subscription gate");
|
|
48
|
+
// Notify owner that we're resuming
|
|
49
|
+
const renewedMsg = "Subscription renewed! Resuming normal operation.";
|
|
50
|
+
try {
|
|
51
|
+
if (ownerConfig.telegramChatId) {
|
|
52
|
+
await channelManager.sendMessage("telegram", String(ownerConfig.telegramChatId), renewedMsg);
|
|
53
|
+
}
|
|
54
|
+
else if (ownerConfig.ownerEmail) {
|
|
55
|
+
await channelManager.sendMessage("gmail", ownerConfig.ownerEmail, renewedMsg);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
logger.warn("Failed to send subscription renewal notification to owner");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=subscription-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription-gate.js","sourceRoot":"","sources":["../../src/agent/subscription-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAyB,EACzB,cAA8B,EAC9B,SAA2B;IAE3B,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,MAAM,CAAC,MAAM,CAAC,yEAAyE,CAAC,CAAC;IAEzF,eAAe;IACf,MAAM,UAAU,GACd,2EAA2E;QAC3E,qFAAqF,CAAC;IAExF,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,cAAc,CAAC,WAAW,CAC9B,UAAU,EACV,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,EAClC,UAAU,CACX,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,yDAAyD;IACzD,IAAI,MAAM,GAAG,SAAS,CAAC,sBAAsB,CAAC;IAC9C,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC3E,MAAM,GAAG,MAAM,SAAS,CAAC,4BAA4B,EAAE,CAAC;QACxD,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM;QAChC,MAAM,CAAC,KAAK,CAAC,sDAAsD,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;IAElE,mCAAmC;IACnC,MAAM,UAAU,GAAG,kDAAkD,CAAC;IACtE,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,MAAM,cAAc,CAAC,WAAW,CAC9B,UAAU,EACV,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,EAClC,UAAU,CACX,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payment command handler for the `payment_required` heartbeat command.
|
|
3
|
+
*
|
|
4
|
+
* This is deterministic bot code u2014 the LLM agent is never involved in
|
|
5
|
+
* payment flows. The handler:
|
|
6
|
+
*
|
|
7
|
+
* 1. Receives `payment_required` from the backend via heartbeat (includes plans)
|
|
8
|
+
* 2. Sends a plan selection prompt (inline keyboard) to the owner via Telegram
|
|
9
|
+
* 3. Listens for `billing_plan_selected` events from the Telegram adapter
|
|
10
|
+
* 4. Calls the backend to create a Stripe Checkout Session
|
|
11
|
+
* 5. Sends the checkout URL back to the owner as a URL button
|
|
12
|
+
*/
|
|
13
|
+
import type { CommandHandler } from "../agent/command-dispatcher.js";
|
|
14
|
+
import type { ChannelManager } from "../channels/manager.js";
|
|
15
|
+
import type { OnboardingServiceClient } from "../onboarding/onboarding-service-client.js";
|
|
16
|
+
/**
|
|
17
|
+
* Create a CommandHandler for the "payment_required" heartbeat command.
|
|
18
|
+
*
|
|
19
|
+
* @param channelManager - To send payment prompts and listen for billing events
|
|
20
|
+
* @param ownerChatId - The owner's Telegram chat ID
|
|
21
|
+
* @param serviceClient - Optional onboarding service client for creating checkout sessions
|
|
22
|
+
*/
|
|
23
|
+
export declare function createPaymentHandler(channelManager: ChannelManager, ownerChatId: number, serviceClient: OnboardingServiceClient | null): CommandHandler;
|
|
24
|
+
//# sourceMappingURL=payment-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-handler.d.ts","sourceRoot":"","sources":["../../src/billing/payment-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAW1F;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,uBAAuB,GAAG,IAAI,GAC5C,cAAc,CAiHhB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payment command handler for the `payment_required` heartbeat command.
|
|
3
|
+
*
|
|
4
|
+
* This is deterministic bot code u2014 the LLM agent is never involved in
|
|
5
|
+
* payment flows. The handler:
|
|
6
|
+
*
|
|
7
|
+
* 1. Receives `payment_required` from the backend via heartbeat (includes plans)
|
|
8
|
+
* 2. Sends a plan selection prompt (inline keyboard) to the owner via Telegram
|
|
9
|
+
* 3. Listens for `billing_plan_selected` events from the Telegram adapter
|
|
10
|
+
* 4. Calls the backend to create a Stripe Checkout Session
|
|
11
|
+
* 5. Sends the checkout URL back to the owner as a URL button
|
|
12
|
+
*/
|
|
13
|
+
import { logger } from "../logger.js";
|
|
14
|
+
const MAX_CHECKOUT_RETRIES = 2;
|
|
15
|
+
const RETRY_DELAY_MS = 2_000;
|
|
16
|
+
function sleep(ms) {
|
|
17
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a CommandHandler for the "payment_required" heartbeat command.
|
|
21
|
+
*
|
|
22
|
+
* @param channelManager - To send payment prompts and listen for billing events
|
|
23
|
+
* @param ownerChatId - The owner's Telegram chat ID
|
|
24
|
+
* @param serviceClient - Optional onboarding service client for creating checkout sessions
|
|
25
|
+
*/
|
|
26
|
+
export function createPaymentHandler(channelManager, ownerChatId, serviceClient) {
|
|
27
|
+
// Wire up plan selection listener (once)
|
|
28
|
+
let listenerAttached = false;
|
|
29
|
+
function ensurePlanSelectedListener() {
|
|
30
|
+
if (listenerAttached)
|
|
31
|
+
return;
|
|
32
|
+
listenerAttached = true;
|
|
33
|
+
channelManager.on("billing_plan_selected", (event) => {
|
|
34
|
+
void handlePlanSelected(event);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function handlePlanSelected(event) {
|
|
38
|
+
if (!serviceClient) {
|
|
39
|
+
logger.warn("[billing] No service client u2014 cannot create checkout session");
|
|
40
|
+
await channelManager.sendMessage("telegram", String(event.chatId), "Payment is not configured. Please contact support.");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
logger.system(`[billing] Plan selected: ${event.planId} by chat ${event.chatId}`);
|
|
44
|
+
// Retry loop for creating checkout session
|
|
45
|
+
for (let attempt = 0; attempt <= MAX_CHECKOUT_RETRIES; attempt++) {
|
|
46
|
+
try {
|
|
47
|
+
const result = await serviceClient.createCheckoutSession(event.planId, event.chatId);
|
|
48
|
+
if (result?.checkoutUrl) {
|
|
49
|
+
await channelManager.sendTelegramCheckoutLink(event.chatId, event.planName, result.checkoutUrl);
|
|
50
|
+
logger.system(`[billing] Checkout URL sent to chat ${event.chatId} for plan ${event.planId}`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// null result u2014 backend call failed
|
|
54
|
+
if (attempt < MAX_CHECKOUT_RETRIES) {
|
|
55
|
+
logger.warn(`[billing] Checkout session attempt ${attempt + 1} failed, retrying...`);
|
|
56
|
+
await channelManager.sendMessage("telegram", String(event.chatId), "Payment setup failed, retrying...");
|
|
57
|
+
await sleep(RETRY_DELAY_MS);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
62
|
+
logger.err(`[billing] Checkout session attempt ${attempt + 1} error: ${errMsg}`);
|
|
63
|
+
if (attempt < MAX_CHECKOUT_RETRIES) {
|
|
64
|
+
await sleep(RETRY_DELAY_MS);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// All retries exhausted
|
|
69
|
+
logger.err("[billing] All checkout session attempts failed");
|
|
70
|
+
await channelManager.sendMessage("telegram", String(event.chatId), "Payment setup failed. Please try again later.");
|
|
71
|
+
}
|
|
72
|
+
return async (_commandId, payload) => {
|
|
73
|
+
ensurePlanSelectedListener();
|
|
74
|
+
// Backend just signals "payment needed" with plans
|
|
75
|
+
const raw = (payload ?? {});
|
|
76
|
+
const plans = Array.isArray(raw.plans) ? raw.plans : [];
|
|
77
|
+
if (plans.length === 0) {
|
|
78
|
+
logger.warn("[billing] payment_required received with no plans");
|
|
79
|
+
return {
|
|
80
|
+
status: "failed",
|
|
81
|
+
result: JSON.stringify({ error: "No plans in payload" }),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const typedPayload = {
|
|
85
|
+
message: typeof raw.message === "string" ? raw.message : undefined,
|
|
86
|
+
plans,
|
|
87
|
+
};
|
|
88
|
+
logger.system(`[billing] Payment required received with ${typedPayload.plans.length} plan(s)`);
|
|
89
|
+
try {
|
|
90
|
+
await channelManager.sendTelegramPaymentPrompt(ownerChatId, typedPayload);
|
|
91
|
+
return {
|
|
92
|
+
status: "completed",
|
|
93
|
+
result: JSON.stringify({ message: "Payment prompt sent to owner" }),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
98
|
+
logger.err(`[billing] Failed to send payment prompt: ${errMsg}`);
|
|
99
|
+
return {
|
|
100
|
+
status: "failed",
|
|
101
|
+
result: JSON.stringify({ error: errMsg }),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=payment-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-handler.js","sourceRoot":"","sources":["../../src/billing/payment-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the billing / payment system.
|
|
3
|
+
*
|
|
4
|
+
* Stripe Checkout Sessions for recurring subscriptions.
|
|
5
|
+
* Plans are served from the backend via the payment_required heartbeat command.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* A plan delivered by the backend in the payment_required payload.
|
|
9
|
+
*/
|
|
10
|
+
export interface BillingPlan {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
amount: number;
|
|
14
|
+
currency: string;
|
|
15
|
+
description: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Payload carried by the `payment_required` heartbeat command.
|
|
19
|
+
* The backend determines when payment is needed and sends this,
|
|
20
|
+
* including the available plans from the billing_plans table.
|
|
21
|
+
*/
|
|
22
|
+
export interface PaymentRequiredPayload {
|
|
23
|
+
/** Optional message from backend to display to the user */
|
|
24
|
+
message?: string;
|
|
25
|
+
/** Available subscription plans (populated by the backend) */
|
|
26
|
+
plans: BillingPlan[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Callback data prefixes used in Telegram inline keyboard buttons.
|
|
30
|
+
*/
|
|
31
|
+
export declare const BILLING_CALLBACK_PREFIX = "billing:";
|
|
32
|
+
export declare const BILLING_PLAN_CALLBACK_PREFIX = "billing:plan:";
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/billing/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAClD,eAAO,MAAM,4BAA4B,kBAAkB,CAAC"}
|