aibroker 0.45.0 → 0.47.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget-cli.d.ts","sourceRoot":"","sources":["../../src/daemon/budget-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"budget-cli.d.ts","sourceRoot":"","sources":["../../src/daemon/budget-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgHH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6E7D"}
|
|
@@ -15,9 +15,11 @@
|
|
|
15
15
|
* this a week ago. `aibroker budget off` is that; a node -e incantation with a
|
|
16
16
|
* quoted path in it is not.
|
|
17
17
|
*/
|
|
18
|
+
import { execFileSync } from "node:child_process";
|
|
18
19
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
19
20
|
import { homedir } from "node:os";
|
|
20
|
-
import { join } from "node:path";
|
|
21
|
+
import { dirname, join } from "node:path";
|
|
22
|
+
import { fileURLToPath } from "node:url";
|
|
21
23
|
const FILE = join(homedir(), ".aibroker", "budget-stop.json");
|
|
22
24
|
function read() {
|
|
23
25
|
try {
|
|
@@ -59,6 +61,60 @@ function show() {
|
|
|
59
61
|
console.log(" pauses its arming, and refuses new prompts everywhere until the reset.");
|
|
60
62
|
console.log(" Sessions sitting idle are left alone.");
|
|
61
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Act on the ceiling now rather than at the next tick.
|
|
66
|
+
*
|
|
67
|
+
* Switching a limit on and watching nothing happen for a quarter of an hour is
|
|
68
|
+
* indistinguishable from a limit that does not work — which is exactly how this
|
|
69
|
+
* looked the first time it was tried. The periodic run is what makes it
|
|
70
|
+
* reliable; running it here is what makes it believable, and it is the same
|
|
71
|
+
* script either way, so there is no second code path to keep honest.
|
|
72
|
+
*/
|
|
73
|
+
/**
|
|
74
|
+
* Put back to work anything the ceiling stood down, and forget the record.
|
|
75
|
+
*
|
|
76
|
+
* `resume` alone lifts the pause without giving the session anything to do —
|
|
77
|
+
* it sits at a prompt holding an objective nobody has handed it. `now` is what
|
|
78
|
+
* makes the restart real, and it re-establishes the goal the stand-down cleared.
|
|
79
|
+
*/
|
|
80
|
+
function releasePaused() {
|
|
81
|
+
const state = join(homedir(), ".aibroker", "budget-brownout.json");
|
|
82
|
+
let names = [];
|
|
83
|
+
try {
|
|
84
|
+
names = JSON.parse(readFileSync(state, "utf8")).pausedNames ?? [];
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const cli = join(dirname(fileURLToPath(import.meta.url)), "cli.js");
|
|
90
|
+
for (const name of names) {
|
|
91
|
+
for (const verb of ["resume", "now"]) {
|
|
92
|
+
try {
|
|
93
|
+
execFileSync(process.execPath, [cli, "manage", name, verb], { encoding: "utf8", timeout: 90_000 });
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
console.error(` could not ${verb} ${name} — do it by hand`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
console.log(` ${name} released and armed.`);
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
writeFileSync(state, JSON.stringify({ releasedAt: new Date().toISOString(), pausedNames: [] }, null, 2));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* the record is a convenience; the sessions are what matter */
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function checkNow() {
|
|
109
|
+
const script = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "tools", "budget-brownout.mjs");
|
|
110
|
+
try {
|
|
111
|
+
const out = execFileSync(process.execPath, [script], { encoding: "utf8", timeout: 300_000 }).trim();
|
|
112
|
+
console.log(out ? out : " nothing to do at the moment.");
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.error(` the check itself failed: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
62
118
|
export async function runBudget(args) {
|
|
63
119
|
const [action, value] = args;
|
|
64
120
|
const cfg = read();
|
|
@@ -67,6 +123,17 @@ export async function runBudget(args) {
|
|
|
67
123
|
return;
|
|
68
124
|
}
|
|
69
125
|
if (action === "off" || action === "ignore") {
|
|
126
|
+
/*
|
|
127
|
+
* Release before switching off, in that order.
|
|
128
|
+
*
|
|
129
|
+
* Off means "stop protecting the budget", never "leave whatever you already
|
|
130
|
+
* stopped stopped". The periodic script exits immediately when the ceiling
|
|
131
|
+
* is disabled, so anything it had paused would sit paused for good — the
|
|
132
|
+
* operator lifts the limit, watches nothing come back, and reasonably
|
|
133
|
+
* concludes the whole mechanism is broken. Doing it here rather than there
|
|
134
|
+
* is deliberate: this is the moment the intention is expressed.
|
|
135
|
+
*/
|
|
136
|
+
releasePaused();
|
|
70
137
|
write({ ...cfg, enabled: false });
|
|
71
138
|
console.log("Ceiling off. Nothing will be stopped, whatever the percentage says.");
|
|
72
139
|
console.log("Back on with: aibroker budget on");
|
|
@@ -74,7 +141,12 @@ export async function runBudget(args) {
|
|
|
74
141
|
}
|
|
75
142
|
if (action === "on") {
|
|
76
143
|
write({ ...cfg, enabled: true, ceilingPercent: cfg.ceilingPercent ?? 96 });
|
|
77
|
-
console.log(`Ceiling on at ${cfg.ceilingPercent ?? 96}
|
|
144
|
+
console.log(`Ceiling on at ${cfg.ceilingPercent ?? 96}%. Checking now:`);
|
|
145
|
+
checkNow();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (action === "check") {
|
|
149
|
+
checkNow();
|
|
78
150
|
return;
|
|
79
151
|
}
|
|
80
152
|
if (action === "ceiling") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget-cli.js","sourceRoot":"","sources":["../../src/daemon/budget-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"budget-cli.js","sourceRoot":"","sources":["../../src/daemon/budget-cli.ts"],"names":[],"mappings":"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"}
|