@songsid/agend 2.3.4-beta.8 → 2.3.4
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/THIRD_PARTY_NOTICES.md +37 -0
- package/dist/agent-cli-instructions.md +1 -1
- package/dist/agent-credentials.d.ts +24 -0
- package/dist/agent-credentials.js +66 -0
- package/dist/agent-credentials.js.map +1 -0
- package/dist/agent-endpoint.d.ts +3 -1
- package/dist/agent-endpoint.js +13 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/auth-api.js +5 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/session-authorizations.d.ts +28 -4
- package/dist/authority/session-authorizations.js +63 -17
- package/dist/authority/session-authorizations.js.map +1 -1
- package/dist/backend/antigravity.js +3 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/codex-footer-hints.d.ts +4 -0
- package/dist/backend/codex-footer-hints.js +27 -0
- package/dist/backend/codex-footer-hints.js.map +1 -0
- package/dist/backend/codex-metadata.d.ts +14 -0
- package/dist/backend/codex-metadata.js +45 -0
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex-speed.d.ts +14 -0
- package/dist/backend/codex-speed.js +35 -0
- package/dist/backend/codex-speed.js.map +1 -0
- package/dist/backend/codex.js +17 -5
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/kiro.js +11 -1
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +5 -3
- package/dist/backend/muse.js.map +1 -1
- package/dist/cache-ledger.d.ts +95 -0
- package/dist/cache-ledger.js +276 -4
- package/dist/cache-ledger.js.map +1 -1
- package/dist/cache-service.d.ts +5 -0
- package/dist/cache-service.js +16 -4
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.js +11 -3
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +51 -0
- package/dist/channel/adapters/telegram.js +235 -17
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +1 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/config-validator.js +5 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +10 -0
- package/dist/cross-instance-notice.js +67 -5
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.d.ts +3 -0
- package/dist/daemon.js +11 -4
- package/dist/daemon.js.map +1 -1
- package/dist/export-import.d.ts +7 -0
- package/dist/export-import.js +44 -10
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -0
- package/dist/fleet-manager.d.ts +93 -4
- package/dist/fleet-manager.js +451 -39
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/concepts/SKILL.md +3 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +7 -2
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/instance-config-impact.js +2 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +6 -2
- package/dist/instance-lifecycle.js +11 -6
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instance-topic-delete.d.ts +77 -0
- package/dist/instance-topic-delete.js +123 -0
- package/dist/instance-topic-delete.js.map +1 -0
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.js +1 -1
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +33 -1
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +28 -0
- package/dist/log-service.js +29 -0
- package/dist/log-service.js.map +1 -1
- package/dist/log-steps.d.ts +4 -3
- package/dist/log-steps.js +32 -7
- package/dist/log-steps.js.map +1 -1
- package/dist/logger.d.ts +12 -0
- package/dist/logger.js +43 -1
- package/dist/logger.js.map +1 -1
- package/dist/missed-offline.d.ts +25 -0
- package/dist/missed-offline.js +79 -0
- package/dist/missed-offline.js.map +1 -0
- package/dist/needs-you-hub.d.ts +6 -1
- package/dist/needs-you-hub.js +30 -7
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +16 -2
- package/dist/needs-you.js +9 -1
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.js +3 -3
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.js +5 -2
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/scheduler/db.d.ts +2 -1
- package/dist/scheduler/db.js +23 -9
- package/dist/scheduler/db.js.map +1 -1
- package/dist/settings-api.d.ts +13 -0
- package/dist/settings-api.js +22 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +16 -1
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-instance-patch.js +27 -0
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/tool-progress.d.ts +2 -0
- package/dist/tool-progress.js +19 -3
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.js +4 -0
- package/dist/topic-commands.js.map +1 -1
- package/dist/ui/chat-md-strings.js +9 -0
- package/dist/ui/chat-strings.js +2 -2
- package/dist/ui/chat-thread.js +53 -3
- package/dist/ui/fleet-usage.js +90 -27
- package/dist/ui/panel-chat.js +5 -2
- package/dist/ui/panel-needs.js +13 -5
- package/dist/ui/preview-panel.js +78 -2
- package/dist/ui/settings-codex-copy.js +19 -0
- package/dist/ui/settings-dialogs.js +8 -0
- package/dist/ui/settings-model.js +16 -2
- package/dist/ui/settings-strings.js +2 -2
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app.css +19 -0
- package/dist/ui/shared/panel-view.js +77 -4
- package/dist/ui/shared/usage-dialog.js +18 -1
- package/dist/ui/shared/view-history.css +17 -0
- package/dist/ui/shared/view-history.js +438 -0
- package/dist/ui/shared/view-strings.js +16 -0
- package/dist/usage/capacity.d.ts +69 -0
- package/dist/usage/capacity.js +119 -0
- package/dist/usage/capacity.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +3 -0
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/profile-timeline.d.ts +16 -0
- package/dist/usage/profile-timeline.js +58 -0
- package/dist/usage/profile-timeline.js.map +1 -0
- package/dist/usage/quota-history.d.ts +43 -0
- package/dist/usage/quota-history.js +168 -0
- package/dist/usage/quota-history.js.map +1 -0
- package/dist/usage/usage-api.d.ts +31 -0
- package/dist/usage/usage-api.js +80 -1
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/usage-report.d.ts +25 -1
- package/dist/usage-report.js +55 -4
- package/dist/usage-report.js.map +1 -1
- package/dist/usage-rollup.d.ts +6 -1
- package/dist/usage-rollup.js +16 -4
- package/dist/usage-rollup.js.map +1 -1
- package/dist/view-api.d.ts +16 -0
- package/dist/view-api.js +100 -16
- package/dist/view-api.js.map +1 -1
- package/dist/view-history.d.ts +84 -0
- package/dist/view-history.js +116 -0
- package/dist/view-history.js.map +1 -0
- package/dist/web-api.d.ts +6 -0
- package/dist/web-api.js +8 -2
- package/dist/web-api.js.map +1 -1
- package/dist/web-session-authorization.d.ts +13 -2
- package/dist/web-session-authorization.js +10 -3
- package/dist/web-session-authorization.js.map +1 -1
- package/launcher/private-home.cjs +1 -1
- package/package.json +1 -1
package/dist/export-import.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The archive file, private from its first byte: created here, exclusively, 0600 (the umask can only narrow it), and
|
|
3
|
+
* never through a link. The archive holds the fleet's secrets (.env), so it must never exist readable by others, not
|
|
4
|
+
* even for the moment a chmod afterwards would leave. An existing destination — a file, a directory or a symlink — is
|
|
5
|
+
* refused, never replaced or followed.
|
|
6
|
+
*/
|
|
7
|
+
export declare function openPrivateArchive(path: string): number;
|
|
1
8
|
export declare function exportConfig(dataDir: string, outputPath: string | undefined, full: boolean): Promise<void>;
|
|
2
9
|
export declare function importConfig(dataDir: string, filePath: string): Promise<void>;
|
package/dist/export-import.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ensureAgendHome } from "./agend-home.js";
|
|
2
2
|
import { execFileSync } from "node:child_process";
|
|
3
3
|
import { t } from "./locale.js";
|
|
4
|
-
import { existsSync, statSync, copyFileSync, readFileSync, } from "node:fs";
|
|
4
|
+
import { existsSync, statSync, copyFileSync, readFileSync, openSync, closeSync, fsyncSync, unlinkSync, constants as fsConstants, } from "node:fs";
|
|
5
5
|
import { join, basename, resolve, sep as pathSep } from "node:path";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
const MINIMAL_FILES = ["fleet.yaml", ".env", "scheduler.db", "classicBot.yaml"];
|
|
@@ -13,6 +13,43 @@ const RUNTIME_EXCLUDES = [
|
|
|
13
13
|
"fleet.log",
|
|
14
14
|
"node_modules",
|
|
15
15
|
];
|
|
16
|
+
/**
|
|
17
|
+
* The archive file, private from its first byte: created here, exclusively, 0600 (the umask can only narrow it), and
|
|
18
|
+
* never through a link. The archive holds the fleet's secrets (.env), so it must never exist readable by others, not
|
|
19
|
+
* even for the moment a chmod afterwards would leave. An existing destination — a file, a directory or a symlink — is
|
|
20
|
+
* refused, never replaced or followed.
|
|
21
|
+
*/
|
|
22
|
+
export function openPrivateArchive(path) {
|
|
23
|
+
// O_CREAT | O_EXCL fails on any existing path — a symlink included, which it never follows (POSIX open(2)).
|
|
24
|
+
const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL;
|
|
25
|
+
try {
|
|
26
|
+
return openSync(path, flags, 0o600);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err.code === "EEXIST") {
|
|
30
|
+
console.error(`${path} already exists. Choose another output path, or move that file away first.`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** tar into the private archive (its stdout is the archive's fd); on failure the partial archive is removed. */
|
|
37
|
+
function tarInto(outFile, args) {
|
|
38
|
+
const fd = openPrivateArchive(outFile);
|
|
39
|
+
try {
|
|
40
|
+
execFileSync("tar", ["czf", "-", ...args], { stdio: ["ignore", fd, "pipe"] });
|
|
41
|
+
fsyncSync(fd);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
closeSync(fd);
|
|
45
|
+
try {
|
|
46
|
+
unlinkSync(outFile);
|
|
47
|
+
}
|
|
48
|
+
catch { /* already gone */ }
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
closeSync(fd);
|
|
52
|
+
}
|
|
16
53
|
// Reject tarballs above this size to blunt zip-bomb style exhaustion.
|
|
17
54
|
const MAX_IMPORT_BYTES = 500 * 1024 * 1024;
|
|
18
55
|
export async function exportConfig(dataDir, outputPath, full) {
|
|
@@ -20,14 +57,13 @@ export async function exportConfig(dataDir, outputPath, full) {
|
|
|
20
57
|
console.error(`Data directory not found: ${dataDir}`);
|
|
21
58
|
process.exit(1);
|
|
22
59
|
}
|
|
23
|
-
|
|
24
|
-
|
|
60
|
+
// The default name carries the time to the second (UTC), so a second export on the same day gets its own file
|
|
61
|
+
// instead of meeting an existing one (which openPrivateArchive refuses). An explicit path is used as given.
|
|
62
|
+
const stamp = new Date().toISOString().slice(0, 19).replace(/[-:]/g, "").replace("T", "-");
|
|
63
|
+
const outFile = resolve(outputPath ?? `agend-export-${stamp}.tar.gz`);
|
|
25
64
|
if (full) {
|
|
26
65
|
const excludeArgs = RUNTIME_EXCLUDES.flatMap((p) => ["--exclude", p]);
|
|
27
|
-
|
|
28
|
-
"czf", outFile, ...excludeArgs,
|
|
29
|
-
"-C", join(dataDir, ".."), basename(dataDir),
|
|
30
|
-
], { stdio: "pipe" });
|
|
66
|
+
tarInto(outFile, [...excludeArgs, "-C", join(dataDir, ".."), basename(dataDir)]);
|
|
31
67
|
}
|
|
32
68
|
else {
|
|
33
69
|
// Minimal: only config files that exist
|
|
@@ -37,9 +73,7 @@ export async function exportConfig(dataDir, outputPath, full) {
|
|
|
37
73
|
process.exit(1);
|
|
38
74
|
}
|
|
39
75
|
const fileArgs = existing.map((f) => `${basename(dataDir)}/${f}`);
|
|
40
|
-
|
|
41
|
-
"czf", outFile, "-C", join(dataDir, ".."), ...fileArgs,
|
|
42
|
-
], { stdio: "pipe" });
|
|
76
|
+
tarInto(outFile, ["-C", join(dataDir, ".."), ...fileArgs]);
|
|
43
77
|
}
|
|
44
78
|
const size = statSync(outFile).size;
|
|
45
79
|
const sizeStr = size < 1024
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../src/export-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,UAAU,EACV,QAAQ,EACR,YAAY,EAEZ,YAAY,
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../src/export-import.ts"],"names":[],"mappings":"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"}
|
package/dist/fleet-context.d.ts
CHANGED
|
@@ -120,6 +120,8 @@ export interface FleetContext {
|
|
|
120
120
|
saveFleetConfig(): void;
|
|
121
121
|
getInstanceDir(name: string): string;
|
|
122
122
|
createForumTopic(topicName: string, adapterId?: string): Promise<number | string>;
|
|
123
|
+
/** #3055: a topic with this id is being deleted right now (its agent was deleted); binding it waits until it is over. */
|
|
124
|
+
isTopicDeletionInFlight?(topicId: number | string): boolean;
|
|
123
125
|
removeInstance(name: string, authorization: ExplicitInstanceRemoval): Promise<void>;
|
|
124
126
|
/** Quarantine a provider-confirmed missing topic without deleting user data. */
|
|
125
127
|
quarantineMissingTopic(threadId: string, target: RouteTarget, evidence: {
|
package/dist/fleet-manager.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { FleetConfig, RawFleetConfig, InstanceConfig, WebVerifiedAuthorityC
|
|
|
15
15
|
import { type DeliveryStatus, type GuildEmoji, type GuildEmojiGroup, type ResolvedStatusEmojis } from "./status-emojis.js";
|
|
16
16
|
import { type RouteTarget } from "./fleet-context.js";
|
|
17
17
|
import { EventLog } from "./event-log.js";
|
|
18
|
+
import { type TopicDeleteOutcome } from "./instance-topic-delete.js";
|
|
18
19
|
import { BackendAvailabilityStore, type AvailabilityProbes, type BackendAvailability } from "./backend-availability.js";
|
|
19
20
|
import { AdapterWorld } from "./adapter-world.js";
|
|
20
21
|
import { CostGuard } from "./cost-guard.js";
|
|
@@ -61,6 +62,7 @@ export declare function applyTaskListCap<T extends {
|
|
|
61
62
|
} | T[];
|
|
62
63
|
import { type PublicPreviewForUi } from "./web-api.js";
|
|
63
64
|
import { type LogAnswer, type LogQuery } from "./log-service.js";
|
|
65
|
+
import { type ViewHistoryAnswer, type ViewHistoryQuery } from "./view-history.js";
|
|
64
66
|
import { WebChatHistory, type WebChatPost } from "./web-chat-history.js";
|
|
65
67
|
import { type WebEchoCopy } from "./web-reactions.js";
|
|
66
68
|
import { SeenUsers, type MentionNames, type MentionQuery } from "./web-mentions.js";
|
|
@@ -87,6 +89,7 @@ import { WebBackendLogins, type SignInTarget } from "./web-backend-login.js";
|
|
|
87
89
|
import { BrowserBackendSignIns } from "./browser-backend-signins.js";
|
|
88
90
|
import { type RawConfigPatch } from "./settings-api.js";
|
|
89
91
|
import { type AgentEndpointContext } from "./agent-endpoint.js";
|
|
92
|
+
import { AgentCredentials } from "./agent-credentials.js";
|
|
90
93
|
import { ClassicChannelManager } from "./classic-channel-manager.js";
|
|
91
94
|
import { type ExplicitInstanceRemoval } from "./instance-removal.js";
|
|
92
95
|
import { type SessionOomRetry } from "./session-oom-stop.js";
|
|
@@ -476,6 +479,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
476
479
|
private kiroMigrationRuns;
|
|
477
480
|
/** #1386 "Needs you": the list, its live chat messages and Acknowledge. Started with the fleet (finishStartup). */
|
|
478
481
|
private needsYou;
|
|
482
|
+
private missedOfflineStore;
|
|
479
483
|
private configHistory;
|
|
480
484
|
private configHistoryTimer;
|
|
481
485
|
private loadedFleetSource;
|
|
@@ -584,6 +588,9 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
584
588
|
private discordPresenceEagerPending;
|
|
585
589
|
private discordPresenceInFlight;
|
|
586
590
|
private static readonly DISCORD_PRESENCE_REFRESH_MS;
|
|
591
|
+
/** #3066 §1d: how often a fleet with no Discord bot reads the quota for its history (the user's choice: 30 min). */
|
|
592
|
+
static readonly QUOTA_BACKGROUND_READ_MS: number;
|
|
593
|
+
private quotaReadTimer;
|
|
587
594
|
/** Days of event/activity history to keep. */
|
|
588
595
|
private static readonly EVENT_LOG_RETENTION_DAYS;
|
|
589
596
|
private watchdogTimer;
|
|
@@ -884,6 +891,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
884
891
|
* startup-only key at startup. See checkStartupSignatureConsistency(). */
|
|
885
892
|
private fleetSignatureMismatch;
|
|
886
893
|
private healthServerListening;
|
|
894
|
+
private agentCredentialsCache?;
|
|
895
|
+
get agentCredentials(): AgentCredentials;
|
|
887
896
|
constructor(dataDir: string);
|
|
888
897
|
/** #1266: a reply's buttons — the store (reply-buttons.db) and what a click does. Created on first use. */
|
|
889
898
|
private replyButtonsCtl;
|
|
@@ -1214,6 +1223,11 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
1214
1223
|
/** Board 003648ac: a web /compact followed to its end, from the transcript the Log reads (none: nothing to follow). */
|
|
1215
1224
|
private compactWatchService;
|
|
1216
1225
|
private get compactWatch();
|
|
1226
|
+
/**
|
|
1227
|
+
* Claude history in the View: an instance's earlier conversation for its View, from the transcript the Log reads —
|
|
1228
|
+
* the View's route applied its own access rules first (view-api.ts); the Log's switch plays no part.
|
|
1229
|
+
*/
|
|
1230
|
+
viewHistory(name: string, q: ViewHistoryQuery): Promise<ViewHistoryAnswer | null>;
|
|
1217
1231
|
/** #1218: GET /ui/steps — an instance's steps, read on demand (null: no such instance). */
|
|
1218
1232
|
logSteps(name: string, q: LogQuery): Promise<LogAnswer | null>;
|
|
1219
1233
|
/**
|
|
@@ -2046,6 +2060,35 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
2046
2060
|
/** Start all instances from fleet config */
|
|
2047
2061
|
startAll(configPath: string): Promise<void>;
|
|
2048
2062
|
private startAllWithinDeadline;
|
|
2063
|
+
/**
|
|
2064
|
+
* #3066 §1d (the user: yes, every 30 min): the quota history (usage/quota-history.ts) records only the readings AgEnD
|
|
2065
|
+
* makes. A Discord bot's presence refresh reads every 15 min; without one, nothing reads while nobody looks. So, with no
|
|
2066
|
+
* Discord bot and while some account has a running agent, read every 30 min — the same cached read (its 5-minute TTL
|
|
2067
|
+
* still bounds the vendor calls), recorded like any other.
|
|
2068
|
+
*/
|
|
2069
|
+
private startQuotaBackgroundReads;
|
|
2070
|
+
/** #3066 §1: the latest estimates, by `provider\0metric` (what usage-api's lookup reads, synchronously). */
|
|
2071
|
+
private capacityEstimates;
|
|
2072
|
+
private capacityTimer;
|
|
2073
|
+
static readonly CAPACITY_REFRESH_MS: number;
|
|
2074
|
+
/**
|
|
2075
|
+
* #3066 §1: estimate each account's weekly 100% from the quota history (§1d) and the usage ledger's hours — both read
|
|
2076
|
+
* asynchronously, the arithmetic small (usage/capacity.ts). An account is its usage provider id ("claude",
|
|
2077
|
+
* "claude:hsinlin", "codex:yanxianchen"): its hours are the ledger sources of that backend under that credential profile
|
|
2078
|
+
* (Codex's "unrecorded" hours are no account's). A per-model weekly ("Sonnet (weekly)") counts only that model's tokens.
|
|
2079
|
+
*
|
|
2080
|
+
* Prism #3073: no estimate rather than a wrong one —
|
|
2081
|
+
* - a window is measured only where the ledger has its hours: kept (31 days) and scanned (`days.coverage`) for every
|
|
2082
|
+
* instance of the account's backend, and every instance whose hours count for it; the quota history goes back 12 weeks;
|
|
2083
|
+
* - a profile literally named "default", "unknown" or "unrecorded" (configured, on disk, or in the quota history) makes
|
|
2084
|
+
* those hours ambiguous: neither the host
|
|
2085
|
+
* account nor the named one is estimated (each would be credited the other's use, or lose its own);
|
|
2086
|
+
* - only a metric the vendor marks per-model (`scope: "model"`) is filtered by model; another named weekly pool
|
|
2087
|
+
* ("Luna Reserve (weekly)", Antigravity pools) is no model name and is not estimated.
|
|
2088
|
+
*/
|
|
2089
|
+
refreshCapacity(): Promise<number>;
|
|
2090
|
+
/** One background quota read, when nothing else reads (no Discord bot) and an account has a running agent. */
|
|
2091
|
+
backgroundQuotaRead(): Promise<boolean>;
|
|
2049
2092
|
/** Keep Discord profile activity aligned with the same cached usage source as /usage. */
|
|
2050
2093
|
private startDiscordUsagePresence;
|
|
2051
2094
|
/**
|
|
@@ -2271,6 +2314,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
2271
2314
|
* copies retain their permissive handling when that identity is unknown.
|
|
2272
2315
|
*/
|
|
2273
2316
|
private isOwnerCommandCopy;
|
|
2317
|
+
/** File a Telegram update that was too old to inject; Needs you lists it until Acknowledge. */
|
|
2318
|
+
private recordMissedOffline;
|
|
2274
2319
|
/**
|
|
2275
2320
|
* #1085: coincident topic numbers must not route across Telegram groups.
|
|
2276
2321
|
*/
|
|
@@ -2428,6 +2473,12 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
2428
2473
|
* of the schedule response on IPC.
|
|
2429
2474
|
*/
|
|
2430
2475
|
private performScheduleOp;
|
|
2476
|
+
/**
|
|
2477
|
+
* `post_decision` with `supersedes` changes a decision someone else may have recorded (it stops being active): the
|
|
2478
|
+
* same permission as `update_decision`, asked through the same live check (tool set + dashboard switches), on both
|
|
2479
|
+
* create paths. An empty or absent value supersedes nothing and needs nothing; anything else must be an id.
|
|
2480
|
+
*/
|
|
2481
|
+
private decisionSupersedes;
|
|
2431
2482
|
handleDecisionCrudHttp(instance: string, op: string, args: Record<string, unknown>): Promise<unknown>;
|
|
2432
2483
|
handleTaskCrudHttp(instance: string, args: Record<string, unknown>): Promise<unknown>;
|
|
2433
2484
|
handleSetDisplayNameHttp(instance: string, name: string): Promise<unknown>;
|
|
@@ -2443,7 +2494,41 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
2443
2494
|
private handleTaskCrud;
|
|
2444
2495
|
/** Create a forum topic via the adapter. Returns the message_thread_id. */
|
|
2445
2496
|
createForumTopic(topicName: string, adapterId?: string): Promise<number | string>;
|
|
2446
|
-
|
|
2497
|
+
/**
|
|
2498
|
+
* Delete an agent and, unless asked not to, its own chat topic (user decision: by default). The topic is planned
|
|
2499
|
+
* before the removal (its id and bot go with the fleet.yaml entry) and deleted through the agent's OWN bot after it;
|
|
2500
|
+
* the outcome is the platform's answer (instance-topic-delete.ts). A topic that cannot go never fails the removal.
|
|
2501
|
+
*/
|
|
2502
|
+
removeInstanceAndTopic(name: string, authorization: ExplicitInstanceRemoval, opts: {
|
|
2503
|
+
deleteTopic: boolean;
|
|
2504
|
+
execution?: SettingsExecution;
|
|
2505
|
+
}): Promise<TopicDeleteOutcome>;
|
|
2506
|
+
/** #3055: destinations whose platform deletion is running now; a binding to one waits until it is over. */
|
|
2507
|
+
private readonly topicDeletionsInFlight;
|
|
2508
|
+
/** True while a topic with this id is being deleted on any connection (a new binding of it is refused meanwhile). */
|
|
2509
|
+
isTopicDeletionInFlight(topicId: number | string): boolean;
|
|
2510
|
+
/**
|
|
2511
|
+
* #3055 review r2 (Prism P1-3): would this instance config bind a topic whose deletion is running now? Compared by
|
|
2512
|
+
* physical destination, so the same thread number in another Telegram group is not held. Settings asks it at commit.
|
|
2513
|
+
*/
|
|
2514
|
+
topicBindingInFlight(inst: {
|
|
2515
|
+
channel_id?: unknown;
|
|
2516
|
+
topic_id?: unknown;
|
|
2517
|
+
}): boolean;
|
|
2518
|
+
/** Any topic deletion running now (a connection's group or General may not be re-pointed meanwhile). */
|
|
2519
|
+
topicDeletionPending(): boolean;
|
|
2520
|
+
/** The physical destination of `topicId` on the bot `adapterId`. */
|
|
2521
|
+
private destinationFor;
|
|
2522
|
+
/** The adapter of the bot `adapterId` names — never a substitute for a bot that is not there. */
|
|
2523
|
+
private instanceTopicAdapter;
|
|
2524
|
+
/**
|
|
2525
|
+
* Topic ownership by physical destination (#3055 review, Prism P1): an instance's topic is where its bot's platform
|
|
2526
|
+
* puts it (a Telegram group + thread, a Discord channel), so two bots in one group, or two instances on one
|
|
2527
|
+
* channel, are seen to share it; and every connection's own General is protected, with or without a General agent.
|
|
2528
|
+
*/
|
|
2529
|
+
private topicOwnership;
|
|
2530
|
+
/** What deleting `name`'s topic would act on: its own bot only — a bot that is not there is never substituted. */
|
|
2531
|
+
private planInstanceTopicDelete;
|
|
2447
2532
|
getForumTopicDeleter(adapterId?: string): ((topicId: number | string) => Promise<void>) | null;
|
|
2448
2533
|
private topicCleanupTimer;
|
|
2449
2534
|
private sessionPruneTimer;
|
|
@@ -3429,9 +3514,11 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
3429
3514
|
* Make a tool summary safe to paste into a channel message.
|
|
3430
3515
|
*
|
|
3431
3516
|
* The text is agent-controlled (it is built from tool inputs — file paths,
|
|
3432
|
-
* shell commands), so it gets flattened to one line, capped,
|
|
3433
|
-
* the two Discord mass-mention triggers.
|
|
3434
|
-
*
|
|
3517
|
+
* shell commands), so it gets flattened to one line, secrets masked, capped,
|
|
3518
|
+
* and stripped of the two Discord mass-mention triggers. Masking comes BEFORE
|
|
3519
|
+
* the cap: a cap can cut a mask's context but must never be what hides (or
|
|
3520
|
+
* fails to hide) a secret. Neither channel renders it with a parse mode, so no
|
|
3521
|
+
* markup escaping is needed beyond that.
|
|
3435
3522
|
*/
|
|
3436
3523
|
private static sanitizeActivity;
|
|
3437
3524
|
/**
|
|
@@ -3471,6 +3558,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
3471
3558
|
*/
|
|
3472
3559
|
/** Configured threshold before elapsed time appears, in ms. */
|
|
3473
3560
|
progressMinElapsedMs(): number;
|
|
3561
|
+
/** M-2391: when the instance's live (not retiring) bubble started — the current turn's start — or undefined. */
|
|
3562
|
+
private liveButtonStart;
|
|
3474
3563
|
private startProgressTicker;
|
|
3475
3564
|
/**
|
|
3476
3565
|
* After a reply: give the instance REPLY_RETIRE_GRACE_MS to resume working; if
|