@songsid/agend 2.1.4-beta.2 → 2.1.4-beta.21
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/dist/agent-endpoint.js +1 -1
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/antigravity.d.ts +1 -0
- package/dist/backend/antigravity.js +4 -0
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.js +23 -2
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.d.ts +17 -0
- package/dist/backend/codex.js +122 -7
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/kiro.d.ts +1 -0
- package/dist/backend/kiro.js +14 -0
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/opencode.d.ts +27 -11
- package/dist/backend/opencode.js +48 -37
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/types.d.ts +14 -0
- package/dist/backend/types.js +7 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.js +76 -25
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.js +5 -3
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +6 -20
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.js +4 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +1 -1
- package/dist/classic-channel-manager.d.ts +40 -3
- package/dist/classic-channel-manager.js +218 -31
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +159 -36
- package/dist/cli.js.map +1 -1
- package/dist/completion-install.d.ts +70 -0
- package/dist/completion-install.js +152 -0
- package/dist/completion-install.js.map +1 -0
- package/dist/completion.d.ts +7 -1
- package/dist/completion.js +14 -4
- package/dist/completion.js.map +1 -1
- package/dist/config-validator.js +38 -7
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +171 -5
- package/dist/daemon.js +696 -82
- package/dist/daemon.js.map +1 -1
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.js +216 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fleet-context.d.ts +16 -0
- package/dist/fleet-manager.d.ts +233 -10
- package/dist/fleet-manager.js +1828 -493
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-slim.d.ts +10 -0
- package/dist/fleet-yaml-slim.js +59 -0
- package/dist/fleet-yaml-slim.js.map +1 -0
- package/dist/general-knowledge/skills/backend-providers/SKILL.md +114 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +3 -1
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +52 -0
- package/dist/general-knowledge/skills/development-workflow/SKILL.md +28 -0
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +1 -0
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +1 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +64 -16
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -0
- package/dist/general-knowledge/skills/scheduling/SKILL.md +1 -0
- package/dist/general-knowledge/skills/session-management/SKILL.md +1 -0
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -0
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +30 -0
- package/dist/instance-lifecycle.d.ts +8 -0
- package/dist/instance-lifecycle.js +46 -25
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +12 -0
- package/dist/instructions.js +33 -0
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +656 -220
- package/dist/locale.js.map +1 -1
- package/dist/outbound-handlers.d.ts +8 -0
- package/dist/outbound-handlers.js +44 -5
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +5 -0
- package/dist/outbound-schemas.js +7 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/quickstart.js +25 -0
- package/dist/quickstart.js.map +1 -1
- package/dist/restart-progress.d.ts +9 -1
- package/dist/restart-progress.js +30 -6
- package/dist/restart-progress.js.map +1 -1
- package/dist/scheduler/db.d.ts +5 -0
- package/dist/scheduler/db.js +35 -0
- package/dist/scheduler/db.js.map +1 -1
- package/dist/service-installer.d.ts +11 -0
- package/dist/service-installer.js +84 -18
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +1 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/tips.d.ts +39 -0
- package/dist/tips.js +351 -0
- package/dist/tips.js.map +1 -0
- package/dist/tool-progress.d.ts +40 -0
- package/dist/tool-progress.js +289 -0
- package/dist/tool-progress.js.map +1 -0
- package/dist/topic-commands.d.ts +28 -4
- package/dist/topic-commands.js +227 -65
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.d.ts +15 -2
- package/dist/transcript-monitor.js +63 -17
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +106 -0
- package/dist/transcript-sources.js +428 -0
- package/dist/transcript-sources.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/ui/dashboard.html +55 -32
- package/dist/ui/settings.html +120 -51
- package/dist/ui/view.html +23 -15
- package/dist/update-marker.d.ts +30 -0
- package/dist/update-marker.js +71 -20
- package/dist/update-marker.js.map +1 -1
- package/dist/update-progress.d.ts +6 -0
- package/dist/update-progress.js +29 -0
- package/dist/update-progress.js.map +1 -0
- package/dist/usage/usage-api.d.ts +8 -2
- package/dist/usage/usage-api.js +24 -3
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/workflow-templates/default.md +2 -1
- package/package.json +1 -1
package/dist/update-marker.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* machine reboots) must not leave the fleet permanently unable to report a real
|
|
14
14
|
* crash — a stale marker is ignored, and the next fleet startup deletes it.
|
|
15
15
|
*/
|
|
16
|
-
import { existsSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
/**
|
|
19
19
|
* How long a marker is believed. Long enough for a slow npm install plus a
|
|
@@ -25,16 +25,75 @@ const FILE = "update-in-progress.json";
|
|
|
25
25
|
function markerPath(dataDir) {
|
|
26
26
|
return join(dataDir, FILE);
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
function readMarker(dataDir) {
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(readFileSync(markerPath(dataDir), "utf-8"));
|
|
31
|
+
if (typeof parsed.startedAt !== "number" || !Number.isFinite(parsed.startedAt))
|
|
32
|
+
return null;
|
|
33
|
+
if (typeof parsed.pid !== "number" || !Number.isFinite(parsed.pid))
|
|
34
|
+
return null;
|
|
35
|
+
return parsed;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function writeMarker(dataDir, marker) {
|
|
42
|
+
const path = markerPath(dataDir);
|
|
43
|
+
const temp = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
30
44
|
try {
|
|
31
|
-
writeFileSync(
|
|
45
|
+
writeFileSync(temp, JSON.stringify(marker), { mode: 0o600 });
|
|
46
|
+
renameSync(temp, path);
|
|
47
|
+
return true;
|
|
32
48
|
}
|
|
33
49
|
catch {
|
|
34
|
-
|
|
35
|
-
|
|
50
|
+
try {
|
|
51
|
+
unlinkSync(temp);
|
|
52
|
+
}
|
|
53
|
+
catch { /* best effort */ }
|
|
54
|
+
return false;
|
|
36
55
|
}
|
|
37
56
|
}
|
|
57
|
+
/** Persist the channel message that `/update` will edit across process restart. */
|
|
58
|
+
export function beginUpdateProgress(dataDir, target, now = Date.now()) {
|
|
59
|
+
writeMarker(dataDir, {
|
|
60
|
+
startedAt: now,
|
|
61
|
+
pid: process.pid,
|
|
62
|
+
progress: { stage: "preparing", target },
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/** Read the live progress contract shared by the old CLI and the new fleet. */
|
|
66
|
+
export function readUpdateProgress(dataDir) {
|
|
67
|
+
const marker = readMarker(dataDir);
|
|
68
|
+
if (!marker?.progress?.target?.messageId || !marker.progress.target.adapterId)
|
|
69
|
+
return null;
|
|
70
|
+
return marker;
|
|
71
|
+
}
|
|
72
|
+
/** Advance the cross-process progress state without losing its message target. */
|
|
73
|
+
export function setUpdateProgressStage(dataDir, stage, details = {}) {
|
|
74
|
+
const marker = readMarker(dataDir);
|
|
75
|
+
if (!marker?.progress)
|
|
76
|
+
return false;
|
|
77
|
+
const previousStage = marker.progress.stage;
|
|
78
|
+
marker.pid = process.pid;
|
|
79
|
+
marker.progress = {
|
|
80
|
+
...marker.progress,
|
|
81
|
+
stage,
|
|
82
|
+
...(details.version !== undefined ? { version: details.version } : {}),
|
|
83
|
+
...(details.error !== undefined ? { error: details.error.replace(/\s+/g, " ").trim().slice(0, 300) } : {}),
|
|
84
|
+
...(stage === "failed" ? { failedStage: previousStage } : {}),
|
|
85
|
+
};
|
|
86
|
+
return writeMarker(dataDir, marker);
|
|
87
|
+
}
|
|
88
|
+
/** Called by `agend update` before it touches anything. */
|
|
89
|
+
export function markUpdateInProgress(dataDir, now = Date.now()) {
|
|
90
|
+
const existing = readMarker(dataDir);
|
|
91
|
+
writeMarker(dataDir, {
|
|
92
|
+
startedAt: existing?.startedAt ?? now,
|
|
93
|
+
pid: process.pid,
|
|
94
|
+
...(existing?.progress ? { progress: existing.progress } : {}),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
38
97
|
/** Called when the update finishes or gives up, and by the new fleet on startup. */
|
|
39
98
|
export function clearUpdateMarker(dataDir) {
|
|
40
99
|
try {
|
|
@@ -47,23 +106,15 @@ export function clearUpdateMarker(dataDir) {
|
|
|
47
106
|
* abandoned marker must not silence real incidents forever.
|
|
48
107
|
*/
|
|
49
108
|
export function isUpdateInProgress(dataDir, now = Date.now()) {
|
|
50
|
-
|
|
51
|
-
if (!existsSync(path))
|
|
109
|
+
if (!existsSync(markerPath(dataDir)))
|
|
52
110
|
return false;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
startedAt = parsed.startedAt;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
// Truncated or hand-edited: treat as unknown age rather than as fresh.
|
|
62
|
-
}
|
|
63
|
-
if (startedAt === null)
|
|
111
|
+
const marker = readMarker(dataDir);
|
|
112
|
+
if (!marker)
|
|
113
|
+
return false;
|
|
114
|
+
if (marker.progress?.stage === "failed" || marker.progress?.stage === "complete")
|
|
64
115
|
return false;
|
|
65
116
|
// A clock jump backwards would otherwise make a marker look infinitely fresh.
|
|
66
|
-
const age = now - startedAt;
|
|
117
|
+
const age = now - marker.startedAt;
|
|
67
118
|
return age >= 0 && age < UPDATE_MARKER_MAX_AGE_MS;
|
|
68
119
|
}
|
|
69
120
|
//# sourceMappingURL=update-marker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-marker.js","sourceRoot":"","sources":["../src/update-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"update-marker.js","sourceRoot":"","sources":["../src/update-marker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { UpdateMarker } from "./update-marker.js";
|
|
2
|
+
export declare function updateElapsedSeconds(startedAt: number, now?: number): number;
|
|
3
|
+
/** Render the persisted CLI-side stage while the old fleet is still alive. */
|
|
4
|
+
export declare function formatUpdateProgress(marker: UpdateMarker & {
|
|
5
|
+
progress: NonNullable<UpdateMarker["progress"]>;
|
|
6
|
+
}, now?: number): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { t } from "./locale.js";
|
|
2
|
+
export function updateElapsedSeconds(startedAt, now = Date.now()) {
|
|
3
|
+
return Math.max(0, Math.floor((now - startedAt) / 1000));
|
|
4
|
+
}
|
|
5
|
+
function stageLabel(stage) {
|
|
6
|
+
return t(`update.stage.${stage ?? "preparing"}`);
|
|
7
|
+
}
|
|
8
|
+
/** Render the persisted CLI-side stage while the old fleet is still alive. */
|
|
9
|
+
export function formatUpdateProgress(marker, now = Date.now()) {
|
|
10
|
+
const elapsed = updateElapsedSeconds(marker.startedAt, now);
|
|
11
|
+
const progress = marker.progress;
|
|
12
|
+
switch (progress.stage) {
|
|
13
|
+
case "preparing":
|
|
14
|
+
return t("update.progress.preparing", elapsed);
|
|
15
|
+
case "downloading":
|
|
16
|
+
return t("update.progress.downloading", elapsed);
|
|
17
|
+
case "installed":
|
|
18
|
+
return t("update.progress.installed", progress.version ?? "?", elapsed);
|
|
19
|
+
case "stopping":
|
|
20
|
+
return t("update.progress.stopping", elapsed);
|
|
21
|
+
case "starting":
|
|
22
|
+
return t("update.progress.starting", elapsed);
|
|
23
|
+
case "complete":
|
|
24
|
+
return t("update.progress.already_current", progress.version ?? "?", elapsed);
|
|
25
|
+
case "failed":
|
|
26
|
+
return t("update.progress.failed", stageLabel(progress.failedStage), progress.error ?? "unknown error", elapsed);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=update-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-progress.js","sourceRoot":"","sources":["../src/update-progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAGhC,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,KAAsC;IACxD,OAAO,CAAC,CAAC,gBAAgB,KAAK,IAAI,WAAW,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,MAA0E,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC/H,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,WAAW;YACd,OAAO,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,aAAa;YAChB,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,WAAW;YACd,OAAO,CAAC,CAAC,2BAA2B,EAAE,QAAQ,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1E,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QAChD,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QAChD,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,iCAAiC,EAAE,QAAQ,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QAChF,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,wBAAwB,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,eAAe,EAAE,OAAO,CAAC,CAAC;IACrH,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* AI usage HTTP API.
|
|
3
3
|
*
|
|
4
4
|
* GET /api/ai-usage → { fetchedAt, providers: [...] } — live subscription
|
|
5
|
-
* usage for
|
|
5
|
+
* usage for providers used by running or paused instances (see providers.ts).
|
|
6
6
|
*
|
|
7
7
|
* Auth: read-only GET, open like the other /view data routes (the caller's
|
|
8
8
|
* global token gate exempts isUsagePath, mirroring isViewPath). Server binds
|
|
@@ -18,11 +18,17 @@ import { type ProviderUsage } from "./providers.js";
|
|
|
18
18
|
export interface UsageApiContext {
|
|
19
19
|
readonly fleetConfig: FleetConfig | null;
|
|
20
20
|
readonly logger: Logger;
|
|
21
|
+
/** Providers used by running or paused fleet/Classic instances. */
|
|
22
|
+
getActiveUsageProviderIds?(): ReadonlySet<string>;
|
|
21
23
|
}
|
|
22
24
|
export type UsagePayload = {
|
|
23
25
|
fetchedAt: string;
|
|
24
26
|
providers: ProviderUsage[];
|
|
25
27
|
};
|
|
28
|
+
/** Map runtime backend names to the subscription provider row they consume. */
|
|
29
|
+
export declare function usageProviderIdForBackend(backend: string | undefined): string | null;
|
|
30
|
+
/** Filter a cached all-provider snapshot without mutating the shared cache. */
|
|
31
|
+
export declare function filterUsageProviders(payload: UsagePayload, providerIds?: Iterable<string>): UsagePayload;
|
|
26
32
|
export declare function setUsageFetcherForTests(fn: (() => Promise<UsagePayload>) | null): void;
|
|
27
33
|
/**
|
|
28
34
|
* The same cached snapshot the HTTP route serves, for in-process callers: the
|
|
@@ -30,7 +36,7 @@ export declare function setUsageFetcherForTests(fn: (() => Promise<UsagePayload>
|
|
|
30
36
|
* surfaces, because the 5-minute TTL exists to protect vendor rate limits and a
|
|
31
37
|
* second entry point that bypassed it would defeat that.
|
|
32
38
|
*/
|
|
33
|
-
export declare function getUsageSnapshot(force?: boolean): Promise<UsagePayload>;
|
|
39
|
+
export declare function getUsageSnapshot(force?: boolean, providerIds?: Iterable<string>): Promise<UsagePayload>;
|
|
34
40
|
/**
|
|
35
41
|
* Render a usage payload as one compact chat message.
|
|
36
42
|
*
|
package/dist/usage/usage-api.js
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import { fetchAllUsage } from "./providers.js";
|
|
2
|
+
/** Map runtime backend names to the subscription provider row they consume. */
|
|
3
|
+
export function usageProviderIdForBackend(backend) {
|
|
4
|
+
switch (backend) {
|
|
5
|
+
case "claude-code": return "claude";
|
|
6
|
+
case "codex": return "codex";
|
|
7
|
+
case "grok": return "grok";
|
|
8
|
+
case "kiro-cli": return "kiro";
|
|
9
|
+
case "antigravity": return "antigravity";
|
|
10
|
+
default: return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** Filter a cached all-provider snapshot without mutating the shared cache. */
|
|
14
|
+
export function filterUsageProviders(payload, providerIds) {
|
|
15
|
+
if (!providerIds)
|
|
16
|
+
return payload;
|
|
17
|
+
const active = providerIds instanceof Set ? providerIds : new Set(providerIds);
|
|
18
|
+
return { ...payload, providers: payload.providers.filter(provider => active.has(provider.id)) };
|
|
19
|
+
}
|
|
2
20
|
const CACHE_MS = 5 * 60 * 1000;
|
|
3
21
|
/** Token rollover is routine and normally heals within seconds. */
|
|
4
22
|
const TRANSIENT_CACHE_MS = 30 * 1000;
|
|
@@ -112,8 +130,8 @@ async function usage(force) {
|
|
|
112
130
|
* surfaces, because the 5-minute TTL exists to protect vendor rate limits and a
|
|
113
131
|
* second entry point that bypassed it would defeat that.
|
|
114
132
|
*/
|
|
115
|
-
export function getUsageSnapshot(force = false) {
|
|
116
|
-
return usage(force);
|
|
133
|
+
export async function getUsageSnapshot(force = false, providerIds) {
|
|
134
|
+
return filterUsageProviders(await usage(force), providerIds);
|
|
117
135
|
}
|
|
118
136
|
/**
|
|
119
137
|
* Render a usage payload as one compact chat message.
|
|
@@ -125,6 +143,9 @@ export function getUsageSnapshot(force = false) {
|
|
|
125
143
|
*/
|
|
126
144
|
export function formatUsageSummary(payload) {
|
|
127
145
|
const lines = ["📊 AI subscription usage"];
|
|
146
|
+
if (payload.providers.length === 0) {
|
|
147
|
+
lines.push("No active backends with usage tracking");
|
|
148
|
+
}
|
|
128
149
|
for (const provider of payload.providers) {
|
|
129
150
|
const name = provider.plan ? `${provider.name} (${provider.plan})` : provider.name;
|
|
130
151
|
if (provider.status === "no-credentials") {
|
|
@@ -186,7 +207,7 @@ export function handleUsageRequest(req, res, url, ctx) {
|
|
|
186
207
|
json(res, 405, { error: "method not allowed" });
|
|
187
208
|
return true;
|
|
188
209
|
}
|
|
189
|
-
|
|
210
|
+
getUsageSnapshot(url.searchParams.has("force"), ctx.getActiveUsageProviderIds?.())
|
|
190
211
|
.then(payload => json(res, 200, payload))
|
|
191
212
|
.catch(err => {
|
|
192
213
|
ctx.logger.debug({ err }, "ai-usage fetch failed");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-api.js","sourceRoot":"","sources":["../../src/usage/usage-api.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAwC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"usage-api.js","sourceRoot":"","sources":["../../src/usage/usage-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,8 @@ Use the **Task Board** (`task` tool) for multi-step work:
|
|
|
24
24
|
|
|
25
25
|
## Context Protection
|
|
26
26
|
|
|
27
|
-
- **Images**:
|
|
27
|
+
- **Images**: Use your CLI's built-in subagent/task feature to read images (saves main context). Do NOT use `create_instance` or `delegate_task` for this.
|
|
28
|
+
- **Reactions**: When reacting to messages, avoid these AgEnD system emojis: 👀 ⏳ ✅ ❌ (used for delivery status). Use other emojis instead (e.g. 👍 🎉 for acknowledgment).
|
|
28
29
|
- **Large searches**: use subagents (Agent tool) instead of reading many files directly
|
|
29
30
|
- **Big codebases**: glob/grep for specific targets, don't read entire directories
|
|
30
31
|
- **Long conversations**: summarize decisions into Shared Decisions before context fills up
|