@songsid/agend 2.3.4-beta.1 → 2.3.4-beta.11
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/agend-home.d.ts +13 -0
- package/dist/agend-home.js +42 -0
- package/dist/agend-home.js.map +1 -1
- 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 +10 -2
- 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/claude-code.d.ts +3 -0
- package/dist/backend/claude-code.js +89 -4
- package/dist/backend/claude-code.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-session-lookup.d.ts +35 -0
- package/dist/backend/codex-session-lookup.js +93 -0
- package/dist/backend/codex-session-lookup.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.d.ts +27 -0
- package/dist/backend/codex.js +133 -25
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +2 -0
- package/dist/backend/kiro-identity.js +13 -6
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +3 -0
- package/dist/backend/kiro.js +68 -5
- 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/backend/types.d.ts +6 -1
- package/dist/backend/types.js +3 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-availability.d.ts +6 -0
- package/dist/backend-availability.js +13 -5
- package/dist/backend-availability.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 +27 -4
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +51 -0
- package/dist/channel/adapters/telegram.js +238 -18
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/inbox-temp-name.d.ts +9 -0
- package/dist/channel/inbox-temp-name.js +13 -0
- package/dist/channel/inbox-temp-name.js.map +1 -0
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/chat-log-ids.d.ts +48 -0
- package/dist/chat-log-ids.js +182 -0
- package/dist/chat-log-ids.js.map +1 -0
- package/dist/classic-channel-manager.d.ts +8 -1
- package/dist/classic-channel-manager.js +24 -2
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +4 -6
- package/dist/cli.js.map +1 -1
- 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 +52 -0
- package/dist/daemon.js +530 -34
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +23 -1
- package/dist/delivery-consumed-watch.js +30 -3
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +7 -0
- package/dist/delivery-reconciliation.js +9 -1
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/dialog-screen-text.d.ts +16 -0
- package/dist/dialog-screen-text.js +51 -0
- package/dist/dialog-screen-text.js.map +1 -0
- 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 +147 -11
- package/dist/fleet-manager.js +747 -118
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-patch.d.ts +3 -0
- package/dist/fleet-yaml-patch.js +103 -0
- package/dist/fleet-yaml-patch.js.map +1 -0
- package/dist/general-knowledge/skills/concepts/SKILL.md +393 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +2 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +10 -4
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
- package/dist/install-stream.d.ts +53 -0
- package/dist/install-stream.js +134 -0
- package/dist/install-stream.js.map +1 -0
- package/dist/instance-config-impact.js +2 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +20 -2
- package/dist/instance-lifecycle.js +80 -12
- 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/kiro-engine-status.d.ts +11 -0
- package/dist/kiro-engine-status.js +6 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-resume-summary.d.ts +37 -0
- package/dist/kiro-resume-summary.js +85 -0
- package/dist/kiro-resume-summary.js.map +1 -0
- package/dist/locale.js +90 -6
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +30 -0
- package/dist/log-service.js +36 -3
- 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/login-controller.js +9 -1
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +2 -0
- package/dist/login-flows.js +5 -2
- package/dist/login-flows.js.map +1 -1
- package/dist/login-manager.d.ts +6 -0
- package/dist/login-manager.js +10 -1
- package/dist/login-manager.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 +31 -8
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +22 -2
- package/dist/needs-you.js +17 -3
- package/dist/needs-you.js.map +1 -1
- package/dist/office-share-page.d.ts +1 -1
- package/dist/office-share-page.js +6 -2
- package/dist/office-share-page.js.map +1 -1
- package/dist/outbound-handlers.js +59 -3
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +1 -0
- package/dist/outbound-schemas.js +9 -3
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/package-preimage.js +27 -2
- package/dist/package-preimage.js.map +1 -1
- package/dist/queued-handoffs.d.ts +33 -0
- package/dist/queued-handoffs.js +75 -0
- package/dist/queued-handoffs.js.map +1 -0
- package/dist/reply-buttons-controller.js +10 -0
- package/dist/reply-buttons-controller.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/selection-card.d.ts +2 -3
- package/dist/selection-card.js +99 -26
- package/dist/selection-card.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/stall-reporter.d.ts +21 -0
- package/dist/stall-reporter.js +82 -0
- package/dist/stall-reporter.js.map +1 -0
- package/dist/tmux-control.d.ts +2 -2
- package/dist/tmux-control.js +4 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +6 -3
- package/dist/tmux-exec-helper.js +115 -53
- package/dist/tmux-exec-helper.js.map +1 -1
- package/dist/tmux-manager.d.ts +6 -0
- package/dist/tmux-manager.js +17 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-permissions.d.ts +5 -2
- package/dist/tool-permissions.js +6 -5
- package/dist/tool-permissions.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/tunnel/cloudflared-install.d.ts +4 -0
- package/dist/tunnel/cloudflared-install.js +20 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +8 -1
- package/dist/tunnel/cloudflared.js +34 -6
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/lease.d.ts +3 -3
- package/dist/tunnel/lease.js +23 -19
- package/dist/tunnel/lease.js.map +1 -1
- package/dist/tunnel/manager.js +6 -7
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/ui/chat-md-strings.js +9 -0
- package/dist/ui/chat-store.js +20 -3
- package/dist/ui/chat-strings.js +4 -4
- package/dist/ui/chat-thread.js +105 -13
- package/dist/ui/fleet-canvas.js +4 -3
- package/dist/ui/fleet-office-model.js +55 -22
- package/dist/ui/fleet-office-overview.js +6 -38
- package/dist/ui/fleet-office-pack.js +4 -3
- package/dist/ui/fleet-office-skin.js +114 -21
- package/dist/ui/fleet-office-store.js +5 -0
- package/dist/ui/fleet-office-zones.js +2 -2
- package/dist/ui/fleet-office.js +41 -9
- package/dist/ui/fleet-usage.js +90 -27
- package/dist/ui/panel-chat.js +5 -2
- package/dist/ui/panel-log.js +7 -1
- package/dist/ui/panel-needs.js +17 -8
- 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 +4 -4
- package/dist/ui/shared/app-needs.js +1 -1
- package/dist/ui/shared/app-shell.js +4 -2
- package/dist/ui/shared/app-stream.js +26 -0
- package/dist/ui/shared/app.css +55 -3
- package/dist/ui/shared/office/guild.png +0 -0
- package/dist/ui/shared/office/school.png +0 -0
- package/dist/ui/shared/panel-view.js +339 -17
- 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 +42 -0
- package/dist/unattended-install.d.ts +6 -0
- package/dist/unattended-install.js +79 -0
- package/dist/unattended-install.js.map +1 -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 +31 -0
- package/dist/view-api.js +186 -41
- 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 +15 -4
- package/dist/web-api.js.map +1 -1
- package/dist/web-chat-history.d.ts +20 -0
- package/dist/web-chat-history.js +21 -0
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-guest-access.js +5 -1
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-login.d.ts +4 -3
- package/dist/web-login.js +23 -14
- package/dist/web-login.js.map +1 -1
- package/dist/web-office-pack-tools.d.ts +1 -1
- package/dist/web-office-pack-tools.js +1 -1
- package/dist/web-office-pack-tools.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/dist/web-session.d.ts +5 -0
- package/dist/web-session.js +20 -8
- package/dist/web-session.js.map +1 -1
- package/launcher/agend-install.cjs +16 -2
- package/launcher/private-home.cjs +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leaf-edit fleet.yaml the way Settings does: patch the raw YAML document, keep
|
|
3
|
+
* comments and a legacy `channel:`, then fsync+rename after the result still
|
|
4
|
+
* loads. CLI `topic bind/unbind` used to `yaml.dump` the defaults-expanded
|
|
5
|
+
* config (#1490 row 54).
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
8
|
+
import { isScalar, parseDocument } from "yaml";
|
|
9
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
10
|
+
import { loadFleetConfig } from "./config.js";
|
|
11
|
+
import { validateFleetConfig } from "./config-validator.js";
|
|
12
|
+
import { changedOutside, detachForWrite } from "./yaml-shared-nodes.js";
|
|
13
|
+
function sameLeaf(before, after) {
|
|
14
|
+
if (Object.is(before, after))
|
|
15
|
+
return true;
|
|
16
|
+
if (before === undefined && after === undefined)
|
|
17
|
+
return true;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.stringify(before) === JSON.stringify(after);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function leafValue(node) {
|
|
26
|
+
return isScalar(node) ? node.value : node;
|
|
27
|
+
}
|
|
28
|
+
function savedFleetYamlProblem(currentPath, candidate) {
|
|
29
|
+
let after;
|
|
30
|
+
try {
|
|
31
|
+
after = validateFleetConfig(loadFleetConfig(candidate));
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return `Refusing to save fleet.yaml: the result would not load (${err.message})`;
|
|
35
|
+
}
|
|
36
|
+
let had = new Set();
|
|
37
|
+
try {
|
|
38
|
+
if (existsSync(currentPath)) {
|
|
39
|
+
had = new Set(validateFleetConfig(loadFleetConfig(currentPath)).errors.map(e => `${e.path}\u0000${e.message}`));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch { /* the current file does not load: every error of the result counts as new */ }
|
|
43
|
+
const introduced = after.errors.filter(e => !had.has(`${e.path}\u0000${e.message}`));
|
|
44
|
+
return introduced.length
|
|
45
|
+
? `Refusing to save fleet.yaml: it would be invalid (${introduced.map(e => `${e.path}: ${e.message}`).join("; ")})`
|
|
46
|
+
: null;
|
|
47
|
+
}
|
|
48
|
+
/** Apply explicit leaf patches to the on-disk YAML document. No-op when nothing changes. */
|
|
49
|
+
export function applyFleetYamlPatches(configPath, patches) {
|
|
50
|
+
if (!existsSync(configPath))
|
|
51
|
+
throw new Error(`fleet.yaml not found: ${configPath}`);
|
|
52
|
+
const source = readFileSync(configPath, "utf-8");
|
|
53
|
+
const document = parseDocument(source, { keepSourceTokens: true });
|
|
54
|
+
if (document.errors.length > 0) {
|
|
55
|
+
throw new Error(`Refusing to overwrite invalid fleet.yaml: ${document.errors[0].message}`);
|
|
56
|
+
}
|
|
57
|
+
// #2208: snapshot aliases expanded, unshare the place written, then refuse if
|
|
58
|
+
// anything else changed (a shared node the write still went through).
|
|
59
|
+
const fileBefore = document.toJS({ maxAliasCount: -1 });
|
|
60
|
+
const writes = [];
|
|
61
|
+
let changed = false;
|
|
62
|
+
for (const patch of patches) {
|
|
63
|
+
if (patch.remove) {
|
|
64
|
+
if (!document.hasIn(patch.path))
|
|
65
|
+
continue;
|
|
66
|
+
detachForWrite(document, patch.path);
|
|
67
|
+
writes.push([...patch.path]);
|
|
68
|
+
document.deleteIn(patch.path);
|
|
69
|
+
changed = true;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const before = leafValue(document.getIn(patch.path, true));
|
|
73
|
+
if (sameLeaf(before, patch.value))
|
|
74
|
+
continue;
|
|
75
|
+
detachForWrite(document, patch.path);
|
|
76
|
+
writes.push([...patch.path]);
|
|
77
|
+
const currentNode = document.getIn(patch.path, true);
|
|
78
|
+
if (isScalar(currentNode) && (patch.value === null || typeof patch.value !== "object")) {
|
|
79
|
+
currentNode.value = patch.value;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
document.setIn(patch.path, patch.value !== null && typeof patch.value === "object"
|
|
83
|
+
? document.createNode(patch.value)
|
|
84
|
+
: patch.value);
|
|
85
|
+
}
|
|
86
|
+
changed = true;
|
|
87
|
+
}
|
|
88
|
+
if (!changed)
|
|
89
|
+
return;
|
|
90
|
+
const stray = changedOutside(fileBefore, document.toJS({ maxAliasCount: -1 }), writes);
|
|
91
|
+
if (stray) {
|
|
92
|
+
throw new Error(`Refusing to save fleet.yaml: this change would also change ${stray}, which shares a value with what it edits. Give each its own value in fleet.yaml.`);
|
|
93
|
+
}
|
|
94
|
+
atomicWriteFileSync(configPath, String(document), {
|
|
95
|
+
mode: statSync(configPath).mode,
|
|
96
|
+
beforeRename: (tempPath) => {
|
|
97
|
+
const refusal = savedFleetYamlProblem(configPath, tempPath);
|
|
98
|
+
if (refusal)
|
|
99
|
+
throw new Error(refusal);
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=fleet-yaml-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-yaml-patch.js","sourceRoot":"","sources":["../src/fleet-yaml-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: concepts
|
|
3
|
+
description: AgEnD product concepts and definitions — fleet, instances, General, tool sets, delivery, schedules, and the rest; the agents' built-in role reference
|
|
4
|
+
roles: [general, worker]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# AgEnD concepts and definitions
|
|
8
|
+
|
|
9
|
+
Draft. Each term states what the code on main does today, verified against the
|
|
10
|
+
listed files. Anything inferred is marked. These definitions were approved by the project
|
|
11
|
+
owner; behaviour that differs from them is a bug or needs a decision.
|
|
12
|
+
Where code and a decision disagree, see Mismatches at the end. Fleet decisions are scoped to the leader's project root and cannot be
|
|
13
|
+
opened by readers, so each citation carries its user-facing summary inline.
|
|
14
|
+
|
|
15
|
+
## fleet
|
|
16
|
+
|
|
17
|
+
The whole multi-agent system on one host: its instances, schedules, teams,
|
|
18
|
+
decisions and task board, driven by one daemon from one `fleet.yaml` in one
|
|
19
|
+
AgEnD home (`~/.agend`).
|
|
20
|
+
|
|
21
|
+
- Can: run agents reachable from chat connections, the web dashboard, or both.
|
|
22
|
+
- Can't: span hosts. There is one daemon, one fleet process, one home dir.
|
|
23
|
+
- Code: `src/fleet-manager.ts` (`FleetManager`), `src/config.ts` (`FleetConfig`).
|
|
24
|
+
- Refs: —
|
|
25
|
+
|
|
26
|
+
## instance / agent
|
|
27
|
+
|
|
28
|
+
One agent is one instance: a daemon driving one CLI in its own tmux pane, with
|
|
29
|
+
its own transcript, topic or room, and tool set. `instance` is the config and
|
|
30
|
+
runtime word (`fleet.yaml` `instances`); `agent` is the everyday word.
|
|
31
|
+
|
|
32
|
+
- Can: chat and call MCP tools within its tool set; message peers with
|
|
33
|
+
`send_to_instance`, `delegate_task`, `report_result`.
|
|
34
|
+
- Can't: exceed its tool set, or touch another instance's state except through
|
|
35
|
+
fleet tools (same-OS-user processes are not isolated from each other —
|
|
36
|
+
see `docs/design/coordinator-tool-perms.zh-TW.md`).
|
|
37
|
+
- Code: `src/daemon.ts`, `src/instance-lifecycle.ts`.
|
|
38
|
+
- Refs: #804.
|
|
39
|
+
|
|
40
|
+
## General
|
|
41
|
+
|
|
42
|
+
The user's definition (fleet decision 9e3bea6c, "General is the AgEnD
|
|
43
|
+
administrator", user 2026-11-04): as of beta.8 the `general` tool profile gets
|
|
44
|
+
the full ORCHESTRATION set — instance create, delete, replace, start, stop,
|
|
45
|
+
pause, wake and restart; templates; teams; `update_fleet_defaults`;
|
|
46
|
+
`update_instance_config`; the kiro migrate and reconcile tools;
|
|
47
|
+
`update_decision`; web settings — with no extra confirmation. The existing
|
|
48
|
+
confirmations stay: sensitive config (tokens and access) is confirmed by a
|
|
49
|
+
fleet admin, and #804 still refuses `tool_set` or `skipPermissions` escalation.
|
|
50
|
+
It supersedes the 2026-09-21 "dispatcher" rationale and lands in beta.8 (agy's
|
|
51
|
+
PR). General is the fleet's admin instance — the first agent on a new fleet —
|
|
52
|
+
and owns the General topic. An instance runs under the `general` tool set when
|
|
53
|
+
`general_topic: true` or its name is `general`.
|
|
54
|
+
|
|
55
|
+
- Can (as of beta.8): everything in the worker profile plus the full
|
|
56
|
+
ORCHESTRATION set, delegation, schedules, and the user's web-appearance
|
|
57
|
+
settings.
|
|
58
|
+
- Can't: exceed that set. Note the code on main is pre-beta.8 and still shows
|
|
59
|
+
the smaller subset (`src/tool-permissions.ts:107-136` holds only
|
|
60
|
+
`create/start/restart/wake_instance` plus the web settings
|
|
61
|
+
(`get/set_web_settings`) of the orchestration verbs) — expected
|
|
62
|
+
to change when beta.8 lands; see Mismatches.
|
|
63
|
+
- Code: `src/tool-permissions.ts:107-136`, `:201-208`;
|
|
64
|
+
`src/instance-lifecycle.ts:2741` (the General instance cannot be replaced).
|
|
65
|
+
- Refs: fleet decision 9e3bea6c.
|
|
66
|
+
|
|
67
|
+
## `coordinator` tool set
|
|
68
|
+
|
|
69
|
+
`TOOL_PROFILES.coordinator = WORKER + ORCHESTRATION`: every worker ability plus
|
|
70
|
+
every verb that runs the fleet rather than does the work — for an agent that
|
|
71
|
+
runs part of the fleet.
|
|
72
|
+
|
|
73
|
+
- Can: create/delete/replace/start/stop/pause/wake/restart instances, manage
|
|
74
|
+
teams and templates, edit fleet defaults and instance config, run kiro
|
|
75
|
+
migration/reconciliation, change others' decisions and web settings
|
|
76
|
+
(`src/tool-permissions.ts:80-93`).
|
|
77
|
+
- Can't: exceed the table — anything not listed is refused, with the reason
|
|
78
|
+
naming what the instance runs under.
|
|
79
|
+
- Code: `src/tool-permissions.ts:100-107`.
|
|
80
|
+
- Refs: `docs/design/coordinator-tool-perms.zh-TW.md` (zh-TW only).
|
|
81
|
+
|
|
82
|
+
## worker
|
|
83
|
+
|
|
84
|
+
An instance doing the work under the `worker` profile — the default when no
|
|
85
|
+
`tool_set` is written (`resolveToolSet`, `src/tool-permissions.ts:201-208`).
|
|
86
|
+
|
|
87
|
+
- Can: talk to people, report to peers (`send_to_instance`, `report_result`,
|
|
88
|
+
`request_information`, `broadcast`, `delegate_task`, `delivery_status`),
|
|
89
|
+
read fleet state, run its own task cards and schedules, keep its own theme
|
|
90
|
+
and Office character.
|
|
91
|
+
- Can't: any orchestration verb. A refused call names the coordinator and
|
|
92
|
+
suggests reporting back instead (`src/tool-permissions.ts:357-374`).
|
|
93
|
+
- Code: `src/tool-permissions.ts:33-72` (`WORKER`), `:185-208`.
|
|
94
|
+
- Refs: #804, #895 (own schedules only).
|
|
95
|
+
|
|
96
|
+
## team and team leader
|
|
97
|
+
|
|
98
|
+
A team is a named group of instances (`fleet.yaml` `teams`) for targeted
|
|
99
|
+
broadcasts and display grouping. A team leader is an instance that runs a
|
|
100
|
+
team, given the `coordinator` (or `full`) tool set — a convention, not a
|
|
101
|
+
separate role in code (approved by the user 2026-11-04).
|
|
102
|
+
|
|
103
|
+
- Can: address several instances at once; group the sidebar and Office.
|
|
104
|
+
- Can't: confer any authority — no leader election, no extra tools.
|
|
105
|
+
- Code: `create_team`, `list_teams`, `update_team`, `delete_team`
|
|
106
|
+
(`src/channel/mcp-tools.ts`).
|
|
107
|
+
- Refs: —
|
|
108
|
+
|
|
109
|
+
## topic / General topic
|
|
110
|
+
|
|
111
|
+
A topic is the chat home of one instance: a Telegram forum topic (or the
|
|
112
|
+
equivalent scope on another connection) bound to it. The General topic is the
|
|
113
|
+
General instance's topic. Commands that belong to General answer "works in the
|
|
114
|
+
General topic" anywhere else.
|
|
115
|
+
|
|
116
|
+
- Can: reach exactly that instance by talking there.
|
|
117
|
+
- Can't: run General-only commands from another topic.
|
|
118
|
+
- Code: `src/topic-commands.ts:836-839` (a General command typed in an
|
|
119
|
+
instance topic points to General, never to that agent);
|
|
120
|
+
`src/locale.ts:880` ("works in the General topic");
|
|
121
|
+
`src/tool-permissions.ts:207`.
|
|
122
|
+
- Refs: —
|
|
123
|
+
|
|
124
|
+
## Classic (ClassicBot) room
|
|
125
|
+
|
|
126
|
+
A private chat or group where ClassicBot runs a single agent, managed by
|
|
127
|
+
`classicBot.yaml` — separate from fleet topics, with its own admins
|
|
128
|
+
(`defaults.admin_users`) and chat allowlists.
|
|
129
|
+
|
|
130
|
+
- Can: `/start` an agent in the room and chat with it.
|
|
131
|
+
- Can't: use fleet-topic commands or see the fleet; an unregistered chat stays
|
|
132
|
+
silent unless `/start` is allowed.
|
|
133
|
+
- Code: `src/classic-channel-manager.ts`.
|
|
134
|
+
- Refs: `docs/permissions.md`.
|
|
135
|
+
|
|
136
|
+
## web-only fleet
|
|
137
|
+
|
|
138
|
+
A fleet with no Discord or Telegram connection at all, used from the web
|
|
139
|
+
dashboard (user decision, 2026-11-01/02). Its agents run in topic mode, so they
|
|
140
|
+
can still message each other from the dashboard.
|
|
141
|
+
|
|
142
|
+
- Can: everything chat fleets do, through `/ui` instead of chat.
|
|
143
|
+
- Can't: chat ingress; `/web revoke` (there is no `/web`) — its Notice names
|
|
144
|
+
the host's way, signing every browser out.
|
|
145
|
+
- Code: `src/web-only-fleet.ts:10-22`; `src/fleet-manager.ts:7807-7808`.
|
|
146
|
+
- Refs: 28c2d3a3.
|
|
147
|
+
|
|
148
|
+
## host owner / operator
|
|
149
|
+
|
|
150
|
+
The person on the AgEnD computer. On a web-only fleet, the `agend web --code`
|
|
151
|
+
session on this computer (`HOST_OPERATOR`): it confirms its own authority and
|
|
152
|
+
answers its own prompts.
|
|
153
|
+
|
|
154
|
+
- Can: confirm web authority, sign in, approve what asks for the host operator.
|
|
155
|
+
- Can't: act as operator from another machine, or after the session was
|
|
156
|
+
revoked or ran out.
|
|
157
|
+
- Code: `src/authority/web-authority.ts` (`HOST_OPERATOR`);
|
|
158
|
+
`src/fleet-manager.ts:2056-2060`; `src/locale.ts:1505-1506`.
|
|
159
|
+
- Refs: 28c2d3a3.
|
|
160
|
+
|
|
161
|
+
## fleet admin (`admin_users`)
|
|
162
|
+
|
|
163
|
+
A platform user id listed in a channel's `access.allowed_users` (fleet), or in
|
|
164
|
+
`defaults.admin_users` / `allowed_users` (ClassicBot). Admin is granted per
|
|
165
|
+
person, never per instance. Fleet admin = the people; General = the
|
|
166
|
+
administrator agent that carries out admin work for whoever may talk to it in
|
|
167
|
+
the General topic (approved by the user 2026-11-04).
|
|
168
|
+
|
|
169
|
+
- Can: admin-gated commands, confirming sensitive changes, managing access.
|
|
170
|
+
- Can't: anything while unlisted — an empty list grants nobody, and open
|
|
171
|
+
access or pairing approval alone does not grant the role
|
|
172
|
+
(`docs/SECURITY.md:13`).
|
|
173
|
+
- Code: `src/config-validator.ts:368-376`, `:677`.
|
|
174
|
+
- Refs: —
|
|
175
|
+
|
|
176
|
+
## guest (web)
|
|
177
|
+
|
|
178
|
+
A person who is not a fleet admin, signed in on the dashboard with a guest
|
|
179
|
+
code (`web.guests`, #1920). Guests see only the agents they are granted, in
|
|
180
|
+
chat they could already use.
|
|
181
|
+
|
|
182
|
+
- Can: chat with granted agents; sign out with `/web revoke` (own sessions).
|
|
183
|
+
A Trusted guest (#2855) also gets a read-only View of those agents — for
|
|
184
|
+
Claude Code with its earlier conversation, tool results included, like
|
|
185
|
+
anyone who may open the View (#3069).
|
|
186
|
+
- Can't: admin routes, Notices, the usage report, or anything over surfaces
|
|
187
|
+
the fleet closed to guests.
|
|
188
|
+
- Code: `src/config-validator.ts:738-740`.
|
|
189
|
+
- Refs: #1920.
|
|
190
|
+
|
|
191
|
+
## tool set / tool profile (`full`, `coordinator`, `general`, `worker`, `standard`, `minimal`)
|
|
192
|
+
|
|
193
|
+
The server-side table that decides which MCP tools an instance may call
|
|
194
|
+
(`TOOL_PROFILES`, `src/tool-permissions.ts:103-155`). `defaults.tool_set`
|
|
195
|
+
applies to every instance without its own value, including General; an
|
|
196
|
+
explicit `tool_set` always wins, otherwise the General instance gets `general`
|
|
197
|
+
and everything else defaults to `worker` (`resolveToolSet`, `:201-208`).
|
|
198
|
+
|
|
199
|
+
- `full`: every tool. Set explicitly only; nothing resolves to it by default
|
|
200
|
+
(the env-only fallback excepted, `:212-222`).
|
|
201
|
+
- `coordinator`: worker abilities plus all orchestration verbs — the profile
|
|
202
|
+
for running the fleet.
|
|
203
|
+
- `general`: General's administrator profile — as of beta.8, worker plus
|
|
204
|
+
every orchestration verb (fleet decision 9e3bea6c); before beta.8 only
|
|
205
|
+
`create/start/restart/wake_instance` — and the user's web settings.
|
|
206
|
+
- `worker`: the default. Doing the work, with reporting (`report_result`)
|
|
207
|
+
that `standard` lacks.
|
|
208
|
+
- `standard`: broad read access plus own schedules and themes, but no
|
|
209
|
+
`report_result`, `delegate_task` or `request_information` — so it cannot
|
|
210
|
+
complete the delegate → work → report protocol.
|
|
211
|
+
- `minimal`: a narrow sender — reply, forward, check delivery, read decisions,
|
|
212
|
+
download, and see emoji/sticker listings.
|
|
213
|
+
- Code: `src/tool-permissions.ts:30-155`.
|
|
214
|
+
- Refs: #804.
|
|
215
|
+
|
|
216
|
+
## Needs you
|
|
217
|
+
|
|
218
|
+
The dashboard's `/ui/needs` queue plus the `needs_you` config: items parked
|
|
219
|
+
for a person — permission prompts, usage-limit holds, dialogs the agent must
|
|
220
|
+
not answer, unconfirmed deliveries.
|
|
221
|
+
|
|
222
|
+
- Can: be acknowledged per item.
|
|
223
|
+
- Can't: be answered by an agent on the person's behalf.
|
|
224
|
+
- Code: `src/config.ts:284-293`; `src/web-api.ts` (`/ui/needs/ack`);
|
|
225
|
+
`src/daemon.ts:1564`, `:2071`, `:9888`.
|
|
226
|
+
- Refs: —
|
|
227
|
+
|
|
228
|
+
## Notices
|
|
229
|
+
|
|
230
|
+
On a web-only fleet, the Notices feed (`/ui/notices`) — what General would
|
|
231
|
+
have said in chat, kept, pushed and listed. Admins only, never a guest.
|
|
232
|
+
|
|
233
|
+
- Can: be listed and marked seen.
|
|
234
|
+
- Can't: be read by guests; on a chat fleet the feed is null because General
|
|
235
|
+
says them.
|
|
236
|
+
- Code: `src/web-api.ts:2346-2349`; `src/fleet-manager.ts:7807-7808`.
|
|
237
|
+
- Refs: #2910 D2.
|
|
238
|
+
|
|
239
|
+
## delivery: ✅ 👀 ❌, "uncertain", queued hand-off (#3030)
|
|
240
|
+
|
|
241
|
+
A channel message's status reactions, driven by the delivering daemon:
|
|
242
|
+
⏳ queued (CLI busy, waiting), 👀 delivered (pasted + Enter, the agent has it),
|
|
243
|
+
✅ confirmed (processing observed, or a native queue hand-off succeeded),
|
|
244
|
+
❌ failed (window gone, retries exhausted). Cross-instance rows add two
|
|
245
|
+
states: `uncertain` — the evidence was inconclusive, so never resend and never
|
|
246
|
+
forward it as consent; and the queued hand-off (#3030) — a message handed to a
|
|
247
|
+
backend-native queue, watched in the transcript and settled ✅ when a turn
|
|
248
|
+
takes it, ❌ when it never does.
|
|
249
|
+
|
|
250
|
+
- Can: tell the sender, at a glance, how far a message got.
|
|
251
|
+
- Can't: prove permission. A receipt proves the CLI accepted the bytes, not
|
|
252
|
+
that the person authorized the act — verify the human receipt before anything
|
|
253
|
+
irreversible.
|
|
254
|
+
- Code: `src/daemon.ts:7907-7913`; `:2450-2545`; `docs/delivery-verification.md`.
|
|
255
|
+
- Refs: #3030, 7244b130, 954e5e96.
|
|
256
|
+
|
|
257
|
+
## schedule
|
|
258
|
+
|
|
259
|
+
A fleet timer: a cron line or a one-shot datetime that injects a message into
|
|
260
|
+
an instance (`create_schedule`, `list_schedules`, `update_schedule`,
|
|
261
|
+
`delete_schedule`). A non-coordinator's schedules may only target itself and
|
|
262
|
+
must be created by itself; acting on other instances' schedules takes the
|
|
263
|
+
`full`, `coordinator` or `general` profile.
|
|
264
|
+
|
|
265
|
+
- Can: wake an instance with a message on a timetable.
|
|
266
|
+
- Can't: reach beyond its scope — the target, not the tool, is the control.
|
|
267
|
+
- Code: `src/channel/mcp-tools.ts` (schedule tools);
|
|
268
|
+
`src/tool-permissions.ts:67`, `:382`.
|
|
269
|
+
- Refs: #895.
|
|
270
|
+
|
|
271
|
+
## task board card
|
|
272
|
+
|
|
273
|
+
A unit of tracked work. Main tasks `M-n` are outcomes; sub tasks `S-n` are
|
|
274
|
+
steps under a main task. States: open, claimed, review, done, blocked,
|
|
275
|
+
cancelled. A main task that waits for someone's confirmation goes to review;
|
|
276
|
+
finishing it from review with done.
|
|
277
|
+
|
|
278
|
+
- Can: carry state, acceptance, comments and results across turns and
|
|
279
|
+
instances.
|
|
280
|
+
- Can't: substitute for chat consensus — a blocked card still needs the person
|
|
281
|
+
(or the dispatcher) to answer.
|
|
282
|
+
- Code: the `task` tool (`src/channel/mcp-tools.ts:79-80`).
|
|
283
|
+
- Refs: —
|
|
284
|
+
|
|
285
|
+
## decision
|
|
286
|
+
|
|
287
|
+
A recorded agreement (`post_decision`, `list_decisions`), scoped to a project
|
|
288
|
+
directory or to the whole fleet. Decisions are the fleet's memory of why,
|
|
289
|
+
readable with `list_decisions`.
|
|
290
|
+
|
|
291
|
+
- Can: record agreements agents and people consult later.
|
|
292
|
+
- Can't: enforce itself — code that never reads a decision is not bound by it
|
|
293
|
+
(see Mismatches).
|
|
294
|
+
- Code: `post_decision`, `list_decisions` tool definitions.
|
|
295
|
+
- Refs: —
|
|
296
|
+
|
|
297
|
+
## credential profile
|
|
298
|
+
|
|
299
|
+
A named credential set for one backend (`CREDENTIAL_HOMES`), so one fleet can
|
|
300
|
+
act under several accounts. `/login <backend> <profile>` signs a profile in;
|
|
301
|
+
chat sign-in from the fleet exists for some backends only.
|
|
302
|
+
|
|
303
|
+
- Can: separate accounts per instance or backend.
|
|
304
|
+
- Can't: share across backends — a profile belongs to its backend's home.
|
|
305
|
+
- Code: `src/backend/credential-profile.ts:5-13`, `:266-295`.
|
|
306
|
+
- Refs: —
|
|
307
|
+
|
|
308
|
+
## native Windows agent / paired PC / runtime
|
|
309
|
+
|
|
310
|
+
Today AgEnD runs on Linux and macOS (on Windows: under WSL, with desktop
|
|
311
|
+
shortcuts from `agend shortcuts`). The rest is alpha only
|
|
312
|
+
(`origin/release/2.3.5-alpha`, adapting the external #2934 — decision
|
|
313
|
+
72353fdf).
|
|
314
|
+
|
|
315
|
+
- A native Windows agent uses this PC's Windows-side CLI: AgEnD in WSL
|
|
316
|
+
discovers native Windows CLIs and runs Windows agents in the same fleet
|
|
317
|
+
registry as Linux agents (`runtimes.windows_cli`, off by default).
|
|
318
|
+
- A paired PC is another Windows computer connected over HTTPS: it runs the
|
|
319
|
+
small `agend-runtime` runner (a ZIP from Settings, never a fleet), connects
|
|
320
|
+
outbound with a one-time pairing code, and joins only after its pairing
|
|
321
|
+
fingerprint is approved in Settings (#2936). Agents pinned to it keep their
|
|
322
|
+
working directories on that PC.
|
|
323
|
+
- General can run on a Windows pane: "Run General on" moves General to an
|
|
324
|
+
approved, online paired PC while the coordinator — and chat and
|
|
325
|
+
administrator authority — stay on the host (#3007).
|
|
326
|
+
- Pairing of people (`agend access pair`) is the separate, older mechanism:
|
|
327
|
+
per-instance access codes, unrelated to paired PCs.
|
|
328
|
+
- Code (alpha branch): `docs/remote-runtime.md`, `docs/windows-cli-preview.md`,
|
|
329
|
+
`docs/windows-general.md`; `src/runtime-bundle.ts`.
|
|
330
|
+
- Refs: 72353fdf, #2936, #3007.
|
|
331
|
+
|
|
332
|
+
## public link (quick vs named)
|
|
333
|
+
|
|
334
|
+
Temporary dashboard access for someone off the host. Quick: an auto-made
|
|
335
|
+
`trycloudflare.com` tunnel URL with a short TTL. Named: the operator's own
|
|
336
|
+
hostname, with a longer TTL. Guests may ride an open public link, but never
|
|
337
|
+
with authority.
|
|
338
|
+
|
|
339
|
+
- Can: show the dashboard (and, if switched on, search, the usage report,
|
|
340
|
+
Office shares) without a chat account.
|
|
341
|
+
- Can't: admin surfaces that require the dashboard reached directly (guests,
|
|
342
|
+
web authority, the dashboard's own web settings).
|
|
343
|
+
- Code: `src/config-validator.ts:424-429`;
|
|
344
|
+
`src/office-share-service.ts:6` (quick-tunnel 429s);
|
|
345
|
+
`src/public-preview.ts:4-5`.
|
|
346
|
+
- Refs: `docs/named-tunnel.md`.
|
|
347
|
+
|
|
348
|
+
## connections from outside (alpha only)
|
|
349
|
+
|
|
350
|
+
`origin/release/2.3.5-alpha`: a web-only fleet may open itself to the
|
|
351
|
+
internet — "Allow connections from outside" — and sign the outside browser in
|
|
352
|
+
with an authenticator-app TOTP code (#3008; fleet decision 0471da59).
|
|
353
|
+
|
|
354
|
+
- Can (alpha): reach the dashboard from outside without a tunnel the operator
|
|
355
|
+
builds; sign in with the authenticator app's code.
|
|
356
|
+
- Can't: use it on main today — alpha only.
|
|
357
|
+
- Code (alpha branch): `src/auth-api.ts` (`/auth/totp`);
|
|
358
|
+
`src/authority/web-authority.ts`.
|
|
359
|
+
- Refs: #3008, fleet decision 0471da59.
|
|
360
|
+
|
|
361
|
+
## web session and the verified web go-ahead
|
|
362
|
+
|
|
363
|
+
A web session is a signed-in browser (dashboard reached directly, a LAN, a
|
|
364
|
+
tailnet, or opt-in over a link). A session carries the account's authority —
|
|
365
|
+
its messages read as `via web (verified)` — only after that account confirms
|
|
366
|
+
on Discord or Telegram (#1939); a guest session never qualifies. Agents check a
|
|
367
|
+
`web-verified` receipt like a Discord or Telegram message. A go-ahead action
|
|
368
|
+
(anything destructive, irreversible, spending, or authority-granting) needs a
|
|
369
|
+
Discord/Telegram receipt or a `web (verified)` one — an open browser alone
|
|
370
|
+
proves nothing.
|
|
371
|
+
|
|
372
|
+
- Can: with verification, stand behind the same acts as a chat message.
|
|
373
|
+
- Can't: without it, authorize anything; plain `via web` and guests never
|
|
374
|
+
carry authority.
|
|
375
|
+
- Code: `src/authority/web-authority.ts`;
|
|
376
|
+
`src/config-validator.ts:517-522` (`web.verified_authority`).
|
|
377
|
+
- Refs: #1939.
|
|
378
|
+
|
|
379
|
+
## Mismatches
|
|
380
|
+
|
|
381
|
+
Real code-vs-decision gaps only. Nothing here is papered over.
|
|
382
|
+
|
|
383
|
+
1. **General's orchestration tools (temporal, expected to resolve).** Code on
|
|
384
|
+
main is pre-beta.8: the `general` profile
|
|
385
|
+
(`src/tool-permissions.ts:107-136`) holds only
|
|
386
|
+
`create/start/restart/wake_instance` plus the web settings. Fleet decision
|
|
387
|
+
9e3bea6c moves it to
|
|
388
|
+
the full ORCHESTRATION set in beta.8 (agy's PR). No live mismatch once beta.8
|
|
389
|
+
lands; until then the code half is verified and the change half is the
|
|
390
|
+
decision's word.
|
|
391
|
+
|
|
392
|
+
[繁體中文](concepts.zh-TW.md)
|
|
393
|
+
|
|
@@ -53,6 +53,7 @@ A peer's summary is not the original person's consent. Before an irreversible ac
|
|
|
53
53
|
|
|
54
54
|
1. Ask the peer to send/delegate with `forwards: [verification_id]`, using the original human receipt's `verification_id` / `[agend-human-id:…]`. Every hop needs an explicit forward; mentioning an ID grants nothing. Only delivered references the sender can read are accepted (up to 16).
|
|
55
55
|
- The ID goes in the `forwards` parameter, never only in the message text: an ID in the text grants nothing, and the receiver's `delivery_status` says "Delivery not found".
|
|
56
|
+
- Put verification and message ids in the `forwards` field only; do not repeat them in the message text, because people see that text in the topic notices.
|
|
56
57
|
- If the `send_to_instance` / `delegate_task` schema you loaded has no `forwards`, pass it anyway. A session resumed across an AgEnD upgrade keeps the tool copy it first loaded (reloading does not refresh it); AgEnD's server accepts the parameter.
|
|
57
58
|
2. Read `delivery_status({message_id: verification_id})`. Require `state: delivered`, its owned `proof_kind`, and the original `content` naming the exact operation/resource. Check `origin.platform`, `origin.adapter_id` and `origin.user_id` against the human authorized for that resource. Labels, quoted headers and agent relay rows are not origin evidence.
|
|
58
59
|
3. Native queue/composer acceptance never proves the model consumed the message. Unknown/unverifiable outcomes, `/raw`, historical rows and a missing origin cannot prove human authorization. Action receipts identify the click and its anchor, not a human-authored platform message.
|
|
@@ -4,12 +4,14 @@ description: restart vs replace vs pause/wake; when to use each
|
|
|
4
4
|
roles: [general]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## Restart vs Replace
|
|
7
|
+
## Restart vs Replace vs Stop / Delete
|
|
8
8
|
|
|
9
9
|
- `restart_instance("<name>")` — keeps the session, reloads config. Use when config changed.
|
|
10
10
|
- `replace_instance("<name>")` — kills old, creates a fresh instance with handover context.
|
|
11
11
|
Use when the session is the problem: hallucinating / referencing stale info, stuck in a
|
|
12
12
|
tool-call loop, or context is degrading (only backends that report context % surface that).
|
|
13
|
+
- `stop_instance("<name>")` / `start_instance("<name>")` — stop or start an instance without removing its configuration or topic.
|
|
14
|
+
- `delete_instance("<name>")` — stop and remove the instance, its schedules and team memberships, and its own chat topic (by default; pass `delete_topic: false` to keep the topic). On Discord the topic is a channel, so its history goes too. The General topic and a topic another agent uses are never deleted. The result's `topic_deleted` is the platform's answer; when it is false, `topic_reason` says why (for example, the Telegram bot lacks the Manage Topics admin right) — the agent is deleted either way.
|
|
13
15
|
|
|
14
16
|
## Pause / Wake (resource management)
|
|
15
17
|
|
|
@@ -10,6 +10,24 @@ roles: [general]
|
|
|
10
10
|
instances as configured, so AgEnD stopped them and will not retry.
|
|
11
11
|
- Or the user asks about kiro's engine change: Classic/legacy UI being deprecated, kiro-cli 3.0, or V3.
|
|
12
12
|
|
|
13
|
+
## Kiro CLI 3.0: current refusal and migration instructions
|
|
14
|
+
|
|
15
|
+
Kiro CLI 3.0 removed Classic. AgEnD refuses a Classic launch on major 3 or later before launching it or changing
|
|
16
|
+
its saved conversation. Needs you names the Agent and explains how to continue. If a retirement/V2-V3 choice appears
|
|
17
|
+
in an already running pane, AgEnD blocks messages and leaves the choice to the owner; never answer it for them.
|
|
18
|
+
An explicitly pinned TUI/V2 launch remains allowed: it is not a Classic launch.
|
|
19
|
+
|
|
20
|
+
For Classic today, ask the host owner to use a compatible Kiro CLI 2.x. The existing admin-confirmed Classic→TUI
|
|
21
|
+
migration below requires **2.34+ within 2.x**, not 3.x. Do not remove the migration version fence or edit `kiro_ui` to
|
|
22
|
+
bypass it. Keep the original pin, history and receipts; never resume a frozen Classic copy after work continued on V2.
|
|
23
|
+
|
|
24
|
+
The guided **admin-confirmed migration on 2.x followed by a safe upgrade to 3.0 (plan C, #3047)** is coming separately.
|
|
25
|
+
It is not implemented by this refusal/Needs-you change. Do not promise an automatic conversion or an upgrade date.
|
|
26
|
+
|
|
27
|
+
繁體中文:Kiro CLI 3.0 已移除 Classic。請由主機管理者改用相容的 2.x;這個拒絕啟動的保護不會更動已存對話。
|
|
28
|
+
既有管理員確認的 Classic→TUI 遷移只接受 2.34 以上的 **2.x**。先在 2.x 經管理員確認遷移、再安全升級到 3.0
|
|
29
|
+
的引導流程(計畫 C,#3047)會另外提供,並未包含在這次保護裡。不要直接改 `kiro_ui` 或刪除版本檢查來繞過。
|
|
30
|
+
|
|
13
31
|
## What is true
|
|
14
32
|
|
|
15
33
|
- **Each kiro instance's conversation lives in its engine's own store:**
|
|
@@ -56,11 +74,30 @@ The user has already been shown the plain notice in this topic. When they ask, e
|
|
|
56
74
|
- Never run `kiro-cli` yourself, and never delete or edit anything under `~/.kiro` or kiro's data directory.
|
|
57
75
|
- Never reply to the `[system:kiro-incompat]` notice itself. It is information, not a request.
|
|
58
76
|
|
|
77
|
+
## Preparing for Kiro CLI 3.x
|
|
78
|
+
|
|
79
|
+
1. Call `kiro_engine_status` with no name filter. Its `kiro3_readiness` summary counts **all** Kiro Agents and
|
|
80
|
+
Classic rooms, including General; filtering to one Agent still keeps that whole-fleet count. A Classic Agent
|
|
81
|
+
is not ready for Kiro 3.x. This readiness describes the removal of Classic, not a promise that every 3.x
|
|
82
|
+
release supports every session or tool.
|
|
83
|
+
2. Keep a compatible Kiro **2.x** installed. For each Classic fleet Agent, ask the owner to confirm the existing
|
|
84
|
+
`migrate_kiro_instance` move described below. Do not change `kiro_ui` by hand. Wait for the same conversation
|
|
85
|
+
and model to pass both verification starts; failure stops the Agent for inspection. The migration itself is
|
|
86
|
+
unchanged and is not available on 3.x.
|
|
87
|
+
3. A **ClassicBot room** cannot use `migrate_kiro_instance`: its owner must change the room to another backend
|
|
88
|
+
in Classic settings, or continue using Kiro 2.x. Such rooms count as still Classic until their effective Kiro
|
|
89
|
+
configuration no longer selects Classic. Do not present a fleet-Agent migration tool as room recovery.
|
|
90
|
+
4. Check `kiro_engine_status` again: every remaining Kiro Agent must use TUI (or already use V3), and the
|
|
91
|
+
`still_classic` count must be zero before recommending an upgrade. General is subject to the same check.
|
|
92
|
+
5. The owner then upgrades Kiro themselves. AgEnD neither installs the CLI nor answers a V2/V3 menu. If a menu
|
|
93
|
+
or an unverified resume blocks startup, inspect Needs-you; do not clear the pin or start a fresh conversation
|
|
94
|
+
to make the check pass. The version-specific exact-resume evidence is documented separately from readiness.
|
|
95
|
+
|
|
59
96
|
## Moving an instance from classic to the TUI engine (#2598)
|
|
60
97
|
|
|
61
98
|
kiro-cli 3.0 drops the classic engine (`kiro_ui: legacy`), so classic instances are being moved to the TUI engine,
|
|
62
|
-
**one batch at a time and only with the user's OK for that batch**. The move is `migrate_kiro_instance` (
|
|
63
|
-
|
|
99
|
+
**one batch at a time and only with the user's OK for that batch**. The move is `migrate_kiro_instance` (available
|
|
100
|
+
in the `general`, `coordinator` and `full` tool sets). It carries the conversation: the instance's classic conversation is
|
|
64
101
|
resumed once under the TUI and becomes its own. A fleet admin confirms each move in this General topic: a
|
|
65
102
|
"Move it / Cancel" prompt. Explain it if asked; never press it on the user's behalf.
|
|
66
103
|
|
|
@@ -92,8 +129,8 @@ session identity after `/chat` or `/clear`.
|
|
|
92
129
|
this instance's. When it can't be proven, or the check passes its 30 s / 2 GiB limit, the instance resumes the
|
|
93
130
|
conversation on record and the Log tab says why.
|
|
94
131
|
- **Two conversations after an interrupted carry (#2753).** When a stopped TUI instance has its original carried
|
|
95
|
-
conversation and a newer one with work, recovery holds instead of choosing. `reconcile_kiro_instance` (
|
|
96
|
-
coordinator tool sets) asks a fleet admin to confirm, in General, keeping the original and archiving the named
|
|
132
|
+
conversation and a newer one with work, recovery holds instead of choosing. `reconcile_kiro_instance` (general,
|
|
133
|
+
coordinator and full tool sets) asks a fleet admin to confirm, in General, keeping the original and archiving the named
|
|
97
134
|
newer one intact. Offer it only after the user chose those exact ids; docs/kiro-reconciliation.md explains it.
|
|
98
135
|
- **"Kiro's terminal is in use by another program" (#2682).** While a kiro pane runs `/editor`, `/transcript`, a
|
|
99
136
|
`!` command or a focused `/kvim` panel (legacy: `/editor`, `/reply`, `!`), AgEnD holds deliveries. Tell the user
|
|
@@ -25,6 +25,7 @@ capability (cheap/fast vs deep reasoning), or the backend needs one to behave
|
|
|
25
25
|
| codex | account default | |
|
|
26
26
|
| grok | account default | |
|
|
27
27
|
| antigravity | account default | |
|
|
28
|
+
| muse | account default | `list_models` reads the provider catalog muse caches on disk (no models subcommand) |
|
|
28
29
|
| opencode | provider default | ids are **`provider/model`**, as `opencode models` prints them |
|
|
29
30
|
|
|
30
31
|
## Discover real names
|
|
@@ -53,6 +54,7 @@ Underlying commands, if you need them by hand:
|
|
|
53
54
|
| antigravity | `agy models` |
|
|
54
55
|
| codex | `codex debug models` (with its CODEX_HOME set) — refreshes `models_cache.json` when it is older than a few minutes |
|
|
55
56
|
| claude-code | fixed alias set (no command) |
|
|
57
|
+
| muse | none (no models subcommand) — use `list_models`; it reads muse's on-disk `model-catalog/<provider>__<profile>.json` |
|
|
56
58
|
|
|
57
59
|
## Setting one on create_instance
|
|
58
60
|
|
|
@@ -311,7 +311,7 @@ tools are not in your list), you can publish them yourself instead of asking a p
|
|
|
311
311
|
refused and you send the change again (#2695).
|
|
312
312
|
- `office_pack_restore { id }` brings back the previous version (the replaced one becomes the previous);
|
|
313
313
|
`office_pack_delete { id, keep_previous? }`; `office_set_style { office, pack }` points a stored office at a pack or a
|
|
314
|
-
built-in style (pixel, studio, cozy).
|
|
314
|
+
built-in style (pixel, studio, cozy, guild, school).
|
|
315
315
|
- Every change is logged with each picture's sha256 and told to the fleet's admins. At most **20 batches and 200 MiB an
|
|
316
316
|
hour**: one call is one batch (up to 16 packs), so send a whole set of fixes in one `packs: [...]`.
|
|
317
317
|
- `office_pack_check` has its own allowance: at most **60 checks and 1 GiB (as sent) an hour**. Every check counts,
|