bkper 4.24.2 → 4.24.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.
Files changed (82) hide show
  1. package/lib/agent/extensions/builtins.d.ts.map +1 -1
  2. package/lib/agent/extensions/builtins.js +2 -2
  3. package/lib/agent/extensions/builtins.js.map +1 -1
  4. package/lib/agent/extensions/handoff.d.ts +2 -13
  5. package/lib/agent/extensions/handoff.d.ts.map +1 -1
  6. package/lib/agent/extensions/handoff.js +37 -17
  7. package/lib/agent/extensions/handoff.js.map +1 -1
  8. package/lib/agent/interactive/interactive-mode.d.ts.map +1 -1
  9. package/lib/agent/interactive/interactive-mode.js +1 -10
  10. package/lib/agent/interactive/interactive-mode.js.map +1 -1
  11. package/lib/commands/apps/deploy.d.ts +3 -1
  12. package/lib/commands/apps/deploy.d.ts.map +1 -1
  13. package/lib/commands/apps/deploy.js +29 -4
  14. package/lib/commands/apps/deploy.js.map +1 -1
  15. package/lib/commands/apps/git/clone.d.ts +23 -0
  16. package/lib/commands/apps/git/clone.d.ts.map +1 -0
  17. package/lib/commands/apps/git/clone.js +161 -0
  18. package/lib/commands/apps/git/clone.js.map +1 -0
  19. package/lib/commands/apps/git/credentials.d.ts +35 -0
  20. package/lib/commands/apps/git/credentials.d.ts.map +1 -0
  21. package/lib/commands/apps/git/credentials.js +196 -0
  22. package/lib/commands/apps/git/credentials.js.map +1 -0
  23. package/lib/commands/apps/git/index.d.ts +12 -0
  24. package/lib/commands/apps/git/index.d.ts.map +1 -0
  25. package/lib/commands/apps/git/index.js +12 -0
  26. package/lib/commands/apps/git/index.js.map +1 -0
  27. package/lib/commands/apps/git/inspect.d.ts +26 -0
  28. package/lib/commands/apps/git/inspect.d.ts.map +1 -0
  29. package/lib/commands/apps/git/inspect.js +207 -0
  30. package/lib/commands/apps/git/inspect.js.map +1 -0
  31. package/lib/commands/apps/git/markers.d.ts +16 -0
  32. package/lib/commands/apps/git/markers.d.ts.map +1 -0
  33. package/lib/commands/apps/git/markers.js +125 -0
  34. package/lib/commands/apps/git/markers.js.map +1 -0
  35. package/lib/commands/apps/git/mode.d.ts +25 -0
  36. package/lib/commands/apps/git/mode.d.ts.map +1 -0
  37. package/lib/commands/apps/git/mode.js +106 -0
  38. package/lib/commands/apps/git/mode.js.map +1 -0
  39. package/lib/commands/apps/git/platform-source.d.ts +18 -0
  40. package/lib/commands/apps/git/platform-source.d.ts.map +1 -0
  41. package/lib/commands/apps/git/platform-source.js +151 -0
  42. package/lib/commands/apps/git/platform-source.js.map +1 -0
  43. package/lib/commands/apps/git/preflight.d.ts +21 -0
  44. package/lib/commands/apps/git/preflight.d.ts.map +1 -0
  45. package/lib/commands/apps/git/preflight.js +130 -0
  46. package/lib/commands/apps/git/preflight.js.map +1 -0
  47. package/lib/commands/apps/git/push.d.ts +22 -0
  48. package/lib/commands/apps/git/push.d.ts.map +1 -0
  49. package/lib/commands/apps/git/push.js +107 -0
  50. package/lib/commands/apps/git/push.js.map +1 -0
  51. package/lib/commands/apps/git/remote.d.ts +7 -0
  52. package/lib/commands/apps/git/remote.d.ts.map +1 -0
  53. package/lib/commands/apps/git/remote.js +48 -0
  54. package/lib/commands/apps/git/remote.js.map +1 -0
  55. package/lib/commands/apps/git/run-git.d.ts +17 -0
  56. package/lib/commands/apps/git/run-git.d.ts.map +1 -0
  57. package/lib/commands/apps/git/run-git.js +61 -0
  58. package/lib/commands/apps/git/run-git.js.map +1 -0
  59. package/lib/commands/apps/git/types.d.ts +95 -0
  60. package/lib/commands/apps/git/types.d.ts.map +1 -0
  61. package/lib/commands/apps/git/types.js +17 -0
  62. package/lib/commands/apps/git/types.js.map +1 -0
  63. package/lib/commands/apps/index.d.ts +2 -0
  64. package/lib/commands/apps/index.d.ts.map +1 -1
  65. package/lib/commands/apps/index.js +3 -0
  66. package/lib/commands/apps/index.js.map +1 -1
  67. package/lib/commands/apps/init.d.ts.map +1 -1
  68. package/lib/commands/apps/init.js +19 -3
  69. package/lib/commands/apps/init.js.map +1 -1
  70. package/lib/commands/apps/register.d.ts.map +1 -1
  71. package/lib/commands/apps/register.js +23 -4
  72. package/lib/commands/apps/register.js.map +1 -1
  73. package/lib/commands/apps/source-workflow.d.ts +32 -0
  74. package/lib/commands/apps/source-workflow.d.ts.map +1 -0
  75. package/lib/commands/apps/source-workflow.js +170 -0
  76. package/lib/commands/apps/source-workflow.js.map +1 -0
  77. package/lib/commands/apps/sync.d.ts.map +1 -1
  78. package/lib/commands/apps/sync.js +13 -8
  79. package/lib/commands/apps/sync.js.map +1 -1
  80. package/lib/docs/cli/app-management.md +94 -6
  81. package/lib/docs/index.md +1 -1
  82. package/package.json +1 -1
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { BkperError } from 'bkper-js';
11
11
  import { getBkperInstance } from '../../bkper-factory.js';
12
12
  import { createConfiguredApp } from './config.js';
13
+ import { syncManagedAppSource } from './source-workflow.js';
13
14
  /**
14
15
  * Creates a new app from the configuration in the current directory.
15
16
  *
@@ -63,14 +64,18 @@ export function syncApp() {
63
64
  throw err;
64
65
  }
65
66
  }
66
- if (exists) {
67
- yield app.update();
68
- return { id: appId, action: 'updated' };
69
- }
70
- else {
71
- yield app.create();
72
- return { id: appId, action: 'created' };
73
- }
67
+ return syncManagedAppSource({
68
+ appId,
69
+ coreAppExists: exists,
70
+ syncCore: (action) => __awaiter(this, void 0, void 0, function* () {
71
+ if (action === 'updated') {
72
+ yield app.update();
73
+ }
74
+ else {
75
+ yield app.create();
76
+ }
77
+ }),
78
+ });
74
79
  });
75
80
  }
76
81
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/apps/sync.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAO,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD;;;;GAIG;AACH,MAAM,UAAgB,SAAS;;QAC3B,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,UAAgB,SAAS;;QAC3B,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,UAAgB,OAAO;;QACzB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAChD,iCAAiC;gBACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,MAAM,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;CAAA"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/apps/sync.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAO,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAgB,SAAS;;QAC3B,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,UAAgB,SAAS;;QAC3B,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACtB,CAAC;CAAA;AAED;;;;GAIG;AACH,MAAM,UAAgB,OAAO;;QACzB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAChD,iCAAiC;gBACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,MAAM,GAAG,KAAK,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC;QAED,OAAO,oBAAoB,CAAC;YACxB,KAAK;YACL,aAAa,EAAE,MAAM;YACrB,QAAQ,EAAE,CAAM,MAAM,EAAC,EAAE;gBACrB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACvB,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvB,CAAC;YACL,CAAC,CAAA;SACJ,CAAC,CAAC;IACP,CAAC;CAAA"}
@@ -7,6 +7,21 @@ Build, deploy, and manage Bkper apps using the `bkper` CLI.
7
7
 
8
8
  ---
9
9
 
10
+ ## Source control modes
11
+
12
+ Bkper selects source mode without changing the local-build deployment model:
13
+
14
+ - **Managed source:** the first `bkper app sync` activates private Bkper-managed Git only when that same sync creates the Core App, `bkper.yaml` is at the root of a standalone Git repository, the current clean committed branch is `main`, and no Git remote exists. Bkper configures the managed repository as `origin` and pushes the committed source.
15
+ - **External source:** an App keeps direct sync/deploy behavior when it has an external Git remote, is nested in a monorepo, is not rooted at `bkper.yaml`, or already existed in Core without a pending activation marker. Existing no-remote Apps are not migrated automatically. The CLI never changes an existing external remote.
16
+
17
+ To opt out for a new standalone App, add a GitHub, GitLab, or other provider remote before its first sync. Managed mode is sticky after activation; adding another remote later does not change it, and Artifacts remains `origin`.
18
+
19
+ Source and deployment remain separate. `git push` stores source only and **never deploys**. `bkper app sync` pushes managed source before syncing local metadata. `bkper app deploy` pushes managed source, verifies that the exact commit exists in the linked repository, and then uploads the existing local `dist/server` and optional `dist/client` output. Builds remain local and explicit; Bkper does not claim reproducible remote CI or prove that the local bundle was built from the declared commit. Source linkage is best-effort provenance for already-authorized developers.
20
+
21
+ CLI-managed pushes are clean-tree and fast-forward-only. The CLI never commits, merges, rebases, force-pushes, resets, or discards files. Authorized developers may use ordinary Git commands, including an intentional force-push, but a push still never deploys.
22
+
23
+ Configured App developers, including matches such as `*@example.com`, can read and modify private managed source under the existing owner/developer policy. App users and Book collaborators do not receive source access unless they also satisfy that developer policy. Repository credentials are exact URL/path-scoped, noninteractive, and valid for five minutes; they are never persisted by Bkper.
24
+
10
25
  ## Verification Workflow
11
26
 
12
27
  When scaffolding, developing, or deploying an app, verify each step before proceeding. This prevents broken deployments and silent failures.
@@ -18,13 +33,14 @@ bkper app init my-app
18
33
  cd my-app
19
34
  ```
20
35
 
21
- `bkper app init <name>` creates and scaffolds `./<name>` using the same value as the app id. Run `bkper app init` with no name inside an existing empty or VCS-only directory to use the current folder name as the app id.
36
+ `bkper app init <name>` creates and scaffolds `./<name>` using the same value as the app id. Run `bkper app init` with no name inside an existing empty or VCS-only directory to use the current folder name as the app id. Init initializes Git on `main` when needed, but does not create commits.
22
37
 
23
38
  Verify:
24
39
 
25
40
  - `client/` and `server/` exist
26
41
  - `bkper.yaml` has `id`, `name`, `description`, and `developers`
27
42
  - `package.json` scripts include `dev` and `build`
43
+ - `.git` exists on branch `main` with no automatic commit
28
44
 
29
45
  ### 2. Develop
30
46
 
@@ -53,14 +69,24 @@ Verify:
53
69
 
54
70
  ### 4. Sync & Deploy
55
71
 
72
+ Commit source before the first eligible managed sync:
73
+
56
74
  ```bash
57
- bkper app sync && bkper app deploy
75
+ git add .
76
+ git commit -m "Initial app"
77
+ bkper app sync
78
+ npm run build
79
+ bkper app deploy
58
80
  ```
59
81
 
82
+ For a managed App, sync and deploy safely push the current committed branch. For an external App, both commands preserve direct local metadata and bundle upload behavior without changing remotes.
83
+
60
84
  Verify:
61
85
 
62
86
  - `bkper app status` shows the deployed version
87
+ - managed status shows the declared branch and exact verified SHA
63
88
  - URLs in `bkper.yaml` match the deployed domain (`https://{appId}.bkper.app`)
89
+ - an ordinary `git push` did not deploy anything
64
90
 
65
91
  #### Preview testing with menu and events
66
92
 
@@ -139,6 +165,66 @@ bkper app status
139
165
 
140
166
  ---
141
167
 
168
+ ## Clone managed source
169
+
170
+ Clone an existing managed App explicitly:
171
+
172
+ ```bash
173
+ bkper app clone <appId> [path]
174
+ cd <path-or-appId>
175
+ bun install
176
+ ```
177
+
178
+ Clone authenticates with Bkper, uses a temporary sibling directory, validates the cloned App ID, and atomically installs the destination. It never installs dependencies or executes repository lifecycle scripts. External-source Apps must be cloned from their configured provider instead.
179
+
180
+ If Git authentication fails:
181
+
182
+ 1. Run `bkper auth login` when the Bkper session is missing or expired.
183
+ 2. Retry the Git operation; a five-minute repository credential is minted automatically.
184
+ 3. If the managed `origin` is missing or incorrect, inspect `git remote -v` and use a fresh `bkper app clone <appId>` as the safe reference. Never replace an unrelated external remote automatically.
185
+ 4. Request App owner/developer access when Platform denies source access. Domain-pattern developers have the same private source read/write capability.
186
+
187
+ The helper command is intentionally `bkper app git-credential <appId> [operation]`. It is internal Git plumbing, not a root `git` command or an `app git` group.
188
+
189
+ ## Managed Git preflight recovery
190
+
191
+ Managed sync and deploy require `bkper.yaml` at the Git root, an attached branch, committed `HEAD`, and a clean tree. Ignored build output such as `dist/` is allowed.
192
+
193
+ | Failure | Safe recovery |
194
+ | --- | --- |
195
+ | No Git repository | For a new standalone App, run `git init -b main`, review files, commit, and retry. Existing Apps are not migrated merely because they lack a remote. |
196
+ | `bkper.yaml` below Git root | Keep the monorepo/external workflow; managed monorepos are not supported. |
197
+ | No commits | Review, then run `git add .` and `git commit -m "Initial app"`. |
198
+ | Detached `HEAD` | Attach a branch with `git switch -c <branch>`; use `main` for first activation. |
199
+ | First activation is not on `main` | Switch to the existing `main` branch. The CLI does not rename or rewrite branches. |
200
+ | Staged changes | Inspect `git diff --cached`; commit them or intentionally unstage them before retrying. |
201
+ | Modified tracked files | Inspect `git diff`; commit or intentionally restore them before retrying. |
202
+ | Non-ignored untracked files | Inspect `git status`; commit, ignore, or intentionally remove them before retrying. |
203
+ | Missing or incorrect managed `origin` | Inspect `git remote -v`; compare with a fresh managed clone. Do not overwrite an external remote. |
204
+ | Authentication or expired credential | Run `bkper auth login` if needed, then retry the Git operation for a new five-minute token. |
205
+ | Remote branch ahead or divergent | Run `git fetch origin <branch>` and inspect `git log --oneline --left-right HEAD...origin/<branch>`; merge or rebase by your own choice, then push and retry. The CLI never force-resolves divergence. |
206
+ | App ID or repository mismatch | Stop and use the clone/config belonging to the requested App; do not rewrite repository identity. |
207
+ | Managed record temporarily missing | Retry sync/deploy. A managed marker never silently downgrades to external mode after a transient KV miss. |
208
+ | Exact commit missing | Ensure the current clean commit was pushed to the registered managed `origin`, then retry. |
209
+
210
+ ## Roll back a managed deployment
211
+
212
+ There is no hidden rollback ref, retained build archive, or automatic rollback API. Create an ordinary attached rollback branch at the selected committed source, build locally, and deploy explicitly:
213
+
214
+ ```bash
215
+ git switch -c rollback/<name> <older-commit>
216
+ bun run build
217
+ bkper app deploy --preview
218
+ # verify, then optionally deploy production
219
+ bkper app deploy
220
+ ```
221
+
222
+ The rollback branch is pushed normally. Preview remains optional; production does not require promotion from preview.
223
+
224
+ `bkper app undeploy` removes only the selected runtime and optional runtime data. It never deletes managed source.
225
+
226
+ ---
227
+
142
228
  ## Install Apps on Books
143
229
 
144
230
  ```bash
@@ -425,11 +511,13 @@ Inside the interactive agent:
425
511
 
426
512
  ### App Lifecycle
427
513
 
428
- - `app init [name]` - Scaffold a new app from the template. With `name`, creates `./<name>` and uses it as the app id. Without `name`, initializes the current directory and derives the app id from the folder name.
514
+ - `app init [name]` - Scaffold a new app from the template. With `name`, creates `./<name>` and uses it as the app id. Without `name`, initializes the current directory and derives the app id from the folder name. Initializes Git on `main` when the target is not already a repository, without staging or committing files.
515
+ - `app clone <appId> [path]` - Clone a Bkper-managed App source repository. Does not install dependencies; run `bun install` explicitly afterward. External-source Apps must be cloned from their provider instead.
516
+ - `app git-credential <appId> [operation]` - Internal noninteractive Git credential helper for managed Artifacts source. Generated repository config pins the App ID and exact remote URL/path; Git appends `get`, `store`, or `erase`. Never persists tokens.
429
517
  - `app list` - List all apps you have access to
430
- - `app sync` - Sync [bkper.yaml][bkper.yaml reference] configuration (URLs, description) to Bkper API
518
+ - `app sync` - Sync [bkper.yaml][bkper.yaml reference] configuration. If this sync creates an eligible new standalone App, activate managed source; if already managed, cleanly fast-forward-push the current committed branch first.
431
519
  - `app build` - Build the server Worker bundle for deployment
432
- - `app deploy` - Deploy built artifacts to Cloudflare Workers for Platforms
520
+ - `app deploy` - For managed Apps, cleanly fast-forward-push and verify the current commit, then explicitly deploy the existing local build. External Apps keep direct upload behavior.
433
521
  - `-p, --preview` - Deploy to preview environment
434
522
  - `app status` - Show deployment status
435
523
  - `app logs [appId]` - View recent app logs. When `appId` is omitted, the app id is read from local app config.
@@ -449,7 +537,7 @@ Inside the interactive agent:
449
537
  - `--sp, --server-port <port>` - Server simulation port (default: `8787`)
450
538
  - `--cp, --client-port <port>` - Client dev server port for local static assets (default: `5173`)
451
539
 
452
- > **Note:** `sync` and `deploy` are independent operations. Use `sync` to update your app's URLs in Bkper (required for webhooks and menu integration). Use `deploy` to push code to Cloudflare. For a typical deployment workflow, run both: `bkper app sync && bkper app deploy`
540
+ > **Note:** `sync` and `deploy` are independent explicit operations. `sync` updates App metadata and, for managed Apps, safely pushes committed source. `deploy` uploads an existing local build and never runs a build command. An ordinary Git push never deploys.
453
541
 
454
542
  ### App Installation
455
543
 
package/lib/docs/index.md CHANGED
@@ -6,7 +6,7 @@ For Bkper data, accounting, reporting, tax, or financial-flow tasks, read `core/
6
6
 
7
7
  - `core/core-concepts.md` — canonical Bkper data model: resources, movements, balances, accounts, groups, books, transactions, properties, and the zero-sum invariant.
8
8
  - `cli/data-management.md` — CLI reference for managing financial data and files: books, accounts, groups, files, transactions, per-account balance queries, query operators (on:, after:, before:, account:, group:), output formats (table/json/csv), human-review Bkper UI links, batch operations via stdin/piping, collections.
9
- - `cli/app-management.md` — CLI reference for building and deploying Bkper apps: dev/build/deploy workflow, app install/uninstall, secrets management, app logs, bkper.yaml configuration reference (identity, branding, events, menu integration, deployment).
9
+ - `cli/app-management.md` — CLI reference for building and deploying Bkper apps: init/git clone/credential helpers, dev/build/deploy workflow, app install/uninstall, secrets management, app logs, bkper.yaml configuration reference (identity, branding, events, menu integration, deployment).
10
10
  - `apps/app-building.md` — Full app-building reference: single Worker app architecture (`client/` + `server/`), development loop, `/api/*` routes, `/events` handlers, deployment patterns, the Bkper Platform, and self-hosted alternatives. Includes authentication patterns for web clients (`@bkper/web-auth`), server API routes (`Authorization: Bearer` on `/api/*` with outbound auth injection), platform event handlers (`new Bkper()` with outbound auth injection), and local development.
11
11
  - `reporting/financial-statements.md` — Deterministic reporting principles and Bkper query semantics for balance sheet and P&L: trusted routes, root reporting groups, permanent vs period date rules, and provisional query patterns.
12
12
  - `reporting/taxes.md` — Deterministic tax reporting principles: trusted routes, external tax-rule loading/discovery, user-approved tax-relevant groups/accounts, period activity queries, explicit jurisdiction assumptions, and provisional query patterns.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkper",
3
- "version": "4.24.2",
3
+ "version": "4.24.3",
4
4
  "description": "Command line client for Bkper",
5
5
  "bin": {
6
6
  "bkper": "./lib/cli.js"