bkper 4.10.1 → 4.10.3
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 +8 -0
- package/lib/agent/run-agent-mode.d.ts +12 -0
- package/lib/agent/run-agent-mode.d.ts.map +1 -1
- package/lib/agent/run-agent-mode.js +15 -3
- package/lib/agent/run-agent-mode.js.map +1 -1
- package/lib/agent/startup-maintenance.d.ts +9 -2
- package/lib/agent/startup-maintenance.d.ts.map +1 -1
- package/lib/agent/startup-maintenance.js +42 -6
- package/lib/agent/startup-maintenance.js.map +1 -1
- package/lib/cli.js +0 -2
- package/lib/cli.js.map +1 -1
- package/lib/docs/cli-reference.md +8 -0
- package/lib/upgrade/index.d.ts +3 -3
- package/lib/upgrade/index.d.ts.map +1 -1
- package/lib/upgrade/index.js +2 -3
- package/lib/upgrade/index.js.map +1 -1
- package/lib/upgrade/installation.d.ts +10 -0
- package/lib/upgrade/installation.d.ts.map +1 -1
- package/lib/upgrade/installation.js +77 -9
- package/lib/upgrade/installation.js.map +1 -1
- package/lib/upgrade/upgrade.d.ts +23 -3
- package/lib/upgrade/upgrade.d.ts.map +1 -1
- package/lib/upgrade/upgrade.js +57 -17
- package/lib/upgrade/upgrade.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -922,3 +922,11 @@ Bkper.setConfig({
|
|
|
922
922
|
|
|
923
923
|
- [Developer Docs]
|
|
924
924
|
- [App Template]
|
|
925
|
+
|
|
926
|
+
## Release process (maintainers)
|
|
927
|
+
|
|
928
|
+
Releases are published by GitHub Actions (Trusted Publisher with OIDC), not from local machines.
|
|
929
|
+
|
|
930
|
+
- Merge a PR into `main` with one release label: `release:patch`, `release:minor`, or `release:major`
|
|
931
|
+
- On `main` push, CI determines the merged PR label, bumps `package.json` version, tags, and publishes to npm
|
|
932
|
+
- Without a release label, publish is skipped
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
import { runStartupMaintenance } from './startup-maintenance.js';
|
|
1
2
|
type ReloadableResourceLoader = {
|
|
2
3
|
reload(): Promise<void>;
|
|
3
4
|
};
|
|
5
|
+
type NotificationType = 'info' | 'warning' | 'error';
|
|
6
|
+
type SessionStartContext = {
|
|
7
|
+
ui: {
|
|
8
|
+
notify: (message: string, type?: NotificationType) => void;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
type SessionStartHandler = (event: unknown, context: SessionStartContext) => Promise<void>;
|
|
12
|
+
type StartupExtensionAPI = {
|
|
13
|
+
on: (event: 'session_start', handler: SessionStartHandler) => void;
|
|
14
|
+
};
|
|
4
15
|
export interface AgentModeDependencies {
|
|
5
16
|
createResourceLoader: () => ReloadableResourceLoader;
|
|
6
17
|
createSession: (options: {
|
|
@@ -13,6 +24,7 @@ export interface AgentModeDependencies {
|
|
|
13
24
|
run(): Promise<void>;
|
|
14
25
|
};
|
|
15
26
|
}
|
|
27
|
+
export declare function registerBkperAgentStartupExtension(pi: StartupExtensionAPI, startupMaintenance?: typeof runStartupMaintenance): void;
|
|
16
28
|
export declare function runAgentMode(dependencies?: AgentModeDependencies): Promise<void>;
|
|
17
29
|
export {};
|
|
18
30
|
//# sourceMappingURL=run-agent-mode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-agent-mode.d.ts","sourceRoot":"","sources":["../../src/agent/run-agent-mode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-agent-mode.d.ts","sourceRoot":"","sources":["../../src/agent/run-agent-mode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,KAAK,wBAAwB,GAAG;IAC5B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC;AAEF,KAAK,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,KAAK,mBAAmB,GAAG;IACvB,EAAE,EAAE;QACA,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;KAC9D,CAAC;CACL,CAAC;AAEF,KAAK,mBAAmB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3F,KAAK,mBAAmB,GAAG;IACvB,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACtE,CAAC;AAEF,MAAM,WAAW,qBAAqB;IAClC,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;IACrD,aAAa,EAAE,CAAC,OAAO,EAAE;QACrB,cAAc,EAAE,wBAAwB,CAAC;KAC5C,KAAK,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;IACH,qBAAqB,EAAE,CACnB,OAAO,EAAE,OAAO,EAChB,oBAAoB,CAAC,EAAE,MAAM,KAC5B;QACD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KACxB,CAAC;CACL;AAED,wBAAgB,kCAAkC,CAC9C,EAAE,EAAE,mBAAmB,EACvB,kBAAkB,GAAE,OAAO,qBAA6C,GACzE,IAAI,CAeN;AA0BD,wBAAsB,YAAY,CAC9B,YAAY,GAAE,qBAAmD,GAClE,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -8,7 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { createAgentSession, DefaultResourceLoader, InteractiveMode, } from '@mariozechner/pi-coding-agent';
|
|
11
|
+
import { runStartupMaintenance } from './startup-maintenance.js';
|
|
11
12
|
import { getBkperAgentSystemPrompt } from './system-prompt.js';
|
|
13
|
+
export function registerBkperAgentStartupExtension(pi, startupMaintenance = runStartupMaintenance) {
|
|
14
|
+
let startupMaintenanceTriggered = false;
|
|
15
|
+
pi.on('session_start', (_event, ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
ctx.ui.notify('Bkper Agent ready.', 'info');
|
|
17
|
+
if (startupMaintenanceTriggered) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
startupMaintenanceTriggered = true;
|
|
21
|
+
void startupMaintenance({
|
|
22
|
+
notify: (message, type) => ctx.ui.notify(message, type),
|
|
23
|
+
});
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
12
26
|
function createDefaultDependencies() {
|
|
13
27
|
return {
|
|
14
28
|
createResourceLoader: () => new DefaultResourceLoader({
|
|
@@ -16,9 +30,7 @@ function createDefaultDependencies() {
|
|
|
16
30
|
appendSystemPromptOverride: () => [],
|
|
17
31
|
extensionFactories: [
|
|
18
32
|
(pi) => {
|
|
19
|
-
pi
|
|
20
|
-
ctx.ui.notify('Bkper Agent ready.', 'info');
|
|
21
|
-
}));
|
|
33
|
+
registerBkperAgentStartupExtension(pi);
|
|
22
34
|
},
|
|
23
35
|
],
|
|
24
36
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-agent-mode.js","sourceRoot":"","sources":["../../src/agent/run-agent-mode.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAGlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-agent-mode.js","sourceRoot":"","sources":["../../src/agent/run-agent-mode.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAGlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAoC/D,MAAM,UAAU,kCAAkC,CAC9C,EAAuB,EACvB,qBAAmD,qBAAqB;IAExE,IAAI,2BAA2B,GAAG,KAAK,CAAC;IAExC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAO,MAAM,EAAE,GAAG,EAAE,EAAE;QACzC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,2BAA2B,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QACD,2BAA2B,GAAG,IAAI,CAAC;QAEnC,KAAK,kBAAkB,CAAC;YACpB,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;SAC1D,CAAC,CAAC;IACP,CAAC,CAAA,CAAC,CAAC;AACP,CAAC;AAED,SAAS,yBAAyB;IAC9B,OAAO;QACH,oBAAoB,EAAE,GAAG,EAAE,CACvB,IAAI,qBAAqB,CAAC;YACtB,oBAAoB,EAAE,GAAG,EAAE,CAAC,yBAAyB,EAAE;YACvD,0BAA0B,EAAE,GAAG,EAAE,CAAC,EAAE;YACpC,kBAAkB,EAAE;gBAChB,CAAC,EAAgB,EAAE,EAAE;oBACjB,kCAAkC,CAAC,EAAE,CAAC,CAAC;gBAC3C,CAAC;aACJ;SACJ,CAAC;QACN,aAAa,EAAE,KAA2B,EAAE,0CAAtB,EAAE,cAAc,EAAE;YACpC,OAAA,kBAAkB,CAAC;gBACf,cAAc,EACV,cAA0E;aACjF,CAAC,CAAA;UAAA;QACN,qBAAqB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,CACrD,IAAI,eAAe,CAAC,OAA2D,EAAE;YAC7E,oBAAoB;SACvB,CAAC;KACT,CAAC;AACN,CAAC;AAED,MAAM,UAAgB,YAAY;yDAC9B,eAAsC,yBAAyB,EAAE;;;QAEjE,YAAA,OAAO,CAAC,GAAG,EAAC,qBAAqB,uCAArB,qBAAqB,GAAK,GAAG,EAAC;QAE1C,MAAM,cAAc,GAAG,YAAY,CAAC,oBAAoB,EAAE,CAAC;QAC3D,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAE9B,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,YAAY,CAAC,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAE/E,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;CAAA"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { type AvailableUpgrade, type InstallMethod } from '../upgrade/index.js';
|
|
2
|
+
type NotificationType = 'info' | 'warning' | 'error';
|
|
3
|
+
export interface StartupMaintenanceCallbacks {
|
|
4
|
+
notify: (message: string, type?: NotificationType) => void;
|
|
5
|
+
}
|
|
1
6
|
export interface StartupMaintenanceDependencies {
|
|
2
|
-
|
|
7
|
+
getAvailableUpgrade: () => Promise<AvailableUpgrade | null>;
|
|
8
|
+
startDetachedUpgrade: (method: InstallMethod, version: string) => void;
|
|
3
9
|
}
|
|
4
|
-
export declare function runStartupMaintenance(dependencies?: StartupMaintenanceDependencies): void
|
|
10
|
+
export declare function runStartupMaintenance(callbacks: StartupMaintenanceCallbacks, dependencies?: StartupMaintenanceDependencies): Promise<void>;
|
|
11
|
+
export {};
|
|
5
12
|
//# sourceMappingURL=startup-maintenance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-maintenance.d.ts","sourceRoot":"","sources":["../../src/agent/startup-maintenance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"startup-maintenance.d.ts","sourceRoot":"","sources":["../../src/agent/startup-maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACrB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,8BAA8B;IAC3C,mBAAmB,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC5D,oBAAoB,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1E;AAaD,wBAAsB,qBAAqB,CACvC,SAAS,EAAE,2BAA2B,EACtC,YAAY,GAAE,8BAA4D,GAC3E,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -1,12 +1,48 @@
|
|
|
1
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { getAvailableUpgrade, startDetachedUpgrade, } from '../upgrade/index.js';
|
|
2
11
|
function createDefaultDependencies() {
|
|
3
12
|
return {
|
|
4
|
-
|
|
13
|
+
getAvailableUpgrade,
|
|
14
|
+
startDetachedUpgrade,
|
|
5
15
|
};
|
|
6
16
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
17
|
+
function getManualUpgradeMessage(latest) {
|
|
18
|
+
return `bkper ${latest} available. Run bkper upgrade after exit.`;
|
|
19
|
+
}
|
|
20
|
+
export function runStartupMaintenance(callbacks_1) {
|
|
21
|
+
return __awaiter(this, arguments, void 0, function* (callbacks, dependencies = createDefaultDependencies()) {
|
|
22
|
+
if (process.env.BKPER_DISABLE_AUTOUPDATE) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const availableUpgrade = yield dependencies.getAvailableUpgrade();
|
|
27
|
+
if (!availableUpgrade) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (availableUpgrade.method === 'unknown') {
|
|
31
|
+
callbacks.notify(getManualUpgradeMessage(availableUpgrade.latest), 'warning');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
dependencies.startDetachedUpgrade(availableUpgrade.method, availableUpgrade.latest);
|
|
36
|
+
callbacks.notify(`Updating bkper to ${availableUpgrade.latest} in background. ` +
|
|
37
|
+
`Restart later to use it.`, 'info');
|
|
38
|
+
}
|
|
39
|
+
catch (_a) {
|
|
40
|
+
callbacks.notify(getManualUpgradeMessage(availableUpgrade.latest), 'warning');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (_b) {
|
|
44
|
+
// Silent failure — never break the TUI
|
|
45
|
+
}
|
|
46
|
+
});
|
|
11
47
|
}
|
|
12
48
|
//# sourceMappingURL=startup-maintenance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-maintenance.js","sourceRoot":"","sources":["../../src/agent/startup-maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"startup-maintenance.js","sourceRoot":"","sources":["../../src/agent/startup-maintenance.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACH,mBAAmB,EACnB,oBAAoB,GAGvB,MAAM,qBAAqB,CAAC;AAa7B,SAAS,yBAAyB;IAC9B,OAAO;QACH,mBAAmB;QACnB,oBAAoB;KACvB,CAAC;AACN,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC3C,OAAO,SAAS,MAAM,2CAA2C,CAAC;AACtE,CAAC;AAED,MAAM,UAAgB,qBAAqB;yDACvC,SAAsC,EACtC,eAA+C,yBAAyB,EAAE;QAE1E,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,mBAAmB,EAAE,CAAC;YAClE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,OAAO;YACX,CAAC;YAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC9E,OAAO;YACX,CAAC;YAED,IAAI,CAAC;gBACD,YAAY,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACpF,SAAS,CAAC,MAAM,CACZ,qBAAqB,gBAAgB,CAAC,MAAM,kBAAkB;oBAC1D,0BAA0B,EAC9B,MAAM,CACT,CAAC;YACN,CAAC;YAAC,WAAM,CAAC;gBACL,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;YAClF,CAAC;QACL,CAAC;QAAC,WAAM,CAAC;YACL,uCAAuC;QAC3C,CAAC;IACL,CAAC;CAAA"}
|
package/lib/cli.js
CHANGED
|
@@ -23,11 +23,9 @@ import { registerAgentCommands } from './commands/agent-command.js';
|
|
|
23
23
|
import { VERSION, autoUpgrade } from './upgrade/index.js';
|
|
24
24
|
import { shouldStartAgentMode } from './agent/cli-dispatch.js';
|
|
25
25
|
import { runAgentMode } from './agent/run-agent-mode.js';
|
|
26
|
-
import { runStartupMaintenance } from './agent/startup-maintenance.js';
|
|
27
26
|
function main() {
|
|
28
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29
28
|
if (shouldStartAgentMode(process.argv)) {
|
|
30
|
-
runStartupMaintenance();
|
|
31
29
|
yield runAgentMode();
|
|
32
30
|
return;
|
|
33
31
|
}
|
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,OAAO,eAAe,CAAC,CAAC,sDAAsD;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,OAAO,eAAe,CAAC,CAAC,sDAAsD;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,SAAe,IAAI;;QACf,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,UAAU;QACV,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAE1C,+BAA+B;QAC/B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;QACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;QAErE,gBAAgB;QAChB,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAE9B,oBAAoB;QACpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/B,2BAA2B,CAAC,OAAO,CAAC,CAAC;QACrC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAEpC,uBAAuB;QACvB,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAE/B,kBAAkB;QAClB,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEhC,4EAA4E;QAC5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACxC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CAAA;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -922,3 +922,11 @@ Bkper.setConfig({
|
|
|
922
922
|
|
|
923
923
|
- [Developer Docs]
|
|
924
924
|
- [App Template]
|
|
925
|
+
|
|
926
|
+
## Release process (maintainers)
|
|
927
|
+
|
|
928
|
+
Releases are published by GitHub Actions (Trusted Publisher with OIDC), not from local machines.
|
|
929
|
+
|
|
930
|
+
- Merge a PR into `main` with one release label: `release:patch`, `release:minor`, or `release:major`
|
|
931
|
+
- On `main` push, CI determines the merged PR label, bumps `package.json` version, tags, and publishes to npm
|
|
932
|
+
- Without a release label, publish is skipped
|
package/lib/upgrade/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { VERSION } from './installation.js';
|
|
2
|
-
export { autoUpgrade, foregroundUpgrade, isNewerVersion } from './upgrade.js';
|
|
3
|
-
export { detectMethod, fetchLatestVersion, getUpgradeCommand } from './installation.js';
|
|
1
|
+
export { VERSION, detectMethod, detectMethodAsync, fetchLatestVersion, getUpgradeCommand, startDetachedUpgrade, } from './installation.js';
|
|
2
|
+
export { autoUpgrade, foregroundUpgrade, getAvailableUpgrade, isNewerVersion, } from './upgrade.js';
|
|
4
3
|
export type { InstallMethod } from './installation.js';
|
|
4
|
+
export type { AvailableUpgrade } from './upgrade.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
package/lib/upgrade/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { VERSION } from './installation.js';
|
|
2
|
-
export { autoUpgrade, foregroundUpgrade, isNewerVersion } from './upgrade.js';
|
|
3
|
-
export { detectMethod, fetchLatestVersion, getUpgradeCommand } from './installation.js';
|
|
1
|
+
export { VERSION, detectMethod, detectMethodAsync, fetchLatestVersion, getUpgradeCommand, startDetachedUpgrade, } from './installation.js';
|
|
2
|
+
export { autoUpgrade, foregroundUpgrade, getAvailableUpgrade, isNewerVersion, } from './upgrade.js';
|
|
4
3
|
//# sourceMappingURL=index.js.map
|
package/lib/upgrade/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACjB,MAAM,cAAc,CAAC"}
|
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
export declare const VERSION: string;
|
|
3
3
|
/** Supported installation methods. */
|
|
4
4
|
export type InstallMethod = 'npm' | 'bun' | 'yarn' | 'unknown';
|
|
5
|
+
export type CommandRunner = (command: string, timeoutMs: number) => Promise<string>;
|
|
6
|
+
export type DetachedCommandStarter = (command: string) => void;
|
|
5
7
|
/**
|
|
6
8
|
* Detects how the CLI was installed by checking global package lists
|
|
7
9
|
* for each supported package manager.
|
|
8
10
|
*/
|
|
9
11
|
export declare function detectMethod(): InstallMethod;
|
|
12
|
+
/**
|
|
13
|
+
* Async version of installation method detection to avoid blocking the event loop.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectMethodAsync(commandRunner?: CommandRunner): Promise<InstallMethod>;
|
|
10
16
|
/**
|
|
11
17
|
* Fetches the latest published version from the npm registry.
|
|
12
18
|
* Returns null if the fetch fails.
|
|
@@ -21,4 +27,8 @@ export declare function getUpgradeCommand(method: InstallMethod, version: string
|
|
|
21
27
|
* Throws if the upgrade command fails.
|
|
22
28
|
*/
|
|
23
29
|
export declare function executeUpgrade(method: InstallMethod, version: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Starts the upgrade in a detached background process.
|
|
32
|
+
*/
|
|
33
|
+
export declare function startDetachedUpgrade(method: InstallMethod, version: string, commandStarter?: DetachedCommandStarter): void;
|
|
24
34
|
//# sourceMappingURL=installation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":"AAMA,4CAA4C;AAC5C,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAK3C,sCAAsC;AACtC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,YAAY,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":"AAMA,4CAA4C;AAC5C,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAK3C,sCAAsC;AACtC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AACpF,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAwC/D;;;GAGG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAkB5C;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACnC,aAAa,GAAE,aAAoC,GACpD,OAAO,CAAC,aAAa,CAAC,CAaxB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAS3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,sBAAsD,GACvE,IAAI,CAUN"}
|
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { execSync } from 'child_process';
|
|
10
|
+
import { exec, execSync, spawn } from 'child_process';
|
|
11
11
|
import { createRequire } from 'module';
|
|
12
12
|
const require = createRequire(import.meta.url);
|
|
13
13
|
const pkg = require('../../package.json');
|
|
@@ -15,19 +15,52 @@ const pkg = require('../../package.json');
|
|
|
15
15
|
export const VERSION = pkg.version;
|
|
16
16
|
/** Package name on npm. */
|
|
17
17
|
const PACKAGE_NAME = 'bkper';
|
|
18
|
+
const defaultCommandRunner = (command, timeoutMs) => {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
exec(command, { timeout: timeoutMs, windowsHide: true }, (error, stdout) => {
|
|
21
|
+
if (error) {
|
|
22
|
+
reject(error);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
resolve(stdout);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const defaultDetachedCommandStarter = command => {
|
|
30
|
+
const child = spawn(command, [], {
|
|
31
|
+
shell: true,
|
|
32
|
+
detached: true,
|
|
33
|
+
stdio: 'ignore',
|
|
34
|
+
windowsHide: true,
|
|
35
|
+
});
|
|
36
|
+
child.unref();
|
|
37
|
+
};
|
|
38
|
+
function getLatestVersionOverride() {
|
|
39
|
+
return process.env.BKPER_AUTOUPDATE_LATEST_VERSION || undefined;
|
|
40
|
+
}
|
|
41
|
+
function getUpgradeCommandOverride() {
|
|
42
|
+
return process.env.BKPER_AUTOUPDATE_COMMAND || undefined;
|
|
43
|
+
}
|
|
44
|
+
function getDetectionChecks() {
|
|
45
|
+
return [
|
|
46
|
+
{ method: 'bun', command: 'bun pm ls -g' },
|
|
47
|
+
{ method: 'npm', command: `npm list -g ${PACKAGE_NAME} --depth=0` },
|
|
48
|
+
{ method: 'yarn', command: 'yarn global list --depth=0' },
|
|
49
|
+
];
|
|
50
|
+
}
|
|
18
51
|
/**
|
|
19
52
|
* Detects how the CLI was installed by checking global package lists
|
|
20
53
|
* for each supported package manager.
|
|
21
54
|
*/
|
|
22
55
|
export function detectMethod() {
|
|
23
|
-
const
|
|
24
|
-
{ method: 'bun', command: `bun pm ls -g 2>/dev/null` },
|
|
25
|
-
{ method: 'npm', command: `npm list -g ${PACKAGE_NAME} --depth=0 2>/dev/null` },
|
|
26
|
-
{ method: 'yarn', command: `yarn global list --depth=0 2>/dev/null` },
|
|
27
|
-
];
|
|
28
|
-
for (const { method, command } of checks) {
|
|
56
|
+
for (const { method, command } of getDetectionChecks()) {
|
|
29
57
|
try {
|
|
30
|
-
const output = execSync(command, {
|
|
58
|
+
const output = execSync(command, {
|
|
59
|
+
encoding: 'utf-8',
|
|
60
|
+
timeout: 10000,
|
|
61
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
62
|
+
windowsHide: true,
|
|
63
|
+
});
|
|
31
64
|
if (output.includes(PACKAGE_NAME)) {
|
|
32
65
|
return method;
|
|
33
66
|
}
|
|
@@ -38,6 +71,25 @@ export function detectMethod() {
|
|
|
38
71
|
}
|
|
39
72
|
return 'unknown';
|
|
40
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Async version of installation method detection to avoid blocking the event loop.
|
|
76
|
+
*/
|
|
77
|
+
export function detectMethodAsync() {
|
|
78
|
+
return __awaiter(this, arguments, void 0, function* (commandRunner = defaultCommandRunner) {
|
|
79
|
+
for (const { method, command } of getDetectionChecks()) {
|
|
80
|
+
try {
|
|
81
|
+
const output = yield commandRunner(command, 10000);
|
|
82
|
+
if (output.includes(PACKAGE_NAME)) {
|
|
83
|
+
return method;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (_a) {
|
|
87
|
+
// Package manager not available or command failed — try next
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return 'unknown';
|
|
91
|
+
});
|
|
92
|
+
}
|
|
41
93
|
/**
|
|
42
94
|
* Fetches the latest published version from the npm registry.
|
|
43
95
|
* Returns null if the fetch fails.
|
|
@@ -45,6 +97,10 @@ export function detectMethod() {
|
|
|
45
97
|
export function fetchLatestVersion() {
|
|
46
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
99
|
var _a;
|
|
100
|
+
const latestVersionOverride = getLatestVersionOverride();
|
|
101
|
+
if (latestVersionOverride) {
|
|
102
|
+
return latestVersionOverride;
|
|
103
|
+
}
|
|
48
104
|
try {
|
|
49
105
|
const response = yield fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {
|
|
50
106
|
headers: { Accept: 'application/json' },
|
|
@@ -85,6 +141,18 @@ export function executeUpgrade(method, version) {
|
|
|
85
141
|
throw new Error(`Unable to auto-upgrade: unknown installation method. ` +
|
|
86
142
|
`Please upgrade manually: npm install -g ${PACKAGE_NAME}@${version}`);
|
|
87
143
|
}
|
|
88
|
-
execSync(command, { stdio: 'pipe', timeout: 60000 });
|
|
144
|
+
execSync(command, { stdio: 'pipe', timeout: 60000, windowsHide: true });
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Starts the upgrade in a detached background process.
|
|
148
|
+
*/
|
|
149
|
+
export function startDetachedUpgrade(method, version, commandStarter = defaultDetachedCommandStarter) {
|
|
150
|
+
var _a;
|
|
151
|
+
const command = (_a = getUpgradeCommandOverride()) !== null && _a !== void 0 ? _a : getUpgradeCommand(method, version);
|
|
152
|
+
if (!command) {
|
|
153
|
+
throw new Error(`Unable to auto-upgrade: unknown installation method. ` +
|
|
154
|
+
`Please upgrade manually: npm install -g ${PACKAGE_NAME}@${version}`);
|
|
155
|
+
}
|
|
156
|
+
commandStarter(command);
|
|
89
157
|
}
|
|
90
158
|
//# sourceMappingURL=installation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,YAAY,GAAG,OAAO,CAAC;AAQ7B,MAAM,oBAAoB,GAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACvE,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACX,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAA2B,OAAO,CAAC,EAAE;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE;QAC7B,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KACpB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF,SAAS,wBAAwB;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,SAAS,CAAC;AACpE,CAAC;AAED,SAAS,yBAAyB;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,kBAAkB;IACvB,OAAO;QACH,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;QAC1C,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,YAAY,YAAY,EAAE;QACnE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE;KAC5D,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IACxB,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,kBAAkB,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;gBAC7B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnC,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAClB,CAAC;QACL,CAAC;QAAC,WAAM,CAAC;YACL,6DAA6D;QACjE,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAgB,iBAAiB;yDACnC,gBAA+B,oBAAoB;QAEnD,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,kBAAkB,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC;gBAClB,CAAC;YACL,CAAC;YAAC,WAAM,CAAC;gBACL,6DAA6D;YACjE,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CAAA;AAED;;;GAGG;AACH,MAAM,UAAgB,kBAAkB;;;QACpC,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;QACzD,IAAI,qBAAqB,EAAE,CAAC;YACxB,OAAO,qBAAqB,CAAC;QACjC,CAAC;QAED,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,8BAA8B,YAAY,SAAS,EAAE;gBAC9E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;YAC7D,OAAO,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI,CAAC;QAChC,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,OAAe;IACpE,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,KAAK;YACN,OAAO,kBAAkB,YAAY,IAAI,OAAO,EAAE,CAAC;QACvD,KAAK,KAAK;YACN,OAAO,cAAc,YAAY,IAAI,OAAO,EAAE,CAAC;QACnD,KAAK,MAAM;YACP,OAAO,mBAAmB,YAAY,IAAI,OAAO,EAAE,CAAC;QACxD;YACI,OAAO,IAAI,CAAC;IACpB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,OAAe;IACjE,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACX,uDAAuD;YACnD,2CAA2C,YAAY,IAAI,OAAO,EAAE,CAC3E,CAAC;IACN,CAAC;IACD,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAChC,MAAqB,EACrB,OAAe,EACf,iBAAyC,6BAA6B;;IAEtE,MAAM,OAAO,GAAG,MAAA,yBAAyB,EAAE,mCAAI,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClF,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACX,uDAAuD;YACnD,2CAA2C,YAAY,IAAI,OAAO,EAAE,CAC3E,CAAC;IACN,CAAC;IAED,cAAc,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC"}
|
package/lib/upgrade/upgrade.d.ts
CHANGED
|
@@ -1,20 +1,40 @@
|
|
|
1
|
+
import type { InstallMethod } from './installation.js';
|
|
1
2
|
/**
|
|
2
3
|
* Compares two semver version strings.
|
|
3
4
|
* Returns true if `latest` is newer than `current`.
|
|
4
5
|
*/
|
|
5
6
|
export declare function isNewerVersion(current: string, latest: string): boolean;
|
|
7
|
+
export interface AvailableUpgrade {
|
|
8
|
+
current: string;
|
|
9
|
+
latest: string;
|
|
10
|
+
method: InstallMethod;
|
|
11
|
+
}
|
|
12
|
+
export interface AvailableUpgradeDependencies {
|
|
13
|
+
version: string;
|
|
14
|
+
fetchLatestVersion: () => Promise<string | null>;
|
|
15
|
+
detectMethod: () => Promise<InstallMethod>;
|
|
16
|
+
}
|
|
17
|
+
export interface AutoUpgradeDependencies extends AvailableUpgradeDependencies {
|
|
18
|
+
startUpgrade: (method: InstallMethod, version: string) => void;
|
|
19
|
+
writeStderr: (message: string) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Checks whether a newer version is available and returns the target version
|
|
23
|
+
* plus the detected install method.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAvailableUpgrade(dependencies?: AvailableUpgradeDependencies): Promise<AvailableUpgrade | null>;
|
|
6
26
|
/**
|
|
7
27
|
* Runs the silent auto-upgrade check in the background.
|
|
8
28
|
*
|
|
9
29
|
* Called on every CLI invocation. This function:
|
|
10
30
|
* 1. Fetches the latest version from npm
|
|
11
31
|
* 2. Compares with the current installed version
|
|
12
|
-
* 3. If newer,
|
|
13
|
-
* 4. Prints a brief message to stderr on
|
|
32
|
+
* 3. If newer, starts a detached background upgrade using the detected install method
|
|
33
|
+
* 4. Prints a brief message to stderr on fallback or when running non-interactively
|
|
14
34
|
*
|
|
15
35
|
* All errors are swallowed silently to never disrupt the user's command.
|
|
16
36
|
*/
|
|
17
|
-
export declare function autoUpgrade(): Promise<void>;
|
|
37
|
+
export declare function autoUpgrade(dependencies?: AutoUpgradeDependencies): Promise<void>;
|
|
18
38
|
/**
|
|
19
39
|
* Runs an explicit foreground upgrade with user-facing output.
|
|
20
40
|
* Used by the `bkper upgrade` command.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAwB,SAAQ,4BAA4B;IACzE,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAgCD;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,YAAY,GAAE,4BAA0E,GACzF,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAWlC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC7B,YAAY,GAAE,uBAAgE,GAC/E,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACnC,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
package/lib/upgrade/upgrade.js
CHANGED
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { VERSION, fetchLatestVersion, detectMethod, executeUpgrade, getUpgradeCommand, } from './installation.js';
|
|
10
|
+
import { VERSION, fetchLatestVersion, detectMethod, detectMethodAsync, executeUpgrade, getUpgradeCommand, startDetachedUpgrade, } from './installation.js';
|
|
11
11
|
/**
|
|
12
12
|
* Compares two semver version strings.
|
|
13
13
|
* Returns true if `latest` is newer than `current`.
|
|
@@ -22,37 +22,77 @@ export function isNewerVersion(current, latest) {
|
|
|
22
22
|
return lMinor > cMinor;
|
|
23
23
|
return lPatch > cPatch;
|
|
24
24
|
}
|
|
25
|
+
function writeAutoUpgradeMessage(message) {
|
|
26
|
+
if (process.stdout.isTTY === true && process.stderr.isTTY === true) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
process.stderr.write(message);
|
|
30
|
+
}
|
|
31
|
+
function createDefaultAvailableUpgradeDependencies() {
|
|
32
|
+
return {
|
|
33
|
+
version: VERSION,
|
|
34
|
+
fetchLatestVersion,
|
|
35
|
+
detectMethod: detectMethodAsync,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function createDefaultAutoUpgradeDependencies() {
|
|
39
|
+
return Object.assign(Object.assign({}, createDefaultAvailableUpgradeDependencies()), { startUpgrade: startDetachedUpgrade, writeStderr: writeAutoUpgradeMessage });
|
|
40
|
+
}
|
|
41
|
+
function getManualUpgradeMessage(current, latest) {
|
|
42
|
+
return (`\nbkper ${latest} available (current: ${current}). ` +
|
|
43
|
+
`Upgrade manually: npm install -g bkper@${latest}\n`);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Checks whether a newer version is available and returns the target version
|
|
47
|
+
* plus the detected install method.
|
|
48
|
+
*/
|
|
49
|
+
export function getAvailableUpgrade() {
|
|
50
|
+
return __awaiter(this, arguments, void 0, function* (dependencies = createDefaultAvailableUpgradeDependencies()) {
|
|
51
|
+
const latest = yield dependencies.fetchLatestVersion();
|
|
52
|
+
if (!latest)
|
|
53
|
+
return null;
|
|
54
|
+
if (!isNewerVersion(dependencies.version, latest))
|
|
55
|
+
return null;
|
|
56
|
+
const method = yield dependencies.detectMethod();
|
|
57
|
+
return {
|
|
58
|
+
current: dependencies.version,
|
|
59
|
+
latest,
|
|
60
|
+
method,
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
}
|
|
25
64
|
/**
|
|
26
65
|
* Runs the silent auto-upgrade check in the background.
|
|
27
66
|
*
|
|
28
67
|
* Called on every CLI invocation. This function:
|
|
29
68
|
* 1. Fetches the latest version from npm
|
|
30
69
|
* 2. Compares with the current installed version
|
|
31
|
-
* 3. If newer,
|
|
32
|
-
* 4. Prints a brief message to stderr on
|
|
70
|
+
* 3. If newer, starts a detached background upgrade using the detected install method
|
|
71
|
+
* 4. Prints a brief message to stderr on fallback or when running non-interactively
|
|
33
72
|
*
|
|
34
73
|
* All errors are swallowed silently to never disrupt the user's command.
|
|
35
74
|
*/
|
|
36
75
|
export function autoUpgrade() {
|
|
37
|
-
return __awaiter(this,
|
|
76
|
+
return __awaiter(this, arguments, void 0, function* (dependencies = createDefaultAutoUpgradeDependencies()) {
|
|
38
77
|
try {
|
|
39
|
-
const
|
|
40
|
-
if (!
|
|
41
|
-
return;
|
|
42
|
-
if (!isNewerVersion(VERSION, latest))
|
|
78
|
+
const availableUpgrade = yield getAvailableUpgrade(dependencies);
|
|
79
|
+
if (!availableUpgrade)
|
|
43
80
|
return;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// Can't auto-upgrade if we don't know how it was installed.
|
|
47
|
-
// Print a hint to stderr so it doesn't pollute stdout.
|
|
48
|
-
process.stderr.write(`\nbkper ${latest} available (current: ${VERSION}). ` +
|
|
49
|
-
`Upgrade manually: npm install -g bkper@${latest}\n`);
|
|
81
|
+
if (availableUpgrade.method === 'unknown') {
|
|
82
|
+
dependencies.writeStderr(getManualUpgradeMessage(availableUpgrade.current, availableUpgrade.latest));
|
|
50
83
|
return;
|
|
51
84
|
}
|
|
52
|
-
|
|
53
|
-
|
|
85
|
+
try {
|
|
86
|
+
dependencies.startUpgrade(availableUpgrade.method, availableUpgrade.latest);
|
|
87
|
+
dependencies.writeStderr(`\nbkper update started in background: ` +
|
|
88
|
+
`${availableUpgrade.current} \u2192 ${availableUpgrade.latest} ` +
|
|
89
|
+
`(restart later to use)\n`);
|
|
90
|
+
}
|
|
91
|
+
catch (_a) {
|
|
92
|
+
dependencies.writeStderr(getManualUpgradeMessage(availableUpgrade.current, availableUpgrade.latest));
|
|
93
|
+
}
|
|
54
94
|
}
|
|
55
|
-
catch (
|
|
95
|
+
catch (_b) {
|
|
56
96
|
// Silent failure — never break the user's command
|
|
57
97
|
}
|
|
58
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACH,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bkper",
|
|
3
|
-
"version": "4.10.
|
|
3
|
+
"version": "4.10.3",
|
|
4
4
|
"description": "Command line client for Bkper",
|
|
5
5
|
"bin": {
|
|
6
6
|
"bkper": "./lib/cli.js"
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"postversion": "git push --tags && yarn publish --new-version $npm_package_version && git push && echo \"Successfully released version $npm_package_version!\""
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@mariozechner/pi-coding-agent": "^0.
|
|
54
|
+
"@mariozechner/pi-coding-agent": "^0.62.0",
|
|
55
55
|
"bkper-js": "^2.31.1",
|
|
56
56
|
"commander": "^13.1.0",
|
|
57
57
|
"dotenv": "^8.2.0",
|