bkper 4.11.3 → 4.12.0
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 +25 -13
- package/lib/agent/cli-dispatch.d.ts +1 -5
- package/lib/agent/cli-dispatch.d.ts.map +1 -1
- package/lib/agent/cli-dispatch.js +2 -5
- package/lib/agent/cli-dispatch.js.map +1 -1
- package/lib/cli.js +11 -6
- package/lib/cli.js.map +1 -1
- package/lib/commands/agent-command.d.ts +3 -1
- package/lib/commands/agent-command.d.ts.map +1 -1
- package/lib/commands/agent-command.js +15 -13
- package/lib/commands/agent-command.js.map +1 -1
- package/lib/docs/cli-reference.md +25 -13
- package/lib/release/versioning.d.ts +5 -0
- package/lib/release/versioning.d.ts.map +1 -0
- package/lib/release/versioning.js +32 -0
- package/lib/release/versioning.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
A unified **interface for [Bkper](https://bkper.com)**. Use `bkper` in two complementary modes:
|
|
7
7
|
|
|
8
|
-
- **Interactive mode** — run `bkper`
|
|
8
|
+
- **Interactive mode** — run `bkper agent` to open the Bkper Agent TUI
|
|
9
9
|
- **Command mode** — run `bkper <command>` for explicit CLI workflows, scripts, and automation
|
|
10
10
|
|
|
11
11
|
With one tool, you can build and deploy Bkper apps, and manage financial data -- books, accounts, transactions, and balances.
|
|
@@ -45,10 +45,15 @@ bkper auth login
|
|
|
45
45
|
### Start using bkper
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
#
|
|
48
|
+
# Show CLI help
|
|
49
49
|
bkper
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
+
```bash
|
|
53
|
+
# Interactive mode (agent TUI)
|
|
54
|
+
bkper agent
|
|
55
|
+
```
|
|
56
|
+
|
|
52
57
|
```bash
|
|
53
58
|
# Command mode (explicit command)
|
|
54
59
|
bkper book list
|
|
@@ -79,7 +84,7 @@ curl -s -H "Authorization: Bearer $TOKEN" \
|
|
|
79
84
|
|
|
80
85
|
## Interactive Mode (powered by Pi)
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
Run `bkper agent` to start the embedded Bkper Agent TUI. Running `bkper` with no arguments shows CLI help.
|
|
83
88
|
|
|
84
89
|
Bkper's agent mode is intentionally a **thin wrapper** around [Pi][Pi]:
|
|
85
90
|
|
|
@@ -95,25 +100,30 @@ On each agent startup, bkper performs a background CLI auto-update check (same b
|
|
|
95
100
|
Use Pi CLI features directly through bkper:
|
|
96
101
|
|
|
97
102
|
```bash
|
|
98
|
-
bkper agent
|
|
103
|
+
bkper agent <pi-args>
|
|
99
104
|
```
|
|
100
105
|
|
|
106
|
+
If no Pi arguments are provided, `bkper agent` starts the interactive Bkper Agent experience.
|
|
107
|
+
If Pi arguments are provided, everything after `bkper agent` is passed through to Pi.
|
|
108
|
+
|
|
101
109
|
Examples:
|
|
102
110
|
|
|
103
111
|
```bash
|
|
104
|
-
bkper agent
|
|
105
|
-
bkper agent --
|
|
106
|
-
bkper agent
|
|
112
|
+
bkper agent -p "Summarize this repository"
|
|
113
|
+
bkper agent --model openai/gpt-4o -c
|
|
114
|
+
bkper agent install <pi-package-source>
|
|
115
|
+
bkper agent --help
|
|
107
116
|
```
|
|
108
117
|
|
|
109
|
-
`bkper agent` keeps Bkper defaults (including Bkper system prompt) unless you explicitly pass `--system-prompt`.
|
|
118
|
+
`bkper agent` keeps Bkper defaults (including the Bkper system prompt) unless you explicitly pass `--system-prompt`.
|
|
119
|
+
Use `bkper help agent` for the Bkper CLI command help, and `bkper agent --help` for Pi help.
|
|
110
120
|
|
|
111
121
|
For all available passthrough flags and commands, see the Pi CLI reference:
|
|
112
122
|
https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent#cli-reference
|
|
113
123
|
|
|
114
124
|
Pi-specific extensions are loaded from Pi extension folders (for example `.pi/extensions` and `~/.pi/agent/extensions`).
|
|
115
125
|
|
|
116
|
-
<!-- Suggested showcase media: add a short terminal GIF here (bkper -> "Bkper Agent ready." -> one prompt). -->
|
|
126
|
+
<!-- Suggested showcase media: add a short terminal GIF here (bkper agent -> "Bkper Agent ready." -> one prompt). -->
|
|
117
127
|
|
|
118
128
|
---
|
|
119
129
|
|
|
@@ -855,9 +865,10 @@ deployment:
|
|
|
855
865
|
- `auth logout` - Remove stored credentials
|
|
856
866
|
- `auth token` - Print the current OAuth access token to stdout
|
|
857
867
|
|
|
858
|
-
#### Agent
|
|
868
|
+
#### Agent
|
|
859
869
|
|
|
860
|
-
- `agent
|
|
870
|
+
- `agent` - Start the interactive Bkper Agent
|
|
871
|
+
- `agent <pi-args...>` - Run Pi CLI with Bkper defaults (system prompt/resources)
|
|
861
872
|
|
|
862
873
|
#### App Lifecycle
|
|
863
874
|
|
|
@@ -917,7 +928,8 @@ Bkper.setConfig({
|
|
|
917
928
|
|
|
918
929
|
Releases are published by GitHub Actions (Trusted Publisher with OIDC), not from local machines.
|
|
919
930
|
|
|
920
|
-
-
|
|
921
|
-
-
|
|
931
|
+
- Add one release label to a PR targeting `main`: `release:patch`, `release:minor`, or `release:major`
|
|
932
|
+
- Before merge, the PR version bump workflow updates `package.json` on the PR branch to the next version derived from the latest release tag
|
|
933
|
+
- On each `main` push, the delivery workflow checks the merged PR label, verifies `package.json` already contains the expected next version, publishes to npm, and pushes the new tag
|
|
922
934
|
- Without a release label, publish is skipped
|
|
923
935
|
- Dependabot Pi update PRs are automatically labeled `release:patch` and set to GitHub native auto-merge when repo auto-merge and required checks are enabled
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
stdinIsTTY: boolean;
|
|
3
|
-
stdoutIsTTY: boolean;
|
|
4
|
-
}
|
|
5
|
-
export declare function shouldStartAgentMode(argv: string[], environment?: CliDispatchEnvironment): boolean;
|
|
1
|
+
export declare function shouldRunAgentCommand(argv: string[]): boolean;
|
|
6
2
|
//# sourceMappingURL=cli-dispatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-dispatch.d.ts","sourceRoot":"","sources":["../../src/agent/cli-dispatch.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"cli-dispatch.d.ts","sourceRoot":"","sources":["../../src/agent/cli-dispatch.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAE7D"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
export function
|
|
2
|
-
|
|
3
|
-
stdoutIsTTY: process.stdout.isTTY === true,
|
|
4
|
-
}) {
|
|
5
|
-
return argv.length === 2 && environment.stdinIsTTY && environment.stdoutIsTTY;
|
|
1
|
+
export function shouldRunAgentCommand(argv) {
|
|
2
|
+
return argv[2] === 'agent';
|
|
6
3
|
}
|
|
7
4
|
//# sourceMappingURL=cli-dispatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-dispatch.js","sourceRoot":"","sources":["../../src/agent/cli-dispatch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-dispatch.js","sourceRoot":"","sources":["../../src/agent/cli-dispatch.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAChD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AAC/B,CAAC"}
|
package/lib/cli.js
CHANGED
|
@@ -19,15 +19,20 @@ import { registerTransactionCommands } from './commands/transactions/register.js
|
|
|
19
19
|
import { registerBalanceCommands } from './commands/balances/register.js';
|
|
20
20
|
import { registerCollectionCommands } from './commands/collections/register.js';
|
|
21
21
|
import { registerUpgradeCommand } from './commands/upgrade.js';
|
|
22
|
-
import { registerAgentCommands } from './commands/agent-command.js';
|
|
22
|
+
import { registerAgentCommands, runAgentCommand } from './commands/agent-command.js';
|
|
23
|
+
import { shouldRunAgentCommand } from './agent/cli-dispatch.js';
|
|
23
24
|
import { VERSION, autoUpgrade } from './upgrade/index.js';
|
|
24
|
-
import { shouldStartAgentMode } from './agent/cli-dispatch.js';
|
|
25
|
-
import { runAgentMode } from './agent/run-agent-mode.js';
|
|
26
25
|
function main() {
|
|
27
26
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
if (shouldRunAgentCommand(process.argv)) {
|
|
28
|
+
try {
|
|
29
|
+
yield runAgentCommand(process.argv.slice(3));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
console.error('Error running agent command:', err);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
31
36
|
}
|
|
32
37
|
// Version
|
|
33
38
|
program.version(VERSION, '-v, --version');
|
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;
|
|
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,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1D,SAAe,IAAI;;QACf,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACD,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO;YACX,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
export interface AgentCommandDependencies {
|
|
3
3
|
runPi: (args: string[]) => Promise<void>;
|
|
4
|
+
runInteractiveMode: () => Promise<void>;
|
|
4
5
|
}
|
|
5
|
-
export declare function
|
|
6
|
+
export declare function runAgentCommand(piArgs: string[], dependencies?: AgentCommandDependencies): Promise<void>;
|
|
7
|
+
export declare function registerAgentCommands(program: Command): void;
|
|
6
8
|
//# sourceMappingURL=agent-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-command.d.ts","sourceRoot":"","sources":["../../src/commands/agent-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-command.d.ts","sourceRoot":"","sources":["../../src/commands/agent-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAqBD,wBAAsB,eAAe,CACjC,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,GAAE,wBAAsD,GACrE,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM5D"}
|
|
@@ -8,10 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { main as runPiMain } from '@mariozechner/pi-coding-agent';
|
|
11
|
+
import { runAgentMode } from '../agent/run-agent-mode.js';
|
|
11
12
|
import { getBkperAgentSystemPrompt } from '../agent/system-prompt.js';
|
|
12
13
|
function createDefaultDependencies() {
|
|
13
14
|
return {
|
|
14
15
|
runPi: (args) => runPiMain(args),
|
|
16
|
+
runInteractiveMode: () => runAgentMode(),
|
|
15
17
|
};
|
|
16
18
|
}
|
|
17
19
|
function hasSystemPromptArg(args) {
|
|
@@ -23,21 +25,21 @@ function buildPiArgs(args) {
|
|
|
23
25
|
}
|
|
24
26
|
return ['--system-prompt', getBkperAgentSystemPrompt(), ...args];
|
|
25
27
|
}
|
|
26
|
-
export function
|
|
28
|
+
export function runAgentCommand(piArgs_1) {
|
|
29
|
+
return __awaiter(this, arguments, void 0, function* (piArgs, dependencies = createDefaultDependencies()) {
|
|
30
|
+
if (piArgs.length === 0) {
|
|
31
|
+
yield dependencies.runInteractiveMode();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const args = buildPiArgs(piArgs);
|
|
35
|
+
yield dependencies.runPi(args);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export function registerAgentCommands(program) {
|
|
27
39
|
program
|
|
28
40
|
.command('agent [piArgs...]')
|
|
29
|
-
.description('
|
|
41
|
+
.description('Start Bkper Agent or run Pi CLI with Bkper defaults')
|
|
30
42
|
.allowUnknownOption(true)
|
|
31
|
-
.allowExcessArguments(true)
|
|
32
|
-
.action((...args_1) => __awaiter(this, [...args_1], void 0, function* (piArgs = []) {
|
|
33
|
-
try {
|
|
34
|
-
const args = buildPiArgs(piArgs);
|
|
35
|
-
yield dependencies.runPi(args);
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
console.error('Error running agent command:', err);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
}));
|
|
43
|
+
.allowExcessArguments(true);
|
|
42
44
|
}
|
|
43
45
|
//# sourceMappingURL=agent-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-command.js","sourceRoot":"","sources":["../../src/commands/agent-command.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-command.js","sourceRoot":"","sources":["../../src/commands/agent-command.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAOtE,SAAS,yBAAyB;IAC9B,OAAO;QACH,KAAK,EAAE,CAAC,IAAc,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1C,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;KAC3C,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,iBAAiB,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,WAAW,CAAC,IAAc;IAC/B,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAgB,eAAe;yDACjC,MAAgB,EAChB,eAAyC,yBAAyB,EAAE;QAEpE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,YAAY,CAAC,kBAAkB,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CAAA;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,OAAO;SACF,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,qDAAqD,CAAC;SAClE,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
A unified **interface for [Bkper](https://bkper.com)**. Use `bkper` in two complementary modes:
|
|
7
7
|
|
|
8
|
-
- **Interactive mode** — run `bkper`
|
|
8
|
+
- **Interactive mode** — run `bkper agent` to open the Bkper Agent TUI
|
|
9
9
|
- **Command mode** — run `bkper <command>` for explicit CLI workflows, scripts, and automation
|
|
10
10
|
|
|
11
11
|
With one tool, you can build and deploy Bkper apps, and manage financial data -- books, accounts, transactions, and balances.
|
|
@@ -45,10 +45,15 @@ bkper auth login
|
|
|
45
45
|
### Start using bkper
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
#
|
|
48
|
+
# Show CLI help
|
|
49
49
|
bkper
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
+
```bash
|
|
53
|
+
# Interactive mode (agent TUI)
|
|
54
|
+
bkper agent
|
|
55
|
+
```
|
|
56
|
+
|
|
52
57
|
```bash
|
|
53
58
|
# Command mode (explicit command)
|
|
54
59
|
bkper book list
|
|
@@ -79,7 +84,7 @@ curl -s -H "Authorization: Bearer $TOKEN" \
|
|
|
79
84
|
|
|
80
85
|
## Interactive Mode (powered by Pi)
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
Run `bkper agent` to start the embedded Bkper Agent TUI. Running `bkper` with no arguments shows CLI help.
|
|
83
88
|
|
|
84
89
|
Bkper's agent mode is intentionally a **thin wrapper** around [Pi][Pi]:
|
|
85
90
|
|
|
@@ -95,25 +100,30 @@ On each agent startup, bkper performs a background CLI auto-update check (same b
|
|
|
95
100
|
Use Pi CLI features directly through bkper:
|
|
96
101
|
|
|
97
102
|
```bash
|
|
98
|
-
bkper agent
|
|
103
|
+
bkper agent <pi-args>
|
|
99
104
|
```
|
|
100
105
|
|
|
106
|
+
If no Pi arguments are provided, `bkper agent` starts the interactive Bkper Agent experience.
|
|
107
|
+
If Pi arguments are provided, everything after `bkper agent` is passed through to Pi.
|
|
108
|
+
|
|
101
109
|
Examples:
|
|
102
110
|
|
|
103
111
|
```bash
|
|
104
|
-
bkper agent
|
|
105
|
-
bkper agent --
|
|
106
|
-
bkper agent
|
|
112
|
+
bkper agent -p "Summarize this repository"
|
|
113
|
+
bkper agent --model openai/gpt-4o -c
|
|
114
|
+
bkper agent install <pi-package-source>
|
|
115
|
+
bkper agent --help
|
|
107
116
|
```
|
|
108
117
|
|
|
109
|
-
`bkper agent` keeps Bkper defaults (including Bkper system prompt) unless you explicitly pass `--system-prompt`.
|
|
118
|
+
`bkper agent` keeps Bkper defaults (including the Bkper system prompt) unless you explicitly pass `--system-prompt`.
|
|
119
|
+
Use `bkper help agent` for the Bkper CLI command help, and `bkper agent --help` for Pi help.
|
|
110
120
|
|
|
111
121
|
For all available passthrough flags and commands, see the Pi CLI reference:
|
|
112
122
|
https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent#cli-reference
|
|
113
123
|
|
|
114
124
|
Pi-specific extensions are loaded from Pi extension folders (for example `.pi/extensions` and `~/.pi/agent/extensions`).
|
|
115
125
|
|
|
116
|
-
<!-- Suggested showcase media: add a short terminal GIF here (bkper -> "Bkper Agent ready." -> one prompt). -->
|
|
126
|
+
<!-- Suggested showcase media: add a short terminal GIF here (bkper agent -> "Bkper Agent ready." -> one prompt). -->
|
|
117
127
|
|
|
118
128
|
---
|
|
119
129
|
|
|
@@ -855,9 +865,10 @@ deployment:
|
|
|
855
865
|
- `auth logout` - Remove stored credentials
|
|
856
866
|
- `auth token` - Print the current OAuth access token to stdout
|
|
857
867
|
|
|
858
|
-
#### Agent
|
|
868
|
+
#### Agent
|
|
859
869
|
|
|
860
|
-
- `agent
|
|
870
|
+
- `agent` - Start the interactive Bkper Agent
|
|
871
|
+
- `agent <pi-args...>` - Run Pi CLI with Bkper defaults (system prompt/resources)
|
|
861
872
|
|
|
862
873
|
#### App Lifecycle
|
|
863
874
|
|
|
@@ -917,7 +928,8 @@ Bkper.setConfig({
|
|
|
917
928
|
|
|
918
929
|
Releases are published by GitHub Actions (Trusted Publisher with OIDC), not from local machines.
|
|
919
930
|
|
|
920
|
-
-
|
|
921
|
-
-
|
|
931
|
+
- Add one release label to a PR targeting `main`: `release:patch`, `release:minor`, or `release:major`
|
|
932
|
+
- Before merge, the PR version bump workflow updates `package.json` on the PR branch to the next version derived from the latest release tag
|
|
933
|
+
- On each `main` push, the delivery workflow checks the merged PR label, verifies `package.json` already contains the expected next version, publishes to npm, and pushes the new tag
|
|
922
934
|
- Without a release label, publish is skipped
|
|
923
935
|
- Dependabot Pi update PRs are automatically labeled `release:patch` and set to GitHub native auto-merge when repo auto-merge and required checks are enabled
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type ReleaseLevel = 'patch' | 'minor' | 'major';
|
|
2
|
+
export declare function normalizeTagVersion(versionOrTag: string): string;
|
|
3
|
+
export declare function bumpVersion(currentVersion: string, level: ReleaseLevel): string;
|
|
4
|
+
export declare function resolveNextVersion(latestTag: string | null, packageVersion: string, level: ReleaseLevel): string;
|
|
5
|
+
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/release/versioning.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAIvD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAqB/E;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,GACpB,MAAM,CAGR"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const SEMVER_PATTERN = /^(\d+)\.(\d+)\.(\d+)$/;
|
|
2
|
+
export function normalizeTagVersion(versionOrTag) {
|
|
3
|
+
const normalized = versionOrTag.startsWith('v') ? versionOrTag.slice(1) : versionOrTag;
|
|
4
|
+
if (!SEMVER_PATTERN.test(normalized)) {
|
|
5
|
+
throw new Error(`Invalid semver version: ${versionOrTag}`);
|
|
6
|
+
}
|
|
7
|
+
return normalized;
|
|
8
|
+
}
|
|
9
|
+
export function bumpVersion(currentVersion, level) {
|
|
10
|
+
const normalized = normalizeTagVersion(currentVersion);
|
|
11
|
+
const match = normalized.match(SEMVER_PATTERN);
|
|
12
|
+
if (!match) {
|
|
13
|
+
throw new Error(`Invalid semver version: ${currentVersion}`);
|
|
14
|
+
}
|
|
15
|
+
const [, majorText, minorText, patchText] = match;
|
|
16
|
+
const major = Number(majorText);
|
|
17
|
+
const minor = Number(minorText);
|
|
18
|
+
const patch = Number(patchText);
|
|
19
|
+
switch (level) {
|
|
20
|
+
case 'major':
|
|
21
|
+
return `${major + 1}.0.0`;
|
|
22
|
+
case 'minor':
|
|
23
|
+
return `${major}.${minor + 1}.0`;
|
|
24
|
+
case 'patch':
|
|
25
|
+
return `${major}.${minor}.${patch + 1}`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function resolveNextVersion(latestTag, packageVersion, level) {
|
|
29
|
+
const currentVersion = latestTag ? normalizeTagVersion(latestTag) : normalizeTagVersion(packageVersion);
|
|
30
|
+
return bumpVersion(currentVersion, level);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=versioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/release/versioning.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACpD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEvF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,cAAsB,EAAE,KAAmB;IACnE,MAAM,UAAU,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAEhC,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,OAAO;YACR,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;QAC9B,KAAK,OAAO;YACR,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;QACrC,KAAK,OAAO;YACR,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;IAChD,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,SAAwB,EACxB,cAAsB,EACtB,KAAmB;IAEnB,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACxG,OAAO,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC"}
|