bkper 4.18.0 → 4.18.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.
package/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
  [App Template]: https://github.com/bkper/bkper-app-template
3
3
  [Pi]: https://pi.dev/
4
4
 
5
- A unified **interface for [Bkper](https://bkper.com)**. Use `bkper` in two complementary modes:
5
+ A unified **interface for [Bkper](https://bkper.com)**. Use `bkper` in two complementary ways:
6
6
 
7
- - **Interactive mode** — run `bkper` or `bkper agent` to open the Bkper Agent TUI
8
- - **Command mode** — run `bkper <command>` for explicit CLI workflows, scripts, and automation
7
+ - **Ask the Bkper Agent** — run `bkper` for guided, interactive help in your terminal
8
+ - **Run CLI commands** — run `bkper <command>` for scripts, exports, automations, and app workflows
9
9
 
10
- With one tool, you can build and deploy Bkper apps, and manage financial data -- books, accounts, transactions, and balances.
10
+ With one tool, you can work with Bkper from your terminal, built-in agent, or external AI tools — managing financial data, building apps, and automating workflows.
11
11
 
12
12
  [![npm](https://img.shields.io/npm/v/bkper?color=%235889e4)](https://www.npmjs.com/package/bkper)
13
13
 
@@ -19,14 +19,14 @@ With one tool, you can build and deploy Bkper apps, and manage financial data --
19
19
 
20
20
  ### Install (choose one)
21
21
 
22
- ```bash tab="bun"
23
- bun add -g bkper
24
- ```
25
-
26
22
  ```bash tab="npm"
27
23
  npm i -g bkper
28
24
  ```
29
25
 
26
+ ```bash tab="bun"
27
+ bun add -g bkper
28
+ ```
29
+
30
30
  ```bash tab="pnpm"
31
31
  pnpm add -g bkper
32
32
  ```
@@ -41,104 +41,94 @@ yarn global add bkper
41
41
  bkper auth login
42
42
  ```
43
43
 
44
- `bkper auth login` connects the CLI to your Bkper account. It prints a Google verification URL and one-time code. Open the URL in any browser, enter the code, and the CLI stores credentials locally. When you are done working, run `bkper auth logout` to clear local credentials.
44
+ `bkper auth login` connects the CLI to your Bkper account. The same local authentication can be used by direct CLI commands, the built-in agent, external coding agents, scripts, and local app development.
45
45
 
46
46
  ---
47
47
 
48
48
  ## Get started
49
49
 
50
- ### Interactive mode (recommended)
50
+ ### Ask the Bkper Agent
51
51
 
52
52
  ```bash
53
53
  bkper
54
54
  ```
55
55
 
56
- `bkper agent` starts the same interactive experience. Bare `bkper` only opens the TUI in an interactive terminal; in non-interactive contexts it prints CLI help instead.
56
+ Run `bkper` to open the built-in Bkper Agent in your terminal.
57
57
 
58
58
  ![Bkper CLI Agent TUI](https://raw.githubusercontent.com/bkper/bkper-cli/main/assets/bkper-agent-cli.png)
59
59
 
60
- On first launch, type `/login` and select a provider. `/login` connects the agent to an AI model provider; it is separate from `bkper auth login`, which connects the CLI to your Bkper account. We recommend [OpenCode Go](https://opencode.ai/go) for open-weights models and [OpenCode Zen](https://opencode.ai/zen) for frontier models — both give you access to high-quality models with no extra setup.
61
-
62
- Good starting prompts:
63
-
64
- - `What are the main account types in Bkper?`
65
- - `How do I query transactions using the CLI?`
66
- - `What files are in this project?`
67
- - `Help me create a script that lists all accounts in my book`
60
+ On first agent launch, type `/login` in the TUI if model access is not configured yet. `bkper auth login` connects the CLI to your Bkper account. `/login` connects the interactive agent to an AI/model provider.
68
61
 
69
- See [Interactive Mode](#interactive-mode-powered-by-pi) below for passthrough flags and advanced usage.
62
+ For frontier models, an existing [ChatGPT Plus/Pro subscription](https://chatgpt.com/pricing/) with Codex works very well. [Claude subscriptions](https://claude.com/pricing) are also supported if Claude is your preferred frontier model. For open-weights models, [OpenCode Go](https://opencode.ai/go) is a great option.
70
63
 
71
- ### Command mode
72
-
73
- ```bash
74
- # List your books
75
- bkper book list
64
+ ### Safe starting prompts:
76
65
 
77
- # Show CLI help
78
- bkper --help
66
+ ```text
67
+ Help me setup a chart of accounts for my business
79
68
  ```
80
69
 
81
- Pick a book and create your first transaction:
82
-
83
- ```bash
84
- bkper transaction create -b <bookId> --description "Office supplies 123.78"
70
+ ```text
71
+ Find possible duplicate transactions from last month
85
72
  ```
86
73
 
87
- > Run `bkper --help` or `bkper <command> --help` for built-in documentation on any command.
74
+ ```text
75
+ Review unchecked transactions from this month and suggest what needs attention
76
+ ```
88
77
 
89
- → See [Data Management](#data-management) and [App Management](#app-management) below for full command references.
78
+ ```text
79
+ Show me a balance sheet for my book for last year
80
+ ```
90
81
 
91
- ---
82
+ ```text
83
+ Show me profit and loss for my book for last month
84
+ ```
92
85
 
93
- ## Interactive Mode (powered by Pi)
86
+ ```text
87
+ Prepare an exploratory tax worksheet for 2025
88
+ ```
94
89
 
95
- Bkper's agent mode is intentionally a **thin wrapper** around [Pi][Pi]:
90
+ ### Run CLI commands
96
91
 
97
- - Pi provides the core agent runtime and TUI
98
- - bkper adds Bkper-specific domain context and startup maintenance behavior
92
+ Use direct commands for scripts, exports, automation, and repeatable workflows.
99
93
 
100
- ### Startup maintenance (non-blocking)
94
+ ```bash
95
+ # List your books
96
+ bkper book list
101
97
 
102
- On each agent startup, bkper performs a background CLI auto-update check. Normal command-mode invocations do not auto-update; use `bkper upgrade` when you want to upgrade explicitly.
98
+ # Query transactions
99
+ bkper transaction list -b <bookId> -q 'on:2026-06' --format csv
103
100
 
104
- ### Pi passthrough
101
+ # Query balances
102
+ bkper balance list -b <bookId> -q 'on:2026-06-30'
103
+ ```
105
104
 
106
- Use Pi CLI features directly through bkper:
105
+ Capture a receipt as a draft, then review and complete it in Bkper or with the agent:
107
106
 
108
107
  ```bash
109
- bkper agent <pi-args>
108
+ bkper transaction create -b <bookId> --file ./receipt.pdf
110
109
  ```
111
110
 
112
- If no Pi arguments are provided, `bkper agent` starts the interactive Bkper Agent experience.
113
- A bare `bkper` command is a convenience shortcut for the same TUI when run in an interactive terminal.
114
- If Pi arguments are provided, everything after `bkper agent` is passed through to Pi.
115
-
116
- Examples:
111
+ > Run `bkper --help` or `bkper <command> --help` for built-in documentation on any command.
117
112
 
118
- ```bash
119
- bkper agent -p "Summarize this repository"
120
- bkper agent --model openai/gpt-4o -c
121
- bkper agent install <pi-package-source>
122
- bkper agent --help
123
- ```
113
+ → See [Data Management](#data-management) and [App Management](#app-management) below for full references.
124
114
 
125
- `bkper agent` keeps Bkper defaults (including the Bkper system prompt) unless you explicitly pass `--system-prompt`.
126
- Use `bkper help agent` for the Bkper CLI command help, and `bkper agent --help` for Pi help.
115
+ ---
127
116
 
128
- For all available passthrough flags and commands, see the Pi CLI reference:
129
- https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent#cli-reference
117
+ ## Use Bkper from your existing agent
130
118
 
131
- Pi-specific extensions are loaded from Pi extension folders (for example `.pi/extensions` and `~/.pi/agent/extensions`).
119
+ Install and authenticate the CLI first:
132
120
 
133
- ### Other agent harnesses
121
+ ```bash
122
+ bkper auth login
123
+ ```
134
124
 
135
- `bkper agent` is the first-party Bkper harness. If you prefer Codex, add this repository as a plugin marketplace, then install the `bkper-cli` plugin from Codex's plugin directory:
125
+ For Codex, add this repository as a plugin marketplace, then install the `bkper-cli` plugin from Codex's plugin directory:
136
126
 
137
127
  ```bash
138
128
  codex plugin marketplace add bkper/bkper-cli
139
129
  ```
140
130
 
141
- If you prefer Claude Code, install the Bkper CLI plugin from this repository's Claude marketplace:
131
+ For Claude Code, install the Bkper CLI plugin from this repository's Claude marketplace:
142
132
 
143
133
  ```text
144
134
  /plugin marketplace add bkper/bkper-cli
@@ -151,12 +141,27 @@ For other coding agents — OpenCode, OpenClaw, Hermes Agent, Cursor, or similar
151
141
  npx skills add bkper/bkper-cli --skill bkper-cli
152
142
  ```
153
143
 
154
- The plugins and skill are maintained in this repository and help external agents use the local `bkper` CLI safely. Install and authenticate the CLI first with `bkper auth login` when the agent needs to read or change live Bkper data.
144
+ The plugins and skill help external agents use the local `bkper` CLI with Bkper context, CLI references, and safety guidance.
155
145
 
156
146
  For general Bkper Q&A without local tool access, use the published docs and [`llms.txt`](https://bkper.com/llms.txt) instead.
157
147
 
158
148
  ---
159
149
 
150
+ ## Advanced agent options
151
+
152
+ `bkper agent` starts the same built-in agent experience as `bkper`.
153
+
154
+ Advanced users can pass supported agent-runtime flags through:
155
+
156
+ ```bash
157
+ bkper agent <args>
158
+ bkper agent --help
159
+ ```
160
+
161
+ `bkper agent` keeps Bkper defaults, including the Bkper system prompt, unless you explicitly override them. For the underlying agent runtime reference, see [Pi][Pi].
162
+
163
+ ---
164
+
160
165
  ## Data Management
161
166
 
162
167
  Manage books, files, accounts, transactions, and balances.
@@ -165,8 +170,8 @@ Manage books, files, accounts, transactions, and balances.
165
170
  bkper book list
166
171
  bkper account list -b <bookId>
167
172
  bkper file list -b <bookId> --limit 100
168
- bkper transaction list -b <bookId> -q 'on:2025' --format csv
169
- bkper balance list -b <bookId> -q 'on:2025-12-31' --format csv
173
+ bkper transaction list -b <bookId> -q 'on:2026' --format csv
174
+ bkper balance list -b <bookId> -q 'on:2026-12-31' --format csv
170
175
  ```
171
176
 
172
177
  → [Full Data Management reference](https://github.com/bkper/bkper-cli/blob/main/skill/references/cli/data-management.md)
@@ -181,7 +186,8 @@ Build, deploy, and manage Bkper apps.
181
186
  bkper app init my-app
182
187
  bkper app get my-app --json
183
188
  bkper app dev
184
- bkper app sync && bkper app deploy
189
+ bkper app sync
190
+ bkper app deploy
185
191
  bkper app logs --last 50
186
192
  bkper app logs my-app --level error
187
193
  ```
@@ -194,10 +200,11 @@ bkper app logs my-app --level error
194
200
 
195
201
  ## Programmatic access
196
202
 
203
+ Use the CLI as the authentication bridge for scripts and direct API calls.
204
+
197
205
  ### Access Token
198
206
 
199
- Use the access token for direct API calls from any tool.
200
- This requires a prior `bkper auth login`, and `bkper auth token` does not start an interactive login flow:
207
+ Use the access token for direct API calls from any tool. This requires a prior `bkper auth login`, and `bkper auth token` does not start an interactive login flow:
201
208
 
202
209
  ```bash
203
210
  # Print the current access token
@@ -0,0 +1,28 @@
1
+ export declare const SKILL_ARCHIVE_TYPE = "archive";
2
+ export declare const LATEST_SKILL_METADATA_FILE_NAME = "bkper-cli-skill.json";
3
+ interface SkillFrontmatter {
4
+ name: string;
5
+ description: string;
6
+ }
7
+ export interface SkillDiscoveryEntry extends SkillFrontmatter {
8
+ type: typeof SKILL_ARCHIVE_TYPE;
9
+ url: string;
10
+ digest: string;
11
+ version: string;
12
+ }
13
+ export interface SkillDistributionOptions {
14
+ rootDir: string;
15
+ outputDir: string;
16
+ packageVersion: string;
17
+ repositoryUrl: string;
18
+ }
19
+ export interface SkillDistributionResult {
20
+ entry: SkillDiscoveryEntry;
21
+ archivePath: string;
22
+ latestMetadataPath: string;
23
+ versionedMetadataPath: string;
24
+ }
25
+ export declare function getReleaseAssetUrl(repositoryUrl: string, packageVersion: string, assetFileName: string): string;
26
+ export declare function createSkillDistributionAssets(options: SkillDistributionOptions): Promise<SkillDistributionResult>;
27
+ export {};
28
+ //# sourceMappingURL=skill-distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-distribution.d.ts","sourceRoot":"","sources":["../../src/agent/skill-distribution.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,+BAA+B,yBAAyB,CAAC;AAEtE,UAAU,gBAAgB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,OAAO,kBAAkB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;CACjC;AA8BD,wBAAgB,kBAAkB,CAC9B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACtB,MAAM,CAGR;AA6DD,wBAAsB,6BAA6B,CAC/C,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAiDlC"}
@@ -0,0 +1,120 @@
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 { createHash } from 'node:crypto';
11
+ import { lstat, mkdir, readFile, readdir, writeFile } from 'node:fs/promises';
12
+ import path from 'node:path';
13
+ import { create as createTar } from 'tar';
14
+ import YAML from 'yaml';
15
+ export const SKILL_ARCHIVE_TYPE = 'archive';
16
+ export const LATEST_SKILL_METADATA_FILE_NAME = 'bkper-cli-skill.json';
17
+ function isRecord(value) {
18
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
19
+ }
20
+ function requireString(value, label) {
21
+ if (typeof value !== 'string' || value.length === 0) {
22
+ throw new Error(`${label} must be a non-empty string`);
23
+ }
24
+ return value;
25
+ }
26
+ function getVersionTag(packageVersion) {
27
+ return packageVersion.startsWith('v') ? packageVersion : `v${packageVersion}`;
28
+ }
29
+ function getAssetVersion(packageVersion) {
30
+ return packageVersion.startsWith('v') ? packageVersion.slice(1) : packageVersion;
31
+ }
32
+ function getSkillArchiveFileName(packageVersion) {
33
+ return `bkper-cli-skill-v${getAssetVersion(packageVersion)}.tar.gz`;
34
+ }
35
+ function getVersionedMetadataFileName(packageVersion) {
36
+ return `bkper-cli-skill-v${getAssetVersion(packageVersion)}.json`;
37
+ }
38
+ export function getReleaseAssetUrl(repositoryUrl, packageVersion, assetFileName) {
39
+ const baseUrl = repositoryUrl.replace(/\.git$/, '');
40
+ return `${baseUrl}/releases/download/${getVersionTag(packageVersion)}/${assetFileName}`;
41
+ }
42
+ function parseSkillFrontmatter(content) {
43
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);
44
+ if (!match) {
45
+ throw new Error('skill/SKILL.md is missing YAML frontmatter');
46
+ }
47
+ const parsed = YAML.parse(match[1]);
48
+ if (!isRecord(parsed)) {
49
+ throw new Error('skill/SKILL.md frontmatter must be an object');
50
+ }
51
+ return {
52
+ name: requireString(parsed.name, 'skill name'),
53
+ description: requireString(parsed.description, 'skill description'),
54
+ };
55
+ }
56
+ function collectSkillFiles(directory_1) {
57
+ return __awaiter(this, arguments, void 0, function* (directory, relativeDirectory = '') {
58
+ const entries = (yield readdir(directory, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name));
59
+ const files = [];
60
+ for (const entry of entries) {
61
+ const relativePath = relativeDirectory
62
+ ? `${relativeDirectory}/${entry.name}`
63
+ : entry.name;
64
+ const fullPath = path.join(directory, entry.name);
65
+ if (entry.isDirectory()) {
66
+ files.push(...(yield collectSkillFiles(fullPath, relativePath)));
67
+ continue;
68
+ }
69
+ if (entry.isSymbolicLink()) {
70
+ throw new Error(`Skill archive cannot contain symlinks: ${relativePath}`);
71
+ }
72
+ const stats = yield lstat(fullPath);
73
+ if (stats.isFile()) {
74
+ files.push(relativePath);
75
+ }
76
+ }
77
+ return files;
78
+ });
79
+ }
80
+ function sha256File(filePath) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const bytes = yield readFile(filePath);
83
+ return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;
84
+ });
85
+ }
86
+ function writeJson(filePath, value) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ yield writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
89
+ });
90
+ }
91
+ export function createSkillDistributionAssets(options) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ const skillDir = path.join(options.rootDir, 'skill');
94
+ const skillPath = path.join(skillDir, 'SKILL.md');
95
+ const skill = parseSkillFrontmatter(yield readFile(skillPath, 'utf8'));
96
+ const archiveFileName = getSkillArchiveFileName(options.packageVersion);
97
+ const archivePath = path.join(options.outputDir, archiveFileName);
98
+ const latestMetadataPath = path.join(options.outputDir, LATEST_SKILL_METADATA_FILE_NAME);
99
+ const versionedMetadataPath = path.join(options.outputDir, getVersionedMetadataFileName(options.packageVersion));
100
+ const archiveEntries = yield collectSkillFiles(skillDir);
101
+ yield mkdir(options.outputDir, { recursive: true });
102
+ yield createTar({
103
+ cwd: skillDir,
104
+ file: archivePath,
105
+ gzip: { portable: true },
106
+ portable: true,
107
+ noMtime: true,
108
+ }, archiveEntries);
109
+ const entry = Object.assign(Object.assign({}, skill), { type: SKILL_ARCHIVE_TYPE, url: getReleaseAssetUrl(options.repositoryUrl, options.packageVersion, archiveFileName), digest: yield sha256File(archivePath), version: getAssetVersion(options.packageVersion) });
110
+ yield writeJson(latestMetadataPath, entry);
111
+ yield writeJson(versionedMetadataPath, entry);
112
+ return {
113
+ entry,
114
+ archivePath,
115
+ latestMetadataPath,
116
+ versionedMetadataPath,
117
+ };
118
+ });
119
+ }
120
+ //# sourceMappingURL=skill-distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-distribution.js","sourceRoot":"","sources":["../../src/agent/skill-distribution.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkper",
3
- "version": "4.18.0",
3
+ "version": "4.18.1",
4
4
  "description": "Command line client for Bkper",
5
5
  "bin": {
6
6
  "bkper": "./lib/cli.js"
@@ -32,6 +32,7 @@
32
32
  "build:clean": "gts clean && rimraf temp",
33
33
  "build:compile": "tsc",
34
34
  "build:copy-docs": "mkdir -p lib && rm -rf lib/docs && cp -R skill/references lib/docs",
35
+ "skill:package": "bun ./scripts/generate-skill-distribution.ts",
35
36
  "api:platform": "openapi-typescript https://platform.bkper.app/openapi.json -o src/platform/types.d.ts",
36
37
  "api:platform:local": "openapi-typescript http://localhost:8790/openapi.json -o src/platform/types.d.ts",
37
38
  "predev": "bun run build",