volute 0.9.0 → 0.10.1

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.
Files changed (37) hide show
  1. package/dist/{agent-MB3OTRRK.js → agent-ECRX44DB.js} +5 -5
  2. package/dist/{agent-manager-CMMH5KQQ.js → agent-manager-4OCID725.js} +2 -2
  3. package/dist/{chunk-IQXBMFZG.js → chunk-46S7YHUB.js} +18 -6
  4. package/dist/{chunk-YNNK4QN2.js → chunk-FYQGANL6.js} +40 -2
  5. package/dist/{chunk-W6TMWYU3.js → chunk-KR6WRAJ4.js} +3 -3
  6. package/dist/chunk-R3VB7NF5.js +205 -0
  7. package/dist/cli.js +14 -14
  8. package/dist/create-VBZZNJOG.js +38 -0
  9. package/dist/daemon-restart-7X72OXOW.js +61 -0
  10. package/dist/daemon.js +1492 -170
  11. package/dist/delete-BOTVU4YO.js +35 -0
  12. package/dist/{down-4DGRZRJU.js → down-4LIQG3CE.js} +3 -1
  13. package/dist/import-2BZUWT23.js +21 -0
  14. package/dist/{package-WPX6LCYE.js → package-TNE337RE.js} +1 -1
  15. package/dist/{setup-7SPMWF2O.js → setup-6QFIHXSH.js} +5 -5
  16. package/dist/{up-J7AHQHIM.js → up-FCYL2IPZ.js} +1 -1
  17. package/dist/upgrade-RSE4CZNE.js +55 -0
  18. package/dist/variant-7IZF6OWO.js +215 -0
  19. package/package.json +1 -1
  20. package/dist/chunk-ECPQXRLB.js +0 -264
  21. package/dist/chunk-NETNFBA5.js +0 -28
  22. package/dist/chunk-XUA3JUFK.js +0 -121
  23. package/dist/create-HGJHLABX.js +0 -96
  24. package/dist/daemon-restart-EKDXXHKH.js +0 -28
  25. package/dist/delete-WKQKE3FT.js +0 -70
  26. package/dist/import-CNEDF3TD.js +0 -532
  27. package/dist/upgrade-BRNMSQBX.js +0 -233
  28. package/dist/variant-AQRAN6FR.js +0 -493
  29. package/dist/{channel-G5D4VBXY.js → channel-2WHBRDTD.js} +3 -3
  30. package/dist/{chunk-AWHQZDB4.js → chunk-M5AEQLB3.js} +0 -0
  31. package/dist/{connector-PK7D5GTN.js → connector-L2HBLZBW.js} +3 -3
  32. package/dist/{env-HZMZSWWD.js → env-CGORIKVF.js} +3 -3
  33. package/dist/{history-SH25BAA5.js → history-NI5QP27M.js} +3 -3
  34. package/dist/{logs-V54B6QSG.js → logs-APWVWGNX.js} +3 -3
  35. package/dist/{schedule-XGBUF7NU.js → schedule-E4MFGYSA.js} +3 -3
  36. package/dist/{send-TFZ62XPZ.js → send-X6OQGSD6.js} +4 -4
  37. package/dist/{service-56CY4S6Z.js → service-OW35VZ5G.js} +3 -3
@@ -1,233 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- resolveAgentName
4
- } from "./chunk-AZEL2IEK.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-STOEJOJO.js";
8
- import {
9
- composeTemplate,
10
- copyTemplateToDir,
11
- findTemplatesRoot
12
- } from "./chunk-XUA3JUFK.js";
13
- import {
14
- parseArgs
15
- } from "./chunk-D424ZQGI.js";
16
- import {
17
- exec,
18
- execInherit
19
- } from "./chunk-5C5JWR2L.js";
20
- import {
21
- addVariant,
22
- nextPort,
23
- resolveAgent
24
- } from "./chunk-DP2DX4WV.js";
25
- import {
26
- getClient,
27
- urlOf
28
- } from "./chunk-4RQBJWQX.js";
29
- import "./chunk-K3NQKI34.js";
30
-
31
- // src/commands/upgrade.ts
32
- import { existsSync, mkdirSync, rmSync } from "fs";
33
- import { resolve } from "path";
34
- var TEMPLATE_BRANCH = "volute/template";
35
- var VARIANT_NAME = "upgrade";
36
- async function run(args) {
37
- const { positional, flags } = parseArgs(args, {
38
- template: { type: "string" },
39
- continue: { type: "boolean" }
40
- });
41
- const agentName = resolveAgentName({ agent: positional[0] });
42
- const { dir: projectRoot } = resolveAgent(agentName);
43
- const template = flags.template ?? "agent-sdk";
44
- if (flags.continue) {
45
- await continueUpgrade(agentName, projectRoot);
46
- return;
47
- }
48
- const worktreeDir = resolve(projectRoot, ".variants", VARIANT_NAME);
49
- if (existsSync(worktreeDir)) {
50
- console.error(
51
- `Upgrade variant already exists: ${worktreeDir}
52
- If a previous upgrade is in progress, use --continue to finish it.
53
- Otherwise, remove it with: volute variant delete ${VARIANT_NAME} --agent ${agentName}`
54
- );
55
- process.exit(1);
56
- }
57
- await exec("git", ["worktree", "prune"], { cwd: projectRoot });
58
- try {
59
- await exec("git", ["branch", "-D", VARIANT_NAME], { cwd: projectRoot });
60
- } catch {
61
- }
62
- console.log("Updating template branch...");
63
- await updateTemplateBranch(projectRoot, template, agentName);
64
- console.log("Creating upgrade variant...");
65
- const parentDir = resolve(projectRoot, ".variants");
66
- if (!existsSync(parentDir)) {
67
- mkdirSync(parentDir, { recursive: true });
68
- }
69
- await exec("git", ["worktree", "add", "-b", VARIANT_NAME, worktreeDir], {
70
- cwd: projectRoot
71
- });
72
- console.log("Merging template changes...");
73
- const hasConflicts = await mergeTemplateBranch(worktreeDir);
74
- if (hasConflicts) {
75
- console.log("\nMerge conflicts detected. Resolve them in:");
76
- console.log(` ${worktreeDir}`);
77
- console.log(`
78
- Then run:`);
79
- console.log(` volute agent upgrade ${agentName} --continue`);
80
- return;
81
- }
82
- await installAndVerify(agentName, worktreeDir);
83
- }
84
- async function updateTemplateBranch(projectRoot, template, agentName) {
85
- const tempWorktree = resolve(projectRoot, ".variants", "_template_update");
86
- let branchExists = false;
87
- try {
88
- await exec("git", ["rev-parse", "--verify", TEMPLATE_BRANCH], {
89
- cwd: projectRoot
90
- });
91
- branchExists = true;
92
- } catch {
93
- }
94
- try {
95
- await exec("git", ["worktree", "remove", "--force", tempWorktree], { cwd: projectRoot });
96
- } catch {
97
- }
98
- if (existsSync(tempWorktree)) {
99
- rmSync(tempWorktree, { recursive: true, force: true });
100
- }
101
- const templatesRoot = findTemplatesRoot();
102
- const { composedDir, manifest } = composeTemplate(templatesRoot, template);
103
- try {
104
- if (branchExists) {
105
- await exec("git", ["worktree", "add", tempWorktree, TEMPLATE_BRANCH], {
106
- cwd: projectRoot
107
- });
108
- } else {
109
- await exec("git", ["worktree", "add", "--detach", tempWorktree], {
110
- cwd: projectRoot
111
- });
112
- await exec("git", ["checkout", "--orphan", TEMPLATE_BRANCH], {
113
- cwd: tempWorktree
114
- });
115
- await exec("git", ["rm", "-rf", "--cached", "."], { cwd: tempWorktree });
116
- await exec("git", ["clean", "-fd"], { cwd: tempWorktree });
117
- }
118
- if (branchExists) {
119
- await exec("git", ["rm", "-rf", "."], { cwd: tempWorktree }).catch(() => {
120
- });
121
- }
122
- copyTemplateToDir(composedDir, tempWorktree, agentName, manifest);
123
- const initDir = resolve(tempWorktree, ".init");
124
- if (existsSync(initDir)) {
125
- rmSync(initDir, { recursive: true, force: true });
126
- }
127
- await exec("git", ["add", "-A"], { cwd: tempWorktree });
128
- try {
129
- await exec("git", ["diff", "--cached", "--quiet"], { cwd: tempWorktree });
130
- console.log("Template branch is already up to date.");
131
- } catch {
132
- await exec("git", ["commit", "-m", "template update"], {
133
- cwd: tempWorktree
134
- });
135
- }
136
- } finally {
137
- try {
138
- await exec("git", ["worktree", "remove", "--force", tempWorktree], { cwd: projectRoot });
139
- } catch {
140
- }
141
- if (existsSync(tempWorktree)) {
142
- rmSync(tempWorktree, { recursive: true, force: true });
143
- }
144
- rmSync(composedDir, { recursive: true, force: true });
145
- }
146
- }
147
- async function mergeTemplateBranch(worktreeDir) {
148
- try {
149
- await exec(
150
- "git",
151
- ["merge", TEMPLATE_BRANCH, "--allow-unrelated-histories", "-m", "merge template update"],
152
- { cwd: worktreeDir }
153
- );
154
- return false;
155
- } catch (e) {
156
- try {
157
- const status = await exec("git", ["status", "--porcelain"], {
158
- cwd: worktreeDir
159
- });
160
- const hasConflictMarkers = status.split("\n").some((line) => line.startsWith("UU") || line.startsWith("AA"));
161
- if (hasConflictMarkers) return true;
162
- } catch {
163
- }
164
- throw e;
165
- }
166
- }
167
- async function continueUpgrade(agentName, projectRoot) {
168
- const worktreeDir = resolve(projectRoot, ".variants", VARIANT_NAME);
169
- if (!existsSync(worktreeDir)) {
170
- console.error("No upgrade in progress. Run `volute agent upgrade` first.");
171
- process.exit(1);
172
- }
173
- const status = await exec("git", ["status", "--porcelain"], {
174
- cwd: worktreeDir
175
- });
176
- const hasConflicts = status.split("\n").some((line) => line.startsWith("UU") || line.startsWith("AA"));
177
- if (hasConflicts) {
178
- console.error("There are still unresolved conflicts. Resolve them first.");
179
- process.exit(1);
180
- }
181
- try {
182
- await exec("git", ["add", "-A"], { cwd: worktreeDir });
183
- await exec("git", ["commit", "--no-edit"], { cwd: worktreeDir });
184
- } catch {
185
- }
186
- await installAndVerify(agentName, worktreeDir);
187
- }
188
- async function installAndVerify(agentName, worktreeDir) {
189
- console.log("Installing dependencies...");
190
- await execInherit("npm", ["install"], { cwd: worktreeDir });
191
- const variantPort = nextPort();
192
- addVariant(agentName, {
193
- name: VARIANT_NAME,
194
- branch: VARIANT_NAME,
195
- path: worktreeDir,
196
- port: variantPort,
197
- created: (/* @__PURE__ */ new Date()).toISOString()
198
- });
199
- console.log("Starting upgrade variant...");
200
- try {
201
- const client = getClient();
202
- const res = await daemonFetch(
203
- urlOf(
204
- client.api.agents[":name"].start.$url({
205
- param: { name: `${agentName}@${VARIANT_NAME}` }
206
- })
207
- ),
208
- { method: "POST" }
209
- );
210
- if (!res.ok) {
211
- const data = await res.json();
212
- console.error(data.error ?? "Failed to start variant");
213
- process.exit(1);
214
- }
215
- } catch {
216
- console.error("Failed to start variant. Is the daemon running? (volute up)");
217
- console.error(
218
- `The variant was created but not started. Use: volute agent start ${agentName}@${VARIANT_NAME}`
219
- );
220
- process.exit(1);
221
- }
222
- console.log(`
223
- Upgrade variant running on port ${variantPort}`);
224
- console.log(`
225
- Next steps:`);
226
- console.log(
227
- ` volute send @${agentName}@${VARIANT_NAME} "hello" # chat with upgraded variant`
228
- );
229
- console.log(` volute variant merge ${VARIANT_NAME} # merge back when satisfied`);
230
- }
231
- export {
232
- run
233
- };