@songsid/agend 2.3.2-beta.9 → 2.3.2
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 +6 -0
- package/README.zh-TW.md +6 -0
- package/dist/agent-cli.js +48 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +6 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.js +3 -0
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.js +2 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/claude-code.js +23 -1
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-session-lookup.d.ts +15 -0
- package/dist/backend/codex-session-lookup.js +58 -0
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex.js +15 -4
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/kiro-classic-archive.d.ts +57 -0
- package/dist/backend/kiro-classic-archive.js +622 -0
- package/dist/backend/kiro-classic-archive.js.map +1 -0
- package/dist/backend/kiro-classic-links.d.ts +24 -0
- package/dist/backend/kiro-classic-links.js +135 -0
- package/dist/backend/kiro-classic-links.js.map +1 -0
- package/dist/backend/kiro-identity.d.ts +100 -1
- package/dist/backend/kiro-identity.js +262 -31
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro-migration-verify.d.ts +10 -0
- package/dist/backend/kiro-migration-verify.js +52 -0
- package/dist/backend/kiro-migration-verify.js.map +1 -0
- package/dist/backend/kiro-reconcile-store.d.ts +27 -0
- package/dist/backend/kiro-reconcile-store.js +344 -0
- package/dist/backend/kiro-reconcile-store.js.map +1 -0
- package/dist/backend/kiro-v2-store-worker.js +35 -1
- package/dist/backend/kiro-v2-store-worker.js.map +1 -1
- package/dist/backend/kiro-v2-store.d.ts +31 -1
- package/dist/backend/kiro-v2-store.js +22 -12
- package/dist/backend/kiro-v2-store.js.map +1 -1
- package/dist/backend/kiro.d.ts +124 -1
- package/dist/backend/kiro.js +553 -29
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +102 -0
- package/dist/backend/types.js +9 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/cache-service.d.ts +13 -1
- package/dist/cache-service.js +45 -2
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/ipc-timeouts.js +3 -0
- package/dist/channel/ipc-timeouts.js.map +1 -1
- package/dist/channel/mcp-tools.js +40 -5
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/tool-router.js +2 -1
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/classic-channel-manager.d.ts +6 -0
- package/dist/classic-channel-manager.js +25 -0
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +50 -4
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.d.ts +7 -1
- package/dist/config-validator.js +17 -8
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +66 -0
- package/dist/daemon.js +421 -19
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +15 -4
- package/dist/dashboard-permissions.js +49 -23
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/doctor.js +2 -1
- package/dist/doctor.js.map +1 -1
- package/dist/fleet-control-audit.d.ts +1 -1
- package/dist/fleet-control-audit.js +3 -0
- package/dist/fleet-control-audit.js.map +1 -1
- package/dist/fleet-manager.d.ts +90 -3
- package/dist/fleet-manager.js +569 -41
- package/dist/fleet-manager.js.map +1 -1
- package/dist/forged-envelope-scan.d.ts +9 -0
- package/dist/forged-envelope-scan.js +30 -5
- package/dist/forged-envelope-scan.js.map +1 -1
- package/dist/general-instance.d.ts +24 -0
- package/dist/general-instance.js +53 -0
- package/dist/general-instance.js.map +1 -1
- package/dist/general-knowledge/skills/docker-install/SKILL.md +25 -0
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -3
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +34 -0
- package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +32 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +32 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +57 -17
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +57 -17
- package/dist/instance-config-impact.js +3 -2
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +4 -0
- package/dist/instance-lifecycle.js +7 -0
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/kiro-migrate.d.ts +19 -2
- package/dist/kiro-migrate.js +133 -35
- package/dist/kiro-migrate.js.map +1 -1
- package/dist/kiro-reconcile.d.ts +21 -0
- package/dist/kiro-reconcile.js +88 -0
- package/dist/kiro-reconcile.js.map +1 -0
- package/dist/kiro-session-proof.d.ts +41 -0
- package/dist/kiro-session-proof.js +89 -0
- package/dist/kiro-session-proof.js.map +1 -0
- package/dist/kiro-tui-forensic.d.ts +19 -0
- package/dist/kiro-tui-forensic.js +124 -0
- package/dist/kiro-tui-forensic.js.map +1 -0
- package/dist/locale.js +198 -0
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +2 -2
- package/dist/log-service.js.map +1 -1
- package/dist/needs-you.d.ts +3 -1
- package/dist/needs-you.js +4 -2
- package/dist/needs-you.js.map +1 -1
- package/dist/office-levels.d.ts +64 -0
- package/dist/office-levels.js +66 -0
- package/dist/office-levels.js.map +1 -0
- package/dist/office-share-page.d.ts +3 -1
- package/dist/office-share-page.js +8 -3
- package/dist/office-share-page.js.map +1 -1
- package/dist/office-share-service.d.ts +6 -3
- package/dist/office-share-service.js +12 -8
- package/dist/office-share-service.js.map +1 -1
- package/dist/office-share.d.ts +45 -8
- package/dist/office-share.js +75 -15
- package/dist/office-share.js.map +1 -1
- package/dist/outbound-handlers.js +20 -1
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +47 -2
- package/dist/outbound-schemas.js +41 -2
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +1 -1
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/quickstart-api.d.ts +39 -1
- package/dist/quickstart-api.js +115 -17
- package/dist/quickstart-api.js.map +1 -1
- package/dist/remote-card-answer.d.ts +83 -0
- package/dist/remote-card-answer.js +208 -0
- package/dist/remote-card-answer.js.map +1 -0
- package/dist/remote-card-prompt.d.ts +38 -0
- package/dist/remote-card-prompt.js +86 -0
- package/dist/remote-card-prompt.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +28 -6
- package/dist/scheduler/task-board.js +66 -11
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/service-installer.d.ts +13 -0
- package/dist/service-installer.js +15 -0
- package/dist/service-installer.js.map +1 -1
- package/dist/service-owner.d.ts +25 -0
- package/dist/service-owner.js +43 -2
- package/dist/service-owner.js.map +1 -1
- package/dist/settings-api.d.ts +2 -0
- package/dist/settings-api.js +18 -12
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +10 -5
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +7 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-instance-patch.js +1 -1
- package/dist/settings-instance-patch.js.map +1 -1
- package/dist/setup-form.d.ts +2 -2
- package/dist/setup-form.js +139 -93
- package/dist/setup-form.js.map +1 -1
- package/dist/setup-i18n.d.ts +25 -0
- package/dist/setup-i18n.js +226 -0
- package/dist/setup-i18n.js.map +1 -0
- package/dist/task-board-waker.js +7 -2
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tool-permissions.js +18 -0
- package/dist/tool-permissions.js.map +1 -1
- package/dist/transcript-sources.d.ts +1 -0
- package/dist/transcript-sources.js +20 -3
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/ui/backend-signin.js +4 -3
- package/dist/ui/chat-store.js +3 -2
- package/dist/ui/chat-strings.js +2 -2
- package/dist/ui/fleet-office-card.js +114 -0
- package/dist/ui/fleet-office-editor.js +81 -9
- package/dist/ui/fleet-office-layout.js +56 -11
- package/dist/ui/fleet-office-levels.js +105 -0
- package/dist/ui/fleet-office-model.js +9 -1
- package/dist/ui/fleet-office-pack.d.ts +15 -3
- package/dist/ui/fleet-office-pack.js +177 -23
- package/dist/ui/fleet-office-skin.js +39 -3
- package/dist/ui/fleet-office-store.js +74 -3
- package/dist/ui/fleet-office-view.js +8 -0
- package/dist/ui/fleet-office-zones.js +102 -19
- package/dist/ui/fleet-office.js +308 -44
- package/dist/ui/fleet-org.js +2 -0
- package/dist/ui/fleet-task-card.js +2 -2
- package/dist/ui/fleet-task-common.js +30 -7
- package/dist/ui/fleet-task-work.js +2 -2
- package/dist/ui/fleet-tasks.js +10 -11
- package/dist/ui/office-share-dialog.js +31 -7
- package/dist/ui/office-share-page.js +1 -0
- package/dist/ui/panel-chat.js +14 -2
- package/dist/ui/panel-log.js +4 -4
- package/dist/ui/panel-needs.js +1 -1
- package/dist/ui/panel-settings.js +16 -8
- package/dist/ui/settings-discord.js +3 -2
- package/dist/ui/settings-guests.js +17 -7
- package/dist/ui/settings-model.js +17 -9
- package/dist/ui/settings-registry.js +1 -0
- package/dist/ui/settings-strings.js +16 -4
- package/dist/ui/settings-token.js +3 -2
- package/dist/ui/settings-wizard.js +25 -9
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-stream.js +1 -1
- package/dist/ui/shared/app.css +70 -2
- package/dist/ui/shared/setup-host-text.js +107 -0
- package/dist/ui/structured-signin.js +89 -38
- package/dist/usage-rollup.d.ts +34 -3
- package/dist/usage-rollup.js +56 -3
- package/dist/usage-rollup.js.map +1 -1
- package/dist/web-api.d.ts +10 -1
- package/dist/web-api.js +207 -17
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.js +1 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-office-acts.d.ts +5 -2
- package/dist/web-office-acts.js +9 -4
- package/dist/web-office-acts.js.map +1 -1
- package/dist/web-office-pack-read.d.ts +35 -0
- package/dist/web-office-pack-read.js +252 -0
- package/dist/web-office-pack-read.js.map +1 -0
- package/dist/web-office-pack-tools.d.ts +241 -0
- package/dist/web-office-pack-tools.js +785 -0
- package/dist/web-office-pack-tools.js.map +1 -0
- package/dist/web-office-skins.d.ts +68 -4
- package/dist/web-office-skins.js +324 -33
- package/dist/web-office-skins.js.map +1 -1
- package/dist/web-office-store.d.ts +47 -4
- package/dist/web-office-store.js +124 -23
- package/dist/web-office-store.js.map +1 -1
- package/dist/web-settings-patch.d.ts +3 -1
- package/dist/web-settings-patch.js +4 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +2 -2
- package/templates/windows-shortcuts.ps1 +18 -17
package/dist/kiro-migrate.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { armKiroTuiMigration, disarmKiroTuiMigration, inspectKiroTuiMigration } from "./backend/kiro-identity.js";
|
|
1
|
+
import { armKiroTuiMigration, disarmKiroTuiMigration, followKiroClassicCompaction, inspectKiroTuiMigration, } from "./backend/kiro-identity.js";
|
|
2
2
|
import { instanceCredentialProfile } from "./backend/credential-profile.js";
|
|
3
3
|
import { t } from "./locale.js";
|
|
4
4
|
function target(deps, name) {
|
|
@@ -23,8 +23,35 @@ function target(deps, name) {
|
|
|
23
23
|
function refusal(name, m) {
|
|
24
24
|
return t(`kiro_migrate.refused_${m.reason.replaceAll("-", "_")}`, name);
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* #2714: classic kiro's /compact goes on in a new conversation, and the record follows it only on the next classic
|
|
28
|
+
* launch. A compacted instance that has not restarted since would carry its pre-compaction copy, so the carried id is
|
|
29
|
+
* where the same proven walk ends (followKiroClassicCompaction). Anything it cannot prove refuses the move: the move
|
|
30
|
+
* is one-way, and carrying the recorded id would leave the newer conversation behind on the frozen engine.
|
|
31
|
+
* `apply` records the walk, as a classic launch would (only once the admin confirmed and the instance was checked).
|
|
32
|
+
*/
|
|
33
|
+
async function carriedClassic(deps, name, workingDirectory, credentialProfile, recorded, apply, admitted = () => { }) {
|
|
34
|
+
const store = await deps.readClassicStore(workingDirectory, credentialProfile);
|
|
35
|
+
// #2738: the store is read on a worker lane, and the move may have been superseded meanwhile — asked again here,
|
|
36
|
+
// before the walk claims or records anything (it throws when the move is no longer this one's).
|
|
37
|
+
admitted();
|
|
38
|
+
const walk = followKiroClassicCompaction({ agendHome: deps.agendHome, instance: name, workingDirectory, credentialProfile,
|
|
39
|
+
readStore: () => store, apply });
|
|
40
|
+
if (!walk)
|
|
41
|
+
return { ok: true, id: recorded, compactedFrom: [] };
|
|
42
|
+
if (walk.kept)
|
|
43
|
+
return { ok: false, error: t("kiro_migrate.refused_compaction", name, walk.id, compactionReason(walk)) };
|
|
44
|
+
return { ok: true, id: walk.id, compactedFrom: walk.followed };
|
|
45
|
+
}
|
|
46
|
+
function compactionReason(walk) {
|
|
47
|
+
const kept = walk.kept;
|
|
48
|
+
return kept.reason === "unreadable" ? t("kiro_migrate.compaction_unreadable")
|
|
49
|
+
: kept.reason === "over-budget" ? t("kiro_migrate.compaction_over_budget")
|
|
50
|
+
: kept.reason === "ambiguous" ? t("kiro_migrate.compaction_ambiguous", kept.from, kept.candidates.join(", "))
|
|
51
|
+
: t("kiro_migrate.compaction_not_ours", kept.from, kept.candidate);
|
|
52
|
+
}
|
|
26
53
|
/** Judge a request; nothing is written. `startFresh` allows moving an instance that has no classic conversation. */
|
|
27
|
-
export function planKiroMigration(deps, name, startFresh) {
|
|
54
|
+
export async function planKiroMigration(deps, name, startFresh) {
|
|
28
55
|
const found = target(deps, name);
|
|
29
56
|
if (typeof found === "string")
|
|
30
57
|
return { ok: false, error: found };
|
|
@@ -33,15 +60,22 @@ export function planKiroMigration(deps, name, startFresh) {
|
|
|
33
60
|
return { ok: false, error: refusal(name, inspected) };
|
|
34
61
|
if (!inspected.classicId && !startFresh)
|
|
35
62
|
return { ok: false, error: t("kiro_migrate.no_classic", name) };
|
|
36
|
-
|
|
63
|
+
const carried = inspected.classicId ? await carriedClassic(deps, name, found.workingDirectory, found.credentialProfile, inspected.classicId, false) : null;
|
|
64
|
+
if (carried && !carried.ok)
|
|
65
|
+
return carried;
|
|
66
|
+
return { ok: true, plan: { name, workingDirectory: found.workingDirectory, credentialProfile: found.credentialProfile, classicId: carried?.id ?? null,
|
|
67
|
+
...(carried?.compactedFrom.length ? { compactedFrom: carried.compactedFrom } : {}) } };
|
|
37
68
|
}
|
|
38
69
|
/** The confirmation prompt's text. */
|
|
39
70
|
export function kiroMigrationPrompt(plan, running) {
|
|
40
71
|
return [
|
|
41
72
|
t("kiro_migrate.prompt_title", plan.name),
|
|
42
73
|
plan.classicId ? t("kiro_migrate.prompt_carry", plan.classicId) : t("kiro_migrate.prompt_fresh"),
|
|
74
|
+
...(plan.compactedFrom?.length ? [t("kiro_migrate.prompt_compacted", plan.compactedFrom[0], plan.classicId)] : []),
|
|
43
75
|
t("kiro_migrate.prompt_one_way"),
|
|
44
|
-
|
|
76
|
+
t("kiro_migrate.prompt_verify"),
|
|
77
|
+
t("kiro_migrate.prompt_sudo"),
|
|
78
|
+
running ? t("kiro_migrate.prompt_restart") : t("kiro_migrate.prompt_start_verify"),
|
|
45
79
|
].join("\n");
|
|
46
80
|
}
|
|
47
81
|
/**
|
|
@@ -56,50 +90,114 @@ export async function applyKiroMigration(deps, plan) {
|
|
|
56
90
|
const again = inspectKiroTuiMigration({ agendHome: deps.agendHome, instance: plan.name, workingDirectory: found.workingDirectory, credentialProfile: found.credentialProfile });
|
|
57
91
|
if (again.kind === "refused")
|
|
58
92
|
return { ok: false, text: refusal(plan.name, again) };
|
|
59
|
-
|
|
93
|
+
const judged = again.classicId ? await carriedClassic(deps, plan.name, found.workingDirectory, found.credentialProfile, again.classicId, false) : null;
|
|
94
|
+
if (judged && !judged.ok)
|
|
95
|
+
return { ok: false, text: judged.error };
|
|
96
|
+
if (found.workingDirectory !== plan.workingDirectory || found.credentialProfile !== plan.credentialProfile || (judged?.id ?? null) !== plan.classicId) {
|
|
60
97
|
return { ok: false, text: t("kiro_migrate.changed", plan.name) };
|
|
61
98
|
}
|
|
62
|
-
|
|
63
|
-
const before = inst.kiro_ui;
|
|
64
|
-
const restoreConfig = () => { if (before === undefined)
|
|
65
|
-
delete inst.kiro_ui;
|
|
66
|
-
else
|
|
67
|
-
inst.kiro_ui = before; };
|
|
68
|
-
inst.kiro_ui = "tui";
|
|
99
|
+
let lease;
|
|
69
100
|
try {
|
|
70
|
-
deps.
|
|
101
|
+
lease = deps.reserve(plan.name);
|
|
71
102
|
}
|
|
72
103
|
catch (err) {
|
|
73
|
-
|
|
74
|
-
return { ok: false, text: t("kiro_migrate.save_failed", plan.name, err.message) };
|
|
104
|
+
return { ok: false, text: t("kiro_migrate.failed", plan.name, err.message) };
|
|
75
105
|
}
|
|
76
|
-
|
|
77
|
-
|
|
106
|
+
let switched = false;
|
|
107
|
+
const configuredModel = found.inst.model;
|
|
108
|
+
const current = () => {
|
|
109
|
+
if (!lease.current())
|
|
110
|
+
throw new Error(t("kiro_migrate.superseded"));
|
|
111
|
+
const config = deps.fleetConfig(), inst = config?.instances[plan.name];
|
|
112
|
+
if (!inst || inst.model !== configuredModel || (inst.backend ?? config?.defaults?.backend ?? "claude-code") !== "kiro-cli"
|
|
113
|
+
|| (inst.kiro_ui ?? "legacy") !== (switched ? "tui" : "legacy") || inst.working_directory !== plan.workingDirectory
|
|
114
|
+
|| instanceCredentialProfile(inst, config?.defaults, "kiro-cli") !== plan.credentialProfile)
|
|
115
|
+
throw new Error(t("kiro_migrate.superseded"));
|
|
116
|
+
};
|
|
78
117
|
try {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
118
|
+
const model = await deps.preflight(plan.name, plan);
|
|
119
|
+
current();
|
|
120
|
+
// The idle/version check awaited: re-check the original pin before any write. #2714: a compaction proven since
|
|
121
|
+
// the record was written is recorded first, as a classic launch would, so the pin checked and armed is where the
|
|
122
|
+
// conversation is now; one that cannot be proven any more refuses, and nothing is armed.
|
|
123
|
+
const pinned = inspectKiroTuiMigration({ agendHome: deps.agendHome, instance: plan.name, workingDirectory: plan.workingDirectory, credentialProfile: plan.credentialProfile });
|
|
124
|
+
if (pinned.kind === "ready" && pinned.classicId) {
|
|
125
|
+
const followed = await carriedClassic(deps, plan.name, plan.workingDirectory, plan.credentialProfile, pinned.classicId, true, current);
|
|
126
|
+
if (!followed.ok)
|
|
127
|
+
throw new Error(followed.error);
|
|
128
|
+
}
|
|
129
|
+
const checked = inspectKiroTuiMigration({ agendHome: deps.agendHome, instance: plan.name, workingDirectory: plan.workingDirectory, credentialProfile: plan.credentialProfile });
|
|
130
|
+
if (checked.kind !== "ready" || checked.classicId !== plan.classicId || found.inst.kiro_ui && found.inst.kiro_ui !== "legacy")
|
|
131
|
+
throw new Error(t("kiro_migrate.changed", plan.name));
|
|
132
|
+
const inst = deps.fleetConfig().instances[plan.name];
|
|
133
|
+
const before = inst.kiro_ui;
|
|
134
|
+
const restoreConfig = () => { if (before === undefined)
|
|
135
|
+
delete inst.kiro_ui;
|
|
136
|
+
else
|
|
137
|
+
inst.kiro_ui = before; };
|
|
138
|
+
inst.kiro_ui = "tui";
|
|
88
139
|
try {
|
|
89
140
|
deps.saveFleetConfig();
|
|
90
141
|
}
|
|
91
|
-
catch {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
142
|
+
catch (err) {
|
|
143
|
+
restoreConfig();
|
|
144
|
+
return { ok: false, text: t("kiro_migrate.save_failed", plan.name, err.message) };
|
|
145
|
+
}
|
|
146
|
+
const opts = { agendHome: deps.agendHome, instance: plan.name, workingDirectory: plan.workingDirectory, credentialProfile: plan.credentialProfile };
|
|
147
|
+
let armed;
|
|
148
|
+
try {
|
|
149
|
+
armed = armKiroTuiMigration(opts);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
armed = { kind: "refused", reason: "unreadable" };
|
|
153
|
+
}
|
|
154
|
+
if (armed.kind === "refused" || armed.classicId !== plan.classicId) {
|
|
155
|
+
if (armed.kind === "ready" && armed.classicId)
|
|
156
|
+
disarmKiroTuiMigration(opts);
|
|
157
|
+
restoreConfig();
|
|
158
|
+
try {
|
|
159
|
+
deps.saveFleetConfig();
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
// The accepted disk config may still say TUI without an adoption: persist a stop instead of risking fresh.
|
|
163
|
+
switched = true;
|
|
164
|
+
throw err;
|
|
165
|
+
}
|
|
166
|
+
return { ok: false, text: armed.kind === "refused" ? refusal(plan.name, armed) : t("kiro_migrate.changed", plan.name) };
|
|
167
|
+
}
|
|
168
|
+
switched = true;
|
|
169
|
+
current();
|
|
98
170
|
await deps.restart(plan.name);
|
|
171
|
+
current();
|
|
172
|
+
if (!plan.classicId) {
|
|
173
|
+
// Explicit startFresh remains an explicit new conversation, never an automatic fallback.
|
|
174
|
+
return { ok: true, text: `${t("kiro_migrate.done", plan.name)} ${t("kiro_migrate.done_fresh")}` };
|
|
175
|
+
}
|
|
176
|
+
await deps.verify(plan.name, plan.classicId, model, false);
|
|
177
|
+
current();
|
|
178
|
+
// The second ordinary restart stops our CLI, archives its frozen classic row in launch preparation,
|
|
179
|
+
// then must resume the exact same V2 id. No picker and no model prompt are submitted.
|
|
180
|
+
await deps.restart(plan.name);
|
|
181
|
+
current();
|
|
182
|
+
const verified = await deps.verify(plan.name, plan.classicId, model, true);
|
|
183
|
+
current();
|
|
184
|
+
return { ok: true, text: t("kiro_migrate.verified", plan.name, plan.classicId, model, verified.forensic) };
|
|
99
185
|
}
|
|
100
186
|
catch (err) {
|
|
101
|
-
|
|
187
|
+
let reason = err.message;
|
|
188
|
+
// Never roll a carried conversation back to its now-frozen classic copy.
|
|
189
|
+
if (switched && lease.current()) {
|
|
190
|
+
try {
|
|
191
|
+
await deps.stop(plan.name);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
reason += " " + t("kiro_migrate.stop_unconfirmed");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return { ok: false, text: t("kiro_migrate.failed", plan.name, reason) };
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
lease.release();
|
|
102
201
|
}
|
|
103
|
-
return { ok: true, text: `${t("kiro_migrate.done", plan.name)} ${carried}` };
|
|
104
202
|
}
|
|
105
203
|
//# sourceMappingURL=kiro-migrate.js.map
|
package/dist/kiro-migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro-migrate.js","sourceRoot":"","sources":["../src/kiro-migrate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kiro-migrate.js","sourceRoot":"","sources":["../src/kiro-migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Confirmed option A only: keep the original carried session, preserve the named newer alternative. */
|
|
2
|
+
import type { KiroMigrateDeps } from "./kiro-migrate.js";
|
|
3
|
+
import type { KiroReconcileInput, KiroReconcilePlan } from "./backend/kiro-reconcile-store.js";
|
|
4
|
+
export interface KiroReconcileDeps extends KiroMigrateDeps {
|
|
5
|
+
store(input: KiroReconcileInput, plan?: KiroReconcilePlan, actor?: string, rollbackReceipt?: string): Promise<{
|
|
6
|
+
plan?: KiroReconcilePlan;
|
|
7
|
+
receipt?: string;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export interface KiroReconciliation {
|
|
11
|
+
name: string;
|
|
12
|
+
input: KiroReconcileInput;
|
|
13
|
+
plan: KiroReconcilePlan;
|
|
14
|
+
}
|
|
15
|
+
export declare function planKiroReconciliation(deps: KiroReconcileDeps, name: string, keep: string, archive: string, rollbackReceipt?: string): Promise<KiroReconciliation>;
|
|
16
|
+
export declare function kiroReconciliationPrompt(p: KiroReconciliation): string;
|
|
17
|
+
export declare function applyKiroReconciliation(deps: KiroReconcileDeps, p: KiroReconciliation, actor: string): Promise<{
|
|
18
|
+
ok: boolean;
|
|
19
|
+
text: string;
|
|
20
|
+
receipt?: string;
|
|
21
|
+
}>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { instanceCredentialProfile } from "./backend/credential-profile.js";
|
|
2
|
+
import { kiroV1DbPath, kiroV2SessionsDir } from "./backend/kiro.js";
|
|
3
|
+
import { t } from "./locale.js";
|
|
4
|
+
function target(deps, name, keep, archive) {
|
|
5
|
+
const fleet = deps.fleetConfig(), inst = fleet?.instances[name];
|
|
6
|
+
if (!inst || (inst.backend ?? fleet?.defaults?.backend) !== "kiro-cli" || inst.kiro_ui !== "tui" || !inst.working_directory
|
|
7
|
+
|| !inst.model || !["stopped", "paused"].includes(deps.status(name)))
|
|
8
|
+
throw new Error(t("kiro_reconcile.stopped_required"));
|
|
9
|
+
const profile = instanceCredentialProfile(inst, fleet?.defaults, "kiro-cli");
|
|
10
|
+
return { agendHome: deps.agendHome, instance: name, workingDirectory: inst.working_directory, credentialProfile: profile,
|
|
11
|
+
sessionId: keep, archiveId: archive, sessionsDir: kiroV2SessionsDir(), dbPath: kiroV1DbPath(profile), model: inst.model };
|
|
12
|
+
}
|
|
13
|
+
export async function planKiroReconciliation(deps, name, keep, archive, rollbackReceipt) {
|
|
14
|
+
const input = target(deps, name, keep, archive), result = await deps.store(input, undefined, undefined, rollbackReceipt);
|
|
15
|
+
if (!result.plan || JSON.stringify(target(deps, name, keep, archive)) !== JSON.stringify(input))
|
|
16
|
+
throw new Error(t("kiro_reconcile.changed"));
|
|
17
|
+
return { name, input, plan: result.plan };
|
|
18
|
+
}
|
|
19
|
+
export function kiroReconciliationPrompt(p) {
|
|
20
|
+
return t(p.plan.rollbackReceipt ? "kiro_reconcile.rollback_prompt" : "kiro_reconcile.prompt", p.name, p.input.sessionId, p.input.archiveId);
|
|
21
|
+
}
|
|
22
|
+
function failureText(name, reason, receipt) {
|
|
23
|
+
// Reasons are complete localized sentences; the outer notice owns the separator.
|
|
24
|
+
return t(receipt ? "kiro_reconcile.failed" : "kiro_reconcile.failed_no_receipt", name, reason.replace(/[.。]+\s*$/, ""));
|
|
25
|
+
}
|
|
26
|
+
export async function applyKiroReconciliation(deps, p, actor) {
|
|
27
|
+
let lease;
|
|
28
|
+
try {
|
|
29
|
+
lease = deps.reserve(p.name);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return { ok: false, text: failureText(p.name, error.message) };
|
|
33
|
+
}
|
|
34
|
+
let receipt;
|
|
35
|
+
let storageStarted = false;
|
|
36
|
+
const current = () => {
|
|
37
|
+
if (!lease.current())
|
|
38
|
+
throw new Error(t("kiro_reconcile.changed"));
|
|
39
|
+
const config = deps.fleetConfig()?.instances[p.name];
|
|
40
|
+
if (!config || (config.backend ?? deps.fleetConfig()?.defaults?.backend) !== "kiro-cli" || config.kiro_ui !== "tui" || config.model !== p.input.model || config.working_directory !== p.input.workingDirectory
|
|
41
|
+
|| instanceCredentialProfile(config, deps.fleetConfig()?.defaults, "kiro-cli") !== p.input.credentialProfile)
|
|
42
|
+
throw new Error(t("kiro_reconcile.changed"));
|
|
43
|
+
};
|
|
44
|
+
try {
|
|
45
|
+
if (JSON.stringify(target(deps, p.name, p.input.sessionId, p.input.archiveId)) !== JSON.stringify(p.input))
|
|
46
|
+
throw new Error(t("kiro_reconcile.changed"));
|
|
47
|
+
current();
|
|
48
|
+
const model = await deps.preflight(p.name, { name: p.name, workingDirectory: p.input.workingDirectory, credentialProfile: p.input.credentialProfile, classicId: p.input.sessionId });
|
|
49
|
+
current();
|
|
50
|
+
if (model !== p.input.model)
|
|
51
|
+
throw new Error(t("kiro_reconcile.changed"));
|
|
52
|
+
// A rejected preflight has not touched storage or launched anything. Once the
|
|
53
|
+
// worker begins, even a failure without a returned receipt requires a stop.
|
|
54
|
+
storageStarted = true;
|
|
55
|
+
const result = await deps.store(p.input, p.plan, actor);
|
|
56
|
+
receipt = result.receipt;
|
|
57
|
+
current();
|
|
58
|
+
if (!receipt)
|
|
59
|
+
throw new Error(t("kiro_reconcile.changed"));
|
|
60
|
+
if (!p.plan.rollbackReceipt) {
|
|
61
|
+
await deps.restart(p.name);
|
|
62
|
+
current();
|
|
63
|
+
await deps.verify(p.name, p.input.sessionId, p.input.model, true);
|
|
64
|
+
current();
|
|
65
|
+
await deps.restart(p.name);
|
|
66
|
+
current();
|
|
67
|
+
await deps.verify(p.name, p.input.sessionId, p.input.model, true);
|
|
68
|
+
current();
|
|
69
|
+
}
|
|
70
|
+
return { ok: true, receipt, text: t(p.plan.rollbackReceipt ? "kiro_reconcile.rolled_back" : "kiro_reconcile.done", p.name, receipt) };
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
let reason = error instanceof SyntaxError ? "Malformed reconciliation data" : error.message;
|
|
74
|
+
if (storageStarted && lease.current()) {
|
|
75
|
+
try {
|
|
76
|
+
await deps.stop(p.name);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
reason += " " + t("kiro_migrate.stop_unconfirmed");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { ok: false, ...(receipt ? { receipt } : {}), text: failureText(p.name, reason, receipt) };
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
lease.release();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=kiro-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-reconcile.js","sourceRoot":"","sources":["../src/kiro-reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const KIRO_SESSION_ID_COMMAND = "/session-id";
|
|
2
|
+
export declare const KIRO_SESSION_PROOF_FILE = "kiro-session-proof.json";
|
|
3
|
+
export type KiroObservedSessionId = string | "none";
|
|
4
|
+
export type KiroSessionIdProof = {
|
|
5
|
+
kind: "match";
|
|
6
|
+
id: string;
|
|
7
|
+
} | {
|
|
8
|
+
kind: "fresh";
|
|
9
|
+
id: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "none";
|
|
12
|
+
} | {
|
|
13
|
+
kind: "mismatch";
|
|
14
|
+
pinned: string;
|
|
15
|
+
observed: KiroObservedSessionId;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "unread";
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Compare the pane's `/session-id` with the launch pin. `unread` and `mismatch`
|
|
21
|
+
* must not be repaired by listing session files.
|
|
22
|
+
*/
|
|
23
|
+
export declare function proveKiroSessionId(pinned: string | null, observed: KiroObservedSessionId | null): KiroSessionIdProof;
|
|
24
|
+
/** `/title <name>` for tui/V3. Empty or newline-bearing names are refused. */
|
|
25
|
+
export declare function kiroTitleCommand(instanceName: string): string | null;
|
|
26
|
+
export interface KiroSessionProofRecord {
|
|
27
|
+
version: 1;
|
|
28
|
+
sessionId: string;
|
|
29
|
+
kind: "match" | "fresh";
|
|
30
|
+
source: "/session-id";
|
|
31
|
+
provenAt: number;
|
|
32
|
+
}
|
|
33
|
+
/** Persist kiro's own `/session-id` as proven. Does not write identity claims. */
|
|
34
|
+
export declare function recordKiroSessionProof(instanceDir: string, rec: {
|
|
35
|
+
sessionId: string;
|
|
36
|
+
kind: "match" | "fresh";
|
|
37
|
+
provenAt?: number;
|
|
38
|
+
}): KiroSessionProofRecord;
|
|
39
|
+
/** This launch did not prove an id — drop a stale proof from an earlier launch. */
|
|
40
|
+
export declare function clearKiroSessionProof(instanceDir: string): void;
|
|
41
|
+
export declare function readKiroSessionProof(instanceDir: string): KiroSessionProofRecord | null;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M-2025 / survey #2681 candidates 5 and 10: after a tui or V3 launch, AgEnD types
|
|
3
|
+
* `/session-id` and `/title` into an idle composer. The session id is kiro's own
|
|
4
|
+
* announcement (tui.js `showSessionId`), compared with the pin from #2617. A
|
|
5
|
+
* mismatch is logged and surfaced; the pin is never replaced by a file-store guess.
|
|
6
|
+
* A match (or a fresh launch that named an id) is recorded as proven in the
|
|
7
|
+
* instance dir — that file is not an identity claim.
|
|
8
|
+
* Legacy has no these commands: it keeps the tmux window name.
|
|
9
|
+
*
|
|
10
|
+
* Live 2.34.0 tui.js:
|
|
11
|
+
* showSessionId → announceSystem(`Session ID: ${id}\nResume with: kiro-cli --resume-id ${id}`)
|
|
12
|
+
* or `Session ID: none`
|
|
13
|
+
* updateTitle → showAlert(`Title set: ${title}`), or `Terminal title is disabled …` (the default)
|
|
14
|
+
* The pane readers live with kiro's other layout readers (backend/kiro.ts: readKiroCommandComposer,
|
|
15
|
+
* readKiroSessionIdAlert); the daemon types each command only into a positively empty composer and
|
|
16
|
+
* takes the id only from an alert that was not on the pane before it typed (#2683).
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync, rmSync } from "node:fs";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import { writeFileAtomic } from "./backend/kiro-engine-ledger.js";
|
|
21
|
+
import { ensureInstanceDir } from "./private-dir.js";
|
|
22
|
+
export const KIRO_SESSION_ID_COMMAND = "/session-id";
|
|
23
|
+
export const KIRO_SESSION_PROOF_FILE = "kiro-session-proof.json";
|
|
24
|
+
/** Same shape kiro-identity uses for conversation ids. */
|
|
25
|
+
const SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,199}$/;
|
|
26
|
+
/**
|
|
27
|
+
* Compare the pane's `/session-id` with the launch pin. `unread` and `mismatch`
|
|
28
|
+
* must not be repaired by listing session files.
|
|
29
|
+
*/
|
|
30
|
+
export function proveKiroSessionId(pinned, observed) {
|
|
31
|
+
if (observed === null)
|
|
32
|
+
return { kind: "unread" };
|
|
33
|
+
if (pinned && observed !== pinned)
|
|
34
|
+
return { kind: "mismatch", pinned, observed };
|
|
35
|
+
if (observed === "none")
|
|
36
|
+
return { kind: "none" };
|
|
37
|
+
if (!pinned)
|
|
38
|
+
return { kind: "fresh", id: observed };
|
|
39
|
+
return { kind: "match", id: observed };
|
|
40
|
+
}
|
|
41
|
+
/** `/title <name>` for tui/V3. Empty or newline-bearing names are refused. */
|
|
42
|
+
export function kiroTitleCommand(instanceName) {
|
|
43
|
+
const name = instanceName.trim();
|
|
44
|
+
if (!name || /[\n\r]/.test(name))
|
|
45
|
+
return null;
|
|
46
|
+
return `/title ${name}`;
|
|
47
|
+
}
|
|
48
|
+
function proofPath(instanceDir) {
|
|
49
|
+
return join(instanceDir, KIRO_SESSION_PROOF_FILE);
|
|
50
|
+
}
|
|
51
|
+
/** Persist kiro's own `/session-id` as proven. Does not write identity claims. */
|
|
52
|
+
export function recordKiroSessionProof(instanceDir, rec) {
|
|
53
|
+
if (!SAFE_ID.test(rec.sessionId) || rec.sessionId === "none") {
|
|
54
|
+
throw new Error("kiro session proof refuses this id");
|
|
55
|
+
}
|
|
56
|
+
const written = {
|
|
57
|
+
version: 1,
|
|
58
|
+
sessionId: rec.sessionId,
|
|
59
|
+
kind: rec.kind,
|
|
60
|
+
source: "/session-id",
|
|
61
|
+
provenAt: rec.provenAt ?? Date.now(),
|
|
62
|
+
};
|
|
63
|
+
ensureInstanceDir(instanceDir);
|
|
64
|
+
writeFileAtomic(proofPath(instanceDir), JSON.stringify(written) + "\n");
|
|
65
|
+
return written;
|
|
66
|
+
}
|
|
67
|
+
/** This launch did not prove an id — drop a stale proof from an earlier launch. */
|
|
68
|
+
export function clearKiroSessionProof(instanceDir) {
|
|
69
|
+
rmSync(proofPath(instanceDir), { force: true });
|
|
70
|
+
}
|
|
71
|
+
export function readKiroSessionProof(instanceDir) {
|
|
72
|
+
try {
|
|
73
|
+
const parsed = JSON.parse(readFileSync(proofPath(instanceDir), "utf8"));
|
|
74
|
+
if (!parsed || typeof parsed !== "object")
|
|
75
|
+
return null;
|
|
76
|
+
const rec = parsed;
|
|
77
|
+
if (rec.version !== 1 || (rec.kind !== "match" && rec.kind !== "fresh"))
|
|
78
|
+
return null;
|
|
79
|
+
if (rec.source !== "/session-id" || typeof rec.sessionId !== "string" || typeof rec.provenAt !== "number")
|
|
80
|
+
return null;
|
|
81
|
+
if (!SAFE_ID.test(rec.sessionId) || rec.sessionId === "none")
|
|
82
|
+
return null;
|
|
83
|
+
return { version: 1, sessionId: rec.sessionId, kind: rec.kind, source: "/session-id", provenAt: rec.provenAt };
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=kiro-session-proof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-session-proof.js","sourceRoot":"","sources":["../src/kiro-session-proof.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { KiroScanRead } from "./forged-envelope-scan.js";
|
|
2
|
+
export declare const KIRO_FORENSIC_MAX_BYTES: number;
|
|
3
|
+
/** Callers using a tiny emptiness probe must distinguish work from an unsafe file. */
|
|
4
|
+
export declare class KiroTuiSnapshotSizeError extends Error {
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly maxBytes: number;
|
|
7
|
+
readonly actualBytes: number;
|
|
8
|
+
constructor(path: string, maxBytes: number, actualBytes: number);
|
|
9
|
+
}
|
|
10
|
+
/** Refuse symlinks/devices/foreign files and read exactly the size observed at open, not an unbounded live tail. */
|
|
11
|
+
export declare function snapshotKiroTuiFile(path: string, maxBytes: number): {
|
|
12
|
+
text: string;
|
|
13
|
+
unchanged: () => boolean;
|
|
14
|
+
};
|
|
15
|
+
export declare function readKiroTuiAssistantTexts(opts: {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
sessionsDir?: string;
|
|
18
|
+
stillOwned: () => boolean;
|
|
19
|
+
}): KiroScanRead;
|