@songsid/agend 2.3.0-beta.16 → 2.3.0-beta.18
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 +1 -1
- package/README.zh-TW.md +1 -1
- package/dist/backend/claude-code.js +13 -4
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.js +15 -2
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend-command.d.ts +2 -0
- package/dist/backend-command.js +3 -1
- package/dist/backend-command.js.map +1 -1
- package/dist/bug-report-cli.d.ts +30 -0
- package/dist/bug-report-cli.js +138 -0
- package/dist/bug-report-cli.js.map +1 -0
- package/dist/bug-report.d.ts +47 -0
- package/dist/bug-report.js +136 -0
- package/dist/bug-report.js.map +1 -0
- package/dist/channel/mcp-tools.js +1 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/cli.js +93 -8
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.d.ts +6 -0
- package/dist/config-validator.js +13 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/daemon.d.ts +14 -1
- package/dist/daemon.js +59 -3
- package/dist/daemon.js.map +1 -1
- package/dist/diagnostic-redaction.d.ts +10 -0
- package/dist/diagnostic-redaction.js +167 -0
- package/dist/diagnostic-redaction.js.map +1 -0
- package/dist/fleet-manager.d.ts +18 -0
- package/dist/fleet-manager.js +109 -8
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/bug-report/SKILL.md +31 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +22 -1
- package/dist/instance-lifecycle.d.ts +8 -1
- package/dist/instance-lifecycle.js +68 -12
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/locale.js +55 -2
- package/dist/locale.js.map +1 -1
- package/dist/login-controller.d.ts +45 -0
- package/dist/login-controller.js +66 -3
- package/dist/login-controller.js.map +1 -1
- package/dist/ls-attach-resolve.d.ts +3 -2
- package/dist/ls-attach-resolve.js +10 -4
- package/dist/ls-attach-resolve.js.map +1 -1
- package/dist/ls-rows.d.ts +12 -0
- package/dist/ls-rows.js +82 -3
- package/dist/ls-rows.js.map +1 -1
- package/dist/needs-you.d.ts +10 -0
- package/dist/needs-you.js +2 -1
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.js +31 -5
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/quickstart-api.d.ts +9 -0
- package/dist/quickstart-api.js +82 -0
- package/dist/quickstart-api.js.map +1 -1
- package/dist/service-installer.js +12 -0
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-effect.js +15 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +23 -7
- package/dist/setup-form.js.map +1 -1
- package/dist/ui/backend-signin.js +297 -0
- package/dist/ui/chat-msg-actions.js +176 -0
- package/dist/ui/chat-store.js +33 -3
- package/dist/ui/chat-strings.js +8 -2
- package/dist/ui/chat-thread.js +44 -2
- package/dist/ui/panel-chat.js +37 -0
- package/dist/ui/panel-needs.js +4 -2
- package/dist/ui/panel-settings.js +6 -3
- package/dist/ui/shared/app-shell.js +2 -1
- package/dist/ui/shared/app-stream.js +2 -1
- package/dist/ui/shared/app.css +42 -0
- package/dist/ui/shared/app.js +2 -0
- package/dist/ui/shared/usage-dialog.js +26 -3
- package/dist/ui/shared/view-strings.js +10 -0
- package/dist/ui/web-terminal/terminal.html +1 -1
- package/dist/update-launch.d.ts +9 -0
- package/dist/update-launch.js +38 -12
- package/dist/update-launch.js.map +1 -1
- package/dist/usage/format-rich.js +6 -3
- package/dist/usage/format-rich.js.map +1 -1
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +2 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/i18n.d.ts +13 -1
- package/dist/usage/i18n.js +29 -0
- package/dist/usage/i18n.js.map +1 -1
- package/dist/usage/providers.d.ts +43 -8
- package/dist/usage/providers.js +58 -20
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/usage-api.d.ts +2 -0
- package/dist/usage/usage-api.js +180 -55
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/user-systemd.d.ts +24 -0
- package/dist/user-systemd.js +75 -0
- package/dist/user-systemd.js.map +1 -0
- package/dist/web-api.d.ts +10 -1
- package/dist/web-api.js +134 -5
- package/dist/web-api.js.map +1 -1
- package/dist/web-backend-login.d.ts +130 -0
- package/dist/web-backend-login.js +225 -0
- package/dist/web-backend-login.js.map +1 -0
- package/dist/web-chat-history.d.ts +31 -0
- package/dist/web-chat-history.js +49 -1
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +5 -1
- package/dist/web-commands.js +1 -1
- package/dist/web-commands.js.map +1 -1
- package/dist/web-guest-access.d.ts +3 -2
- package/dist/web-guest-access.js +10 -6
- package/dist/web-guest-access.js.map +1 -1
- package/dist/windows-shortcuts.d.ts +78 -0
- package/dist/windows-shortcuts.js +203 -0
- package/dist/windows-shortcuts.js.map +1 -0
- package/launcher/agend-install.cjs +548 -0
- package/launcher/install-admission.cjs +4 -39
- package/launcher/postinstall.cjs +14 -12
- package/package.json +3 -2
- package/scripts/preinstall-guard.cjs +2 -5
- package/templates/windows-shortcuts.ps1 +181 -0
- package/launcher/old-updater-note.cjs +0 -48
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type RedactionOptions } from './diagnostic-redaction.js';
|
|
2
|
+
export declare const ISSUE_URL = "https://github.com/songsid/AgEnD/issues/new";
|
|
3
|
+
export declare const MAX_ISSUE_URL = 7500;
|
|
4
|
+
export declare const MAX_LOG_BYTES: number;
|
|
5
|
+
export declare const MAX_LOG_LINES = 1500;
|
|
6
|
+
export declare const DEFAULT_SINCE = "30m";
|
|
7
|
+
export declare function sinceMs(value: string, now?: number): number;
|
|
8
|
+
/** No FIFO/device reads, symlink following, whole-file allocations, or modifications of live logs. */
|
|
9
|
+
export declare function readLogTail(path: string): Promise<{
|
|
10
|
+
text: string;
|
|
11
|
+
truncated: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
/** Bounded local narrative/review read, with the same FIFO/symlink restrictions as logs. */
|
|
14
|
+
export declare function readReportInput(path: string): Promise<string>;
|
|
15
|
+
export declare function logExcerpt(text: string, since: number, until: number, options?: RedactionOptions): string;
|
|
16
|
+
export interface ReportInput {
|
|
17
|
+
title: string;
|
|
18
|
+
description: string;
|
|
19
|
+
steps: string;
|
|
20
|
+
environment: string;
|
|
21
|
+
since: number;
|
|
22
|
+
until: number;
|
|
23
|
+
logs: {
|
|
24
|
+
source: string;
|
|
25
|
+
text: string;
|
|
26
|
+
truncated?: boolean;
|
|
27
|
+
}[];
|
|
28
|
+
keepIdentifiers?: boolean;
|
|
29
|
+
delivery?: 'link' | 'gh';
|
|
30
|
+
}
|
|
31
|
+
export interface ReportDraft {
|
|
32
|
+
format: 'agend-bug-report-v1';
|
|
33
|
+
delivery: 'link' | 'gh';
|
|
34
|
+
keepIdentifiers: boolean;
|
|
35
|
+
title: string;
|
|
36
|
+
body: string;
|
|
37
|
+
report: string;
|
|
38
|
+
overflow: boolean;
|
|
39
|
+
}
|
|
40
|
+
export declare function createReportDraft(input: ReportInput): ReportDraft;
|
|
41
|
+
export declare function serializeDraft(draft: ReportDraft): string;
|
|
42
|
+
export declare function draftDigest(serialized: string): string;
|
|
43
|
+
export declare function reviewText(draft: ReportDraft): string;
|
|
44
|
+
export declare function approveDraft(serialized: string, digest: string, delivery: 'link' | 'gh'): ReportDraft;
|
|
45
|
+
/** Only accepts the validated snapshot from the approval boundary. Does not open a browser. */
|
|
46
|
+
export declare function approvedIssueLink(serialized: string, digest: string): string;
|
|
47
|
+
export declare function writePrivate(path: string, text: string): Promise<void>;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { diagnosticLine, diagnosticRecord, redactDiagnostics } from './diagnostic-redaction.js';
|
|
5
|
+
export const ISSUE_URL = 'https://github.com/songsid/AgEnD/issues/new';
|
|
6
|
+
export const MAX_ISSUE_URL = 7500;
|
|
7
|
+
export const MAX_LOG_BYTES = 256 * 1024;
|
|
8
|
+
export const MAX_LOG_LINES = 1500;
|
|
9
|
+
export const DEFAULT_SINCE = '30m';
|
|
10
|
+
export function sinceMs(value, now = Date.now()) {
|
|
11
|
+
const match = /^(\d+)(m|h|d)$/.exec(value);
|
|
12
|
+
if (!match)
|
|
13
|
+
throw new Error('--since must be a duration such as 30m, 2h or 1d (maximum 7d)');
|
|
14
|
+
const duration = Number(match[1]) * ({ m: 60_000, h: 3_600_000, d: 86_400_000 }[match[2]]);
|
|
15
|
+
if (!Number.isSafeInteger(duration) || duration <= 0 || duration > 7 * 86_400_000)
|
|
16
|
+
throw new Error('--since must be between 1m and 7d');
|
|
17
|
+
return now - duration;
|
|
18
|
+
}
|
|
19
|
+
/** No FIFO/device reads, symlink following, whole-file allocations, or modifications of live logs. */
|
|
20
|
+
export async function readLogTail(path) {
|
|
21
|
+
const handle = await open(path, constants.O_RDONLY | constants.O_NONBLOCK | (constants.O_NOFOLLOW ?? 0));
|
|
22
|
+
try {
|
|
23
|
+
const stat = await handle.stat();
|
|
24
|
+
if (!stat.isFile())
|
|
25
|
+
throw new Error('Not a regular log file');
|
|
26
|
+
const start = Math.max(0, stat.size - MAX_LOG_BYTES);
|
|
27
|
+
const buffer = Buffer.alloc(Math.min(stat.size, MAX_LOG_BYTES));
|
|
28
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, start);
|
|
29
|
+
let text = buffer.subarray(0, bytesRead).toString('utf8');
|
|
30
|
+
// A partial first line could hide its timestamp or a credential prefix.
|
|
31
|
+
if (start)
|
|
32
|
+
text = text.includes('\n') ? text.slice(text.indexOf('\n') + 1) : '';
|
|
33
|
+
return { text, truncated: start > 0 };
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await handle.close();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Bounded local narrative/review read, with the same FIFO/symlink restrictions as logs. */
|
|
40
|
+
export async function readReportInput(path) {
|
|
41
|
+
const handle = await open(path, constants.O_RDONLY | constants.O_NONBLOCK | (constants.O_NOFOLLOW ?? 0));
|
|
42
|
+
try {
|
|
43
|
+
const stat = await handle.stat();
|
|
44
|
+
if (!stat.isFile() || stat.size > 4 * 1024 * 1024)
|
|
45
|
+
throw new Error('Report input must be a regular file of at most 4 MiB.');
|
|
46
|
+
const buffer = Buffer.alloc(stat.size);
|
|
47
|
+
const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
|
|
48
|
+
return buffer.subarray(0, bytesRead).toString('utf8');
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
await handle.close();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function logExcerpt(text, since, until, options = {}) {
|
|
55
|
+
const lines = text.split(/\r?\n/);
|
|
56
|
+
const output = [];
|
|
57
|
+
let active = null, unknown = 0, withheld = 0;
|
|
58
|
+
for (const line of lines.slice(-MAX_LOG_LINES)) {
|
|
59
|
+
if (!line)
|
|
60
|
+
continue;
|
|
61
|
+
let record;
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(line);
|
|
64
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
65
|
+
record = parsed;
|
|
66
|
+
}
|
|
67
|
+
catch { /* pretty/plain log */ }
|
|
68
|
+
const timestamp = record?.time ?? record?.timestamp;
|
|
69
|
+
const match = line.match(/\b\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?/);
|
|
70
|
+
const current = typeof timestamp === 'number' ? timestamp : typeof timestamp === 'string' ? Date.parse(timestamp) : match ? Date.parse(match[0]) : null;
|
|
71
|
+
if (current !== null)
|
|
72
|
+
active = Number.isFinite(current) ? current : -1;
|
|
73
|
+
if (active !== null && (active < since || active > until))
|
|
74
|
+
continue;
|
|
75
|
+
// Inspect one bounded prefix once. Repeated INFO tokens without a colon must
|
|
76
|
+
// not trigger a fresh scan of the remaining line for every token.
|
|
77
|
+
const level = /\b(?:INFO|WARN|ERROR|DEBUG|FATAL)\b/.exec(line.slice(0, 256));
|
|
78
|
+
const colon = level ? line.indexOf(':', level.index + level[0].length) : -1;
|
|
79
|
+
const plain = colon >= 0 && colon <= 256 ? line.slice(colon + 1).trimStart() : line;
|
|
80
|
+
const safe = record ? diagnosticRecord(record, options) : diagnosticLine(plain, options);
|
|
81
|
+
if (!safe || safe === '{}') {
|
|
82
|
+
withheld++;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// fleet stderr often lacks timestamps; explicitly separate unverified-time evidence.
|
|
86
|
+
if (active === null)
|
|
87
|
+
unknown++;
|
|
88
|
+
output.push(`${active === null ? '[time unknown]' : new Date(active).toISOString()} ${safe}`);
|
|
89
|
+
}
|
|
90
|
+
return [`Log prose/identifiers omitted; last ${MAX_LOG_LINES} lines maximum.`,
|
|
91
|
+
`Untimestamped diagnostic lines: ${unknown} (cannot verify requested window); withheld lines: ${withheld}.`,
|
|
92
|
+
...output].join('\n');
|
|
93
|
+
}
|
|
94
|
+
function encodedLength(title, body) {
|
|
95
|
+
return ISSUE_URL.length + '?title='.length + encodeURIComponent(title).length + '&body='.length + encodeURIComponent(body).length;
|
|
96
|
+
}
|
|
97
|
+
export function createReportDraft(input) {
|
|
98
|
+
const options = { keepIdentifiers: input.keepIdentifiers };
|
|
99
|
+
const clean = (s) => redactDiagnostics(s, options).replace(/\r/g, '');
|
|
100
|
+
const title = Array.from(clean(input.title).replace(/[\n\t]/g, ' ')).slice(0, 140).join('') || 'AgEnD bug report';
|
|
101
|
+
const report = clean(`# ${title}\n\n## Description\n${clean(input.description) || 'Please describe the problem.'}\n\n## Steps to reproduce\n${clean(input.steps) || 'Please add reproduction steps.'}\n\n## Environment\n${clean(input.environment)}\n\n## Requested window (UTC)\n${new Date(input.since).toISOString()} to ${new Date(input.until).toISOString()}\n\n## Redacted diagnostics\n${input.logs.map(l => `### ${clean(l.source)}${l.truncated ? ' (bounded tail; earlier bytes omitted)' : ''}\n\n${logExcerpt(l.text, input.since, input.until, options)}`).join('\n\n')}\n\nReview this public report before sharing. Free-form log prose, IDs and unknown fields were withheld; arbitrary secrets in the description still need your review. No transcripts, credential config or environment dump collected. Backend CLI versions come from existing unprofiled version caches and structured log fields; missing evidence is unknown, cache age is stated, and no coding CLI was executed.\n`);
|
|
102
|
+
const overflow = encodedLength(title, report) > MAX_ISSUE_URL;
|
|
103
|
+
const body = overflow ? `# ${title}\n\nThe full approved redacted report exceeds the prefilled-link size limit. Please attach the approved report Markdown file manually before submitting. No attachment has been uploaded.\n` : report;
|
|
104
|
+
return { format: 'agend-bug-report-v1', delivery: input.delivery ?? 'link', keepIdentifiers: !!input.keepIdentifiers, title, body, report, overflow };
|
|
105
|
+
}
|
|
106
|
+
export function serializeDraft(draft) { return JSON.stringify(draft, null, 2) + '\n'; }
|
|
107
|
+
export function draftDigest(serialized) { return createHash('sha256').update(serialized).digest('hex'); }
|
|
108
|
+
export function reviewText(draft) {
|
|
109
|
+
return `Delivery: ${draft.delivery}\nIssue title:\n${draft.title}\n\nExact issue body:\n${draft.body}\n\nExact report file (attach manually${draft.overflow ? '; required for overflow' : ''}):\n${draft.report}\n`;
|
|
110
|
+
}
|
|
111
|
+
export function approveDraft(serialized, digest, delivery) {
|
|
112
|
+
if (!/^[a-f\d]{64}$/.test(digest) || draftDigest(serialized) !== digest)
|
|
113
|
+
throw new Error('Draft changed or approval digest does not match; review and approve the exact draft again.');
|
|
114
|
+
const draft = JSON.parse(serialized);
|
|
115
|
+
if (!draft || draft.format !== 'agend-bug-report-v1' || draft.delivery !== delivery || typeof draft.keepIdentifiers !== 'boolean'
|
|
116
|
+
|| typeof draft.title !== 'string' || typeof draft.body !== 'string' || typeof draft.report !== 'string' || typeof draft.overflow !== 'boolean')
|
|
117
|
+
throw new Error('Invalid draft; collect a new report.');
|
|
118
|
+
// Reject injected extra fields, unredacted edits and ambiguous representations.
|
|
119
|
+
if (serializeDraft(draft) !== serialized || Object.keys(draft).sort().join(',') !== 'body,delivery,format,keepIdentifiers,overflow,report,title')
|
|
120
|
+
throw new Error('Invalid draft format.');
|
|
121
|
+
for (const value of [draft.title, draft.body, draft.report])
|
|
122
|
+
if (redactDiagnostics(value, { keepIdentifiers: draft.keepIdentifiers }) !== value)
|
|
123
|
+
throw new Error('Draft contains unredacted data; collect and review again.');
|
|
124
|
+
if (encodedLength(draft.title, draft.body) > MAX_ISSUE_URL)
|
|
125
|
+
throw new Error('Issue text exceeds the safe link limit; collect a new report.');
|
|
126
|
+
return draft;
|
|
127
|
+
}
|
|
128
|
+
/** Only accepts the validated snapshot from the approval boundary. Does not open a browser. */
|
|
129
|
+
export function approvedIssueLink(serialized, digest) {
|
|
130
|
+
const draft = approveDraft(serialized, digest, 'link');
|
|
131
|
+
return ISSUE_URL + '?title=' + encodeURIComponent(draft.title) + '&body=' + encodeURIComponent(draft.body);
|
|
132
|
+
}
|
|
133
|
+
export async function writePrivate(path, text) {
|
|
134
|
+
await writeFile(path, text, { flag: 'wx', mode: 0o600 });
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=bug-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bug-report.js","sourceRoot":"","sources":["../src/bug-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,7 +85,7 @@ const DEFS = [
|
|
|
85
85
|
["stop_instance", schemas.StopInstanceArgs,
|
|
86
86
|
"Stop a running instance (terminates the daemon)."],
|
|
87
87
|
["get_fleet_status", schemas.GetFleetStatusArgs,
|
|
88
|
-
"Get fleet summary: count of running, paused, and stopped instances."],
|
|
88
|
+
"Get fleet summary: count of running, paused, and stopped instances — fleet instances and ClassicBot channels combined. Returns top-level totals (total, running, paused, stopped) plus a breakdown by kind: fleet (fleet.yaml instances) and classic (ClassicBot channels)."],
|
|
89
89
|
["get_effort", schemas.GetEffortArgs,
|
|
90
90
|
"Get the reasoning-effort setting for an instance: the level in force, the levels its CLI backend accepts, and whether changing it takes effect immediately or needs a restart. Defaults to yourself."],
|
|
91
91
|
["kiro_engine_status", schemas.KiroEngineStatusArgs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/channel/mcp-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/channel/mcp-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,7 @@ applyNetworkReliabilityDefaults();
|
|
|
14
14
|
import { checkNodeVersion } from "./node-version-guard.js";
|
|
15
15
|
checkNodeVersion();
|
|
16
16
|
import { Command } from "commander";
|
|
17
|
+
import { registerBugReportCommand } from "./bug-report-cli.js";
|
|
17
18
|
import { join, dirname } from "node:path";
|
|
18
19
|
import { SchedulerDb } from "./scheduler/db.js";
|
|
19
20
|
import { Cron } from "croner";
|
|
@@ -25,7 +26,7 @@ import { getAgendHome, getTmuxSocketName, isDefaultAgendHome } from "./paths.js"
|
|
|
25
26
|
import { hasPausedMarker } from "./pause-marker.js";
|
|
26
27
|
import { COMPLETION_SHELLS, completionScript } from "./completion.js";
|
|
27
28
|
import { getUpdateSelector, isExactVersion, isUnrequestedDowngrade, lookupTargetVersion, reportUpdateRestart, shouldSkipUpdate, runningFleetPredatesInstall, fleetProvenStopped, readFleetPidEvidence, pidAlive, processStartMs, } from "./update-check.js";
|
|
28
|
-
import { clearUpdateMarker, markUpdateInProgress, setUpdateProgressStage } from "./update-marker.js";
|
|
29
|
+
import { clearUpdateMarker, markUpdateInProgress, readUpdateProgress, setUpdateProgressStage } from "./update-marker.js";
|
|
29
30
|
import { describeSignalSource, forceAllowed, gateFleetControl, recordInstanceControl, withOrigin } from "./fleet-control-audit.js";
|
|
30
31
|
import { FLEET_STOP_TIMEOUT_MS, stopDetachedOwner, systemdStopTimeoutMs, detachedProcessStart, detachedProcessExited } from "./fleet-stop-budget.js";
|
|
31
32
|
import { acquireFleetLock, isFleetStartCommandLine, readProcessCommandLine, releaseProcessFleetLock, setProcessFleetLock } from "./fleet-lock.js";
|
|
@@ -145,6 +146,7 @@ program
|
|
|
145
146
|
// The root's own options only before a subcommand: otherwise `agend update --version 2.1.9` is read as
|
|
146
147
|
// `agend --version`, prints this version and installs nothing.
|
|
147
148
|
.enablePositionalOptions();
|
|
149
|
+
registerBugReportCommand(program, pkgVersion);
|
|
148
150
|
function signalFleetReload() {
|
|
149
151
|
const pidPath = join(DATA_DIR, "fleet.pid");
|
|
150
152
|
try {
|
|
@@ -1485,6 +1487,12 @@ program
|
|
|
1485
1487
|
// the cleanup write later can prove it still owns the marker (checklist
|
|
1486
1488
|
// 3/5). A missed capture only skips the marker write; retire still runs.
|
|
1487
1489
|
let cleanupReceipt = null;
|
|
1490
|
+
// #2264 review: the old system copy is retired only for a confirmed 2.1-era layout — the copy this updater runs
|
|
1491
|
+
// from is a 2.1.x release (2.1's updater left it there). Never from "nvm" or "root" alone: a 2.2+ copy stays.
|
|
1492
|
+
if (verified.retireSystemCopy && !/^2\.1\./.test(pkgVersion)) {
|
|
1493
|
+
console.log(` Note: the system install (v${pkgVersion}) is kept; only a 2.1-era copy is retired after a move to nvm.`);
|
|
1494
|
+
delete verified.retireSystemCopy;
|
|
1495
|
+
}
|
|
1488
1496
|
if (verified.retireSystemCopy) {
|
|
1489
1497
|
try {
|
|
1490
1498
|
const { markCleanupPending } = await import("./update-marker.js");
|
|
@@ -1597,6 +1605,9 @@ program
|
|
|
1597
1605
|
const { planPath } = await import("./service-plan.js");
|
|
1598
1606
|
planDeps().removeFile(planPath(DATA_DIR));
|
|
1599
1607
|
}
|
|
1608
|
+
// #1853: in a WSL terminal without the Windows desktop shortcuts, say once how to make them (never makes them).
|
|
1609
|
+
if (outcome.ok)
|
|
1610
|
+
await import("./windows-shortcuts.js").then(m => m.printUpdateShortcutsHint(DATA_DIR)).catch(() => { });
|
|
1600
1611
|
if (outcome.ok && outcome.via === "launchd-activation") {
|
|
1601
1612
|
console.log(" ✓ Service restarted (launchd loaded the verified job)");
|
|
1602
1613
|
// The new fleet clears the update marker once it is up.
|
|
@@ -1683,6 +1694,7 @@ program
|
|
|
1683
1694
|
}
|
|
1684
1695
|
console.log(`\n ✓ Already up to date (v${pkgVersion})\n`);
|
|
1685
1696
|
setUpdateProgressStage(DATA_DIR, "complete", { version: pkgVersion });
|
|
1697
|
+
await import("./windows-shortcuts.js").then(m => m.printUpdateShortcutsHint(DATA_DIR)).catch(() => { });
|
|
1686
1698
|
return;
|
|
1687
1699
|
}
|
|
1688
1700
|
if (isUnrequestedDowngrade(pkgVersion, targetVersion, opts)) {
|
|
@@ -1729,6 +1741,49 @@ program
|
|
|
1729
1741
|
if (verdict.kind === "unknown")
|
|
1730
1742
|
console.log(verdict.note);
|
|
1731
1743
|
}
|
|
1744
|
+
// ── #2264: the target release installs itself ──
|
|
1745
|
+
// `agend update` only chooses the version; the install — repair, `npm install -g`, proof, service, restart, the
|
|
1746
|
+
// chat's progress — is that release's own installer (launcher/agend-install.cjs), fetched pinned by npm with its
|
|
1747
|
+
// integrity checks. So every update runs the NEWEST install logic, never this (possibly old) package's, and the
|
|
1748
|
+
// one-liner runs the same program. The code below this branch is the compatibility path, unchanged: for a prefix
|
|
1749
|
+
// that needs sudo (the nvm route), and for a target from before the installer.
|
|
1750
|
+
// Only a known target that ships the installer runs it: `npm exec --package <a release without agend-install>` would
|
|
1751
|
+
// run whatever agend-install PATH has (#2264 review). An older target, or one npm cannot describe, takes the
|
|
1752
|
+
// compatibility path below; `--target` makes any other installer refuse.
|
|
1753
|
+
const shipsInstaller = () => {
|
|
1754
|
+
const viewed = spawnSync("npm", ["view", pkg, "bin", "--json"], { encoding: "utf-8", timeout: 60_000, stdio: ["ignore", "pipe", "ignore"] });
|
|
1755
|
+
try {
|
|
1756
|
+
const parsed = JSON.parse(viewed.stdout || "null");
|
|
1757
|
+
const bin = Array.isArray(parsed) ? parsed[parsed.length - 1] : parsed;
|
|
1758
|
+
return viewed.status === 0 && !!bin && typeof bin === "object" && Object.hasOwn(bin, "agend-install");
|
|
1759
|
+
}
|
|
1760
|
+
catch {
|
|
1761
|
+
return false;
|
|
1762
|
+
}
|
|
1763
|
+
};
|
|
1764
|
+
const viaInstaller = !needsSudo && targetVersion !== null && shipsInstaller();
|
|
1765
|
+
if (!needsSudo && !viaInstaller)
|
|
1766
|
+
console.log(` ℹ ${pkg} has no installer of its own (a release from before #2264); this updater installs it.`);
|
|
1767
|
+
if (viaInstaller) {
|
|
1768
|
+
console.log(`\n Updating AgEnD v${pkgVersion} → v${targetVersion} (its own installer)...\n`);
|
|
1769
|
+
markUpdateInProgress(DATA_DIR);
|
|
1770
|
+
setUpdateProgressStage(DATA_DIR, "downloading", { version: targetVersion });
|
|
1771
|
+
// AGEND_UPDATE_OWNER_PID: the marker this process just wrote is the installer's to carry on (and no one else's).
|
|
1772
|
+
const installer = spawnSync("npm", ["exec", "--yes", "--package", pkg, "--", "agend-install", "--upgrade", "--target", targetVersion], {
|
|
1773
|
+
stdio: "inherit", env: { ...withOrigin("agend-update"), AGEND_UPDATE_OWNER_PID: String(process.pid) },
|
|
1774
|
+
});
|
|
1775
|
+
if (installer.status === 0 || installer.status === 75) {
|
|
1776
|
+
process.exitCode = installer.status ?? 0;
|
|
1777
|
+
return;
|
|
1778
|
+
}
|
|
1779
|
+
// The installer records its own failure; one that never started (npm could not fetch it) is recorded here.
|
|
1780
|
+
const progress = readUpdateProgress(DATA_DIR)?.progress;
|
|
1781
|
+
if (progress && progress.stage !== "failed" && progress.stage !== "complete") {
|
|
1782
|
+
setUpdateProgressStage(DATA_DIR, "failed", { error: `the installer for ${pkg} did not run (npm exec exited ${installer.status ?? installer.signal ?? installer.error?.message}); nothing was changed` });
|
|
1783
|
+
}
|
|
1784
|
+
process.exitCode = installer.status || 1;
|
|
1785
|
+
return;
|
|
1786
|
+
}
|
|
1732
1787
|
if (targetVersion) {
|
|
1733
1788
|
console.log(`\n Updating AgEnD v${pkgVersion} → v${targetVersion}...\n`);
|
|
1734
1789
|
}
|
|
@@ -1946,6 +2001,19 @@ program
|
|
|
1946
2001
|
console.log(t("install.updated"));
|
|
1947
2002
|
}
|
|
1948
2003
|
});
|
|
2004
|
+
program
|
|
2005
|
+
.command("shortcuts")
|
|
2006
|
+
.description("WSL: create or update the Windows desktop shortcuts (the dashboard and restart)")
|
|
2007
|
+
.action(async () => {
|
|
2008
|
+
// #1853: for an install that predates the installer's shortcuts, or that is only ever updated with `agend update`.
|
|
2009
|
+
const { runShortcuts, realShortcutsDeps } = await import("./windows-shortcuts.js");
|
|
2010
|
+
const { spawnSync } = await import("node:child_process");
|
|
2011
|
+
const { userInfo } = await import("node:os");
|
|
2012
|
+
process.exitCode = await runShortcuts(realShortcutsDeps(DATA_DIR, userInfo().username, (command, args) => {
|
|
2013
|
+
const r = spawnSync(command, args, { encoding: "utf-8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"] });
|
|
2014
|
+
return { status: r.status, stdout: r.stdout ?? "", stderr: r.stderr ?? "", error: r.error };
|
|
2015
|
+
}));
|
|
2016
|
+
});
|
|
1949
2017
|
program
|
|
1950
2018
|
.command("uninstall")
|
|
1951
2019
|
.description("Remove the AgEnD system service")
|
|
@@ -2709,9 +2777,24 @@ program
|
|
|
2709
2777
|
program
|
|
2710
2778
|
.command("validate")
|
|
2711
2779
|
.description("Validate fleet.yaml and classicBot.yaml")
|
|
2712
|
-
.
|
|
2713
|
-
|
|
2780
|
+
.option("--connections", "Only print how many chat connections fleet.yaml has, as CONNECTIONS=<n> (for scripts; CONNECTIONS=unknown and exit 1 when it cannot be read)")
|
|
2781
|
+
.action(async (opts) => {
|
|
2782
|
+
const { validateFleetConfig, validateClassicBotConfig, configuredConnectionCount } = await import("./config-validator.js");
|
|
2714
2783
|
const yaml = (await import("js-yaml")).default;
|
|
2784
|
+
if (opts.connections) {
|
|
2785
|
+
// #2233: the Windows installer's question — did the setup page make a web-only fleet? Parsed, never grepped.
|
|
2786
|
+
let count = null;
|
|
2787
|
+
try {
|
|
2788
|
+
count = configuredConnectionCount(yaml.load(readFileSync(FLEET_CONFIG_PATH, "utf-8")));
|
|
2789
|
+
}
|
|
2790
|
+
catch {
|
|
2791
|
+
count = null;
|
|
2792
|
+
}
|
|
2793
|
+
console.log(`CONNECTIONS=${count ?? "unknown"}`);
|
|
2794
|
+
if (count === null)
|
|
2795
|
+
process.exit(1);
|
|
2796
|
+
return;
|
|
2797
|
+
}
|
|
2715
2798
|
const red = (s) => `\x1b[31m${s}\x1b[0m`;
|
|
2716
2799
|
const green = (s) => `\x1b[32m${s}\x1b[0m`;
|
|
2717
2800
|
const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
|
|
@@ -3045,7 +3128,8 @@ async function resolveInstance(query, config) {
|
|
|
3045
3128
|
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
3046
3129
|
console.log(`"${query}" matches multiple instances:`);
|
|
3047
3130
|
const { ambiguityLine } = await import("./ls-attach-resolve.js");
|
|
3048
|
-
const
|
|
3131
|
+
const { computeLsNameWidth: cnw } = await import("./ls-rows.js");
|
|
3132
|
+
const maxNameW = cnw(result.candidates.map(c => c.realName), 0);
|
|
3049
3133
|
for (const c of result.candidates) {
|
|
3050
3134
|
console.log(ambiguityLine(c, maxNameW));
|
|
3051
3135
|
}
|
|
@@ -3075,7 +3159,8 @@ async function interactivePicker(candidates) {
|
|
|
3075
3159
|
const { pickerDefaultIdx } = await import("./ls-attach-resolve.js");
|
|
3076
3160
|
const defaultIdx = pickerDefaultIdx(ordered);
|
|
3077
3161
|
const { pickerLine } = await import("./ls-attach-resolve.js");
|
|
3078
|
-
const
|
|
3162
|
+
const { computeLsNameWidth: cnwPicker } = await import("./ls-rows.js");
|
|
3163
|
+
const maxNameW = cnwPicker(ordered.map(c => c.realName), 0);
|
|
3079
3164
|
console.log("Select an instance:");
|
|
3080
3165
|
for (const c of ordered) {
|
|
3081
3166
|
console.log(pickerLine(c, maxNameW));
|
|
@@ -3274,7 +3359,7 @@ async function lsAction(opts) {
|
|
|
3274
3359
|
};
|
|
3275
3360
|
// Row collection runs concurrently (see ls-rows.ts): the per-instance
|
|
3276
3361
|
// tmux captures overlap instead of stacking their 2s bounds serially.
|
|
3277
|
-
const { collectLsRows, capturePaneAsync, formatTimeSince, lsStatusIcon, lsStatusLabel, displayWidth } = await import("./ls-rows.js");
|
|
3362
|
+
const { collectLsRows, capturePaneAsync, formatTimeSince, lsStatusIcon, lsStatusLabel, displayWidth, computeLsNameWidth, padToDisplayWidth } = await import("./ls-rows.js");
|
|
3278
3363
|
const { getTmuxSocketName } = await import("./paths.js");
|
|
3279
3364
|
const socketName = getTmuxSocketName();
|
|
3280
3365
|
const rows = await collectLsRows(allNames.map(name => {
|
|
@@ -3375,7 +3460,7 @@ async function lsAction(opts) {
|
|
|
3375
3460
|
// Columns: # (global row number), Name (real, full, copyable), then the rest.
|
|
3376
3461
|
// Display name (if set) appears at the end of the row as context — secondary.
|
|
3377
3462
|
const numW = 3;
|
|
3378
|
-
const nameW =
|
|
3463
|
+
const nameW = computeLsNameWidth(displayRows.map(r => r.name));
|
|
3379
3464
|
const backendW = 14;
|
|
3380
3465
|
const statusW = 12;
|
|
3381
3466
|
const teamW = 20;
|
|
@@ -3399,7 +3484,7 @@ async function lsAction(opts) {
|
|
|
3399
3484
|
const actStr = r.lastActivity ?? "-";
|
|
3400
3485
|
const dispAnnotation = lsDisplayAnnotation(r.name, displayLabel(r), opts.display ?? false);
|
|
3401
3486
|
console.log(String(r.globalIdx).padEnd(numW) +
|
|
3402
|
-
r.name
|
|
3487
|
+
padToDisplayWidth(r.name, nameW) +
|
|
3403
3488
|
r.backend.padEnd(backendW) +
|
|
3404
3489
|
statusIcon(r.status, r.idle, r.state) + " " + statusLabel(r.status, r.idle, r.state).padEnd(statusW - 2) +
|
|
3405
3490
|
padDisplay(teamStr, teamW) +
|