bkper 4.24.3 → 4.26.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 +1 -1
- package/lib/agent/extensions/handoff.d.ts.map +1 -1
- package/lib/agent/extensions/handoff.js +2 -0
- package/lib/agent/extensions/handoff.js.map +1 -1
- package/lib/agent/startup-maintenance.d.ts +1 -0
- package/lib/agent/startup-maintenance.d.ts.map +1 -1
- package/lib/agent/startup-maintenance.js +7 -1
- package/lib/agent/startup-maintenance.js.map +1 -1
- package/lib/agent/system-prompt.js +1 -1
- package/lib/commands/apps/git/clone.js +1 -1
- package/lib/commands/apps/git/clone.js.map +1 -1
- package/lib/commands/apps/git/index.d.ts +2 -2
- package/lib/commands/apps/git/index.d.ts.map +1 -1
- package/lib/commands/apps/git/index.js +1 -1
- package/lib/commands/apps/git/index.js.map +1 -1
- package/lib/commands/apps/git/markers.d.ts +2 -2
- package/lib/commands/apps/git/markers.d.ts.map +1 -1
- package/lib/commands/apps/git/markers.js +10 -2
- package/lib/commands/apps/git/markers.js.map +1 -1
- package/lib/commands/apps/git/mode.d.ts +3 -4
- package/lib/commands/apps/git/mode.d.ts.map +1 -1
- package/lib/commands/apps/git/mode.js +24 -28
- package/lib/commands/apps/git/mode.js.map +1 -1
- package/lib/commands/apps/git/push.d.ts +7 -0
- package/lib/commands/apps/git/push.d.ts.map +1 -1
- package/lib/commands/apps/git/push.js +31 -0
- package/lib/commands/apps/git/push.js.map +1 -1
- package/lib/commands/apps/git/types.d.ts +6 -2
- package/lib/commands/apps/git/types.d.ts.map +1 -1
- package/lib/commands/apps/git/types.js.map +1 -1
- package/lib/commands/apps/init.d.ts +3 -1
- package/lib/commands/apps/init.d.ts.map +1 -1
- package/lib/commands/apps/init.js +105 -58
- package/lib/commands/apps/init.js.map +1 -1
- package/lib/commands/apps/register.js +2 -2
- package/lib/commands/apps/register.js.map +1 -1
- package/lib/commands/apps/source-workflow.d.ts.map +1 -1
- package/lib/commands/apps/source-workflow.js +19 -9
- package/lib/commands/apps/source-workflow.js.map +1 -1
- package/lib/dev/miniflare.js +1 -1
- package/lib/dev/miniflare.js.map +1 -1
- package/lib/dev/preflight.js +1 -1
- package/lib/dev/preflight.js.map +1 -1
- package/lib/dev/shared.js +1 -1
- package/lib/dev/shared.js.map +1 -1
- package/lib/docs/apps/app-listing.md +86 -0
- package/lib/docs/apps/architecture.md +188 -0
- package/lib/docs/apps/configuration.md +171 -0
- package/lib/docs/apps/context-menu.md +69 -0
- package/lib/docs/apps/deploying.md +181 -0
- package/lib/docs/apps/development.md +122 -0
- package/lib/docs/apps/event-handlers.md +248 -0
- package/lib/docs/apps/first-app.md +76 -0
- package/lib/docs/apps/overview.md +100 -0
- package/lib/docs/apps/self-hosted.md +63 -0
- package/lib/docs/apps/shared-app-source.md +85 -0
- package/lib/docs/cli/app-management.md +41 -9
- package/lib/docs/index.md +11 -1
- package/lib/docs/sdk/bkper-js.md +5 -0
- package/lib/upgrade/index.d.ts +1 -1
- package/lib/upgrade/index.d.ts.map +1 -1
- package/lib/upgrade/index.js +1 -1
- package/lib/upgrade/index.js.map +1 -1
- package/lib/upgrade/installation.d.ts +4 -0
- package/lib/upgrade/installation.d.ts.map +1 -1
- package/lib/upgrade/installation.js +23 -0
- package/lib/upgrade/installation.js.map +1 -1
- package/package.json +3 -3
- package/lib/docs/apps/app-building.md +0 -1429
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# The Bkper Platform
|
|
2
|
+
|
|
3
|
+
The Bkper Platform is a complete managed environment for building, deploying, and hosting apps on Bkper. It removes infrastructure complexity so you can focus on business logic.
|
|
4
|
+
|
|
5
|
+
### Hosting
|
|
6
|
+
|
|
7
|
+
Apps are deployed to `{appId}.bkper.app` on a global edge network powered by [Cloudflare Workers for Platforms](https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/). Your app runs close to your users, with zero infrastructure to manage.
|
|
8
|
+
|
|
9
|
+
Preview environments are built in — deploy to a preview URL to test before going to production.
|
|
10
|
+
|
|
11
|
+
### App APIs
|
|
12
|
+
|
|
13
|
+
The same Worker can expose app-defined `/api/*` routes. Treat those routes as the reusable contract for your app behavior:
|
|
14
|
+
|
|
15
|
+
- The bundled web client can call them.
|
|
16
|
+
- Scripts, external clients, and agents can call them too.
|
|
17
|
+
- The default template documents them with an app OpenAPI spec at `/openapi.json`.
|
|
18
|
+
|
|
19
|
+
### Authentication
|
|
20
|
+
|
|
21
|
+
OAuth is pre-configured. No client IDs, no redirect URIs, no consent screens to build.
|
|
22
|
+
|
|
23
|
+
- **Web client** — Use `@bkper/web-auth`: `auth.getAccessToken()`. See [App Architecture → Client authentication](https://bkper.com/docs/build/apps/architecture.md#client-authentication).
|
|
24
|
+
- **Server API routes** — Send `Authorization: Bearer <token>` to `/api/*`; dispatch validates it and platform outbound injects auth for server-side Bkper API calls. See [App Architecture → Server API authentication](https://bkper.com/docs/build/apps/architecture.md#server-api-authentication).
|
|
25
|
+
- **Event handlers** — Handle `/events` in the same Worker and call Bkper with server-side `new Bkper()`; dispatch/outbound handle auth and agent identity. See [Event Handlers → Authentication](https://bkper.com/docs/build/apps/event-handlers.md#authentication).
|
|
26
|
+
- **Local development** — The Vite auth middleware uses your CLI credentials. See [Development Experience → Local development authentication](https://bkper.com/docs/build/apps/development.md#local-development-authentication).
|
|
27
|
+
|
|
28
|
+
### Services
|
|
29
|
+
|
|
30
|
+
Declare the services you need in [`bkper.yaml`](https://bkper.com/docs/build/apps/configuration.md) and the platform provisions them:
|
|
31
|
+
|
|
32
|
+
- **KV storage** — Key-value storage for caching and state. Access via `c.env.KV` in your handlers.
|
|
33
|
+
- **Secrets** — Securely stored environment variables. Set via `bkper app secrets put`, access via `c.env.SECRET_NAME`.
|
|
34
|
+
|
|
35
|
+
### Developer experience
|
|
36
|
+
|
|
37
|
+
The project template composes the full development environment:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm run dev
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This runs two processes concurrently: `vite dev` for the client UI (HMR), and `bkper app dev` for the Worker runtime (Miniflare for `/api/*` and `/events`, plus a Cloudflare tunnel so Bkper can route webhook events to your laptop). Your entire development environment, running locally.
|
|
44
|
+
|
|
45
|
+
### Shared app source
|
|
46
|
+
|
|
47
|
+
Bkper can host one private codebase for your app. Authorized teammates and coding agents can clone it, improve it locally, and continue building from the same shared history.
|
|
48
|
+
|
|
49
|
+
Source synchronization remains separate from deployment. A Git push stores source but never builds or deploys the app.
|
|
50
|
+
|
|
51
|
+
See [Shared App Source](https://bkper.com/docs/build/apps/shared-app-source.md) for the collaboration workflow, access rules, and external Git options.
|
|
52
|
+
|
|
53
|
+
### Deployment
|
|
54
|
+
|
|
55
|
+
Check and deploy the app template:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run check
|
|
59
|
+
npm run deploy
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Your app is live at `{appId}.bkper.app`. The platform handles routing, SSL, and edge distribution.
|
|
63
|
+
|
|
64
|
+
## What you'd build yourself without it
|
|
65
|
+
|
|
66
|
+
Without the platform, creating a Bkper app with a UI, event handling, and authentication requires:
|
|
67
|
+
|
|
68
|
+
| Concern | Without the platform | With the platform |
|
|
69
|
+
| ------------------------ | --------------------------------------------------------------------------------------- | ----------------------------------------------- |
|
|
70
|
+
| **Hosting** | Provision servers, configure domains, SSL, CDN | `bkper app deploy` |
|
|
71
|
+
| **Authentication** | Register OAuth client, build consent screen, handle token refresh, manage redirect URIs | `auth.getAccessToken()` |
|
|
72
|
+
| **Event webhooks** | Set up a public endpoint, configure DNS, handle JWT verification | Declare in `bkper.yaml`, platform routes events |
|
|
73
|
+
| **Local dev webhooks** | Install ngrok or similar, manually configure tunnel URL | `bkper app dev` starts tunnel automatically |
|
|
74
|
+
| **Secrets** | Set up a secrets manager, configure access | `bkper app secrets put` |
|
|
75
|
+
| **KV storage** | Deploy Redis/Memcached, manage connections | Declare `KV` in `bkper.yaml` |
|
|
76
|
+
| **Preview environments** | Build a staging pipeline | `bkper app deploy --preview` |
|
|
77
|
+
| **Shared app source** | Operate a separate private Git host | Managed source for app developers and agents |
|
|
78
|
+
| **Type safety** | Manually create type definitions | `env.d.ts` auto-generated |
|
|
79
|
+
|
|
80
|
+
The platform eliminates all of this. You write business logic, the platform handles infrastructure.
|
|
81
|
+
|
|
82
|
+
## Getting started
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Create a new app from the template
|
|
86
|
+
bkper app init my-app
|
|
87
|
+
cd my-app
|
|
88
|
+
|
|
89
|
+
# Install dependencies and start developing
|
|
90
|
+
npm install
|
|
91
|
+
npm run dev
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This gives you a working app with a client UI, server API routes, and `/events` handling in one Worker — all running locally with full HMR and webhook tunneling.
|
|
95
|
+
|
|
96
|
+
## Next steps
|
|
97
|
+
|
|
98
|
+
- [Your First App](https://bkper.com/docs/build/apps/first-app.md) — Build and deploy a complete platform app
|
|
99
|
+
- [Shared App Source](https://bkper.com/docs/build/apps/shared-app-source.md) — Collaborate from one private codebase
|
|
100
|
+
- [App Architecture](https://bkper.com/docs/build/apps/architecture.md) — Understand how platform apps are structured
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Self-Hosted Alternative
|
|
2
|
+
|
|
3
|
+
The [Bkper Platform](https://bkper.com/docs/build/apps/overview.md) handles hosting, authentication, and deployment for you. However, you can host event handlers on your own infrastructure if you have specific requirements — existing cloud setup, compliance constraints, or legacy apps.
|
|
4
|
+
|
|
5
|
+
> **Tip**
|
|
6
|
+
> Use the Bkper Platform unless you have a specific reason to self-host. It eliminates the need to manage authentication, secrets, hosting, and deployment yourself.
|
|
7
|
+
## Cloud Functions
|
|
8
|
+
|
|
9
|
+
A Bkper event handler running on [Google Cloud Functions](https://cloud.google.com/functions/) receives authenticated calls from the `bkper-hrd@appspot.gserviceaccount.com` service account. You need to grant this service account the [Cloud Functions Invoker IAM role](https://cloud.google.com/functions/docs/securing/managing-access-iam) (`roles/cloudfunctions.invoker`).
|
|
10
|
+
|
|
11
|
+
Set the production endpoint in [`bkper.yaml`](https://bkper.com/docs/build/apps/configuration.md):
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
webhookUrl: https://us-central1-my-project.cloudfunctions.net/events
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Authentication
|
|
18
|
+
|
|
19
|
+
An OAuth Access Token **of the user who installed the app** is sent to the production `webhookUrl` endpoint in the `bkper-oauth-token` HTTP header, along with the agent identifier in `bkper-agent-id`, on each event. Your handler uses this token to call the API back on behalf of the user.
|
|
20
|
+
|
|
21
|
+
Both production (`webhookUrl`) and development (`webhookUrlDev`) endpoints receive OAuth tokens in the `bkper-oauth-token` header.
|
|
22
|
+
|
|
23
|
+
### Throughput and scaling
|
|
24
|
+
|
|
25
|
+
Event throughput can be high, especially when processing large batches. Set the [max instance limit](https://cloud.google.com/functions/docs/max-instances#setting_max_instances_limits) — usually **1-2 is enough**. When the function returns `429 Too Many Requests`, the event is automatically retried with incremental backoff until it receives an HTTP `200`.
|
|
26
|
+
|
|
27
|
+
### Response format
|
|
28
|
+
|
|
29
|
+
The function response must follow the standard format:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
{ result?: any, error?: any }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
See [Event Handlers](https://bkper.com/docs/build/apps/event-handlers.md#response-format) for details on response handling.
|
|
36
|
+
|
|
37
|
+
### Considerations
|
|
38
|
+
|
|
39
|
+
- Execution environment is subject to [Cloud Function Quotas](https://cloud.google.com/functions/quotas) — quota counts against the developer account, not the end user
|
|
40
|
+
- Recommended for scenarios where event throughput exceeds **1 event/second/user** and processing can be handled asynchronously
|
|
41
|
+
- Can be combined with context menus built with [Apps Script HTML Service](https://developers.google.com/apps-script/guides/html) or any other UI infrastructure
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Generic Webhooks
|
|
46
|
+
|
|
47
|
+
You can host event handlers on any infrastructure — other cloud providers, containers, on-premise servers.
|
|
48
|
+
|
|
49
|
+
Configure the same `webhookUrl` property in [`bkper.yaml`](https://bkper.com/docs/build/apps/configuration.md):
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
webhookUrl: https://my-server.example.com/bkper/events
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Authentication
|
|
56
|
+
|
|
57
|
+
Calls to the production webhook URL are signed with a JWT token using the [Service to Function](https://cloud.google.com/functions/docs/securing/authenticating#service-to-function) method. You can verify this token to assert the identity of the Bkper service.
|
|
58
|
+
|
|
59
|
+
> **Note**
|
|
60
|
+
> Cloud Functions handles JWT verification automatically. For other infrastructure, you need to implement verification yourself. We strongly recommend Cloud Functions for this reason.
|
|
61
|
+
### Retry behavior
|
|
62
|
+
|
|
63
|
+
If your infrastructure returns an HTTP `429` status, the event is automatically retried with incremental backoff until it receives an HTTP `200`. Use this to handle temporary overload gracefully.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Shared App Source
|
|
2
|
+
|
|
3
|
+
Bkper-managed app source gives your team and coding agents one shared private codebase for a Bkper app. Authorized app developers can clone the same repository, improve it locally, and continue from one shared history without setting up a separate Git host.
|
|
4
|
+
|
|
5
|
+
Shared app source supports development collaboration. It does not automatically build or deploy your app.
|
|
6
|
+
|
|
7
|
+
## Who can access the source
|
|
8
|
+
|
|
9
|
+
The app owner and users matched by the `developers` field in `bkper.yaml` can read and update managed source. This includes configured domain patterns such as `*@example.com`.
|
|
10
|
+
|
|
11
|
+
App users and Book collaborators do not receive source access unless they also match the app's developer policy.
|
|
12
|
+
|
|
13
|
+
## Start a shared codebase
|
|
14
|
+
|
|
15
|
+
A standalone app becomes eligible for Bkper-managed source when:
|
|
16
|
+
|
|
17
|
+
- `bkper.yaml` is at the root of its Git repository.
|
|
18
|
+
- The current branch is `main` for the first managed sync.
|
|
19
|
+
- The working tree is clean and has at least one commit.
|
|
20
|
+
- No Git remote is configured.
|
|
21
|
+
|
|
22
|
+
`bkper app init` initializes Git on `main`, but it does not create the first commit. Review and commit the app before its first sync:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
bkper app init my-app
|
|
26
|
+
cd my-app
|
|
27
|
+
|
|
28
|
+
# Review the generated app, then commit it
|
|
29
|
+
git add .
|
|
30
|
+
git commit -m "Initial app"
|
|
31
|
+
|
|
32
|
+
bkper app sync
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
For an eligible app, `bkper app sync` creates its private Bkper-managed source and configures it as `origin`. The same command also syncs app metadata from `bkper.yaml`.
|
|
36
|
+
|
|
37
|
+
## Clone and continue together
|
|
38
|
+
|
|
39
|
+
Any authorized app developer can start from the shared codebase:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
bkper app clone <appId>
|
|
43
|
+
cd <appId>
|
|
44
|
+
npm install
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`bkper app clone` copies the repository but does not install dependencies or run repository scripts. A teammate or coding agent can then work in the local clone, run the project's checks, commit changes, and push them back to the shared repository. Another authorized developer can pull or clone that history and continue the work.
|
|
48
|
+
|
|
49
|
+
Keep agent instructions such as `AGENTS.md` in the repository so every teammate and coding agent starts with the same project context and safety rules.
|
|
50
|
+
|
|
51
|
+
## Source synchronization is not deployment
|
|
52
|
+
|
|
53
|
+
Source storage and app deployment are separate operations:
|
|
54
|
+
|
|
55
|
+
| Action | What it does with source | Does it deploy? |
|
|
56
|
+
| ------------------ | ------------------------------------------------------------------------------ | --------------- |
|
|
57
|
+
| `git push` | Stores committed source in the managed repository. | No |
|
|
58
|
+
| `bkper app sync` | Safely pushes managed source, then syncs app metadata from `bkper.yaml`. | No |
|
|
59
|
+
| `npm run build` | Creates local build output in `dist/`. | No |
|
|
60
|
+
| `bkper app deploy` | Pushes and verifies the managed commit, then uploads the existing local build. | Yes |
|
|
61
|
+
|
|
62
|
+
An ordinary Git push never deploys. `bkper app deploy` also does not run a build, so build locally before deploying the result you intend to release.
|
|
63
|
+
|
|
64
|
+
Managed sync and deploy require a clean, committed working tree and use fast-forward safety checks. The CLI does not automatically commit, merge, rebase, force-push, reset, or discard files.
|
|
65
|
+
|
|
66
|
+
## External Git and monorepos
|
|
67
|
+
|
|
68
|
+
Bkper-managed source is optional. Existing workflows remain external when:
|
|
69
|
+
|
|
70
|
+
- the app already has a GitHub, GitLab, or other provider remote;
|
|
71
|
+
- `bkper.yaml` is inside a monorepo rather than at the repository root; or
|
|
72
|
+
- the app is otherwise not rooted in a standalone Git repository.
|
|
73
|
+
|
|
74
|
+
Clone those apps from their external provider. `bkper app clone` is for Bkper-managed source only.
|
|
75
|
+
|
|
76
|
+
Moving an existing standalone app from an external provider is intentional: the CLI never removes or renames an existing remote. Before changing remotes, make sure every branch and tag you want to preserve is available locally and the current `main` branch is clean and committed. Removing all external remotes and running `bkper app sync` then activates managed source for an eligible app.
|
|
77
|
+
|
|
78
|
+
The `repoUrl` field in `bkper.yaml` is app-listing metadata. It does not select managed or external source mode.
|
|
79
|
+
|
|
80
|
+
## Next steps
|
|
81
|
+
|
|
82
|
+
- [Your First App](https://bkper.com/docs/build/apps/first-app.md) — Scaffold an app and establish its shared source
|
|
83
|
+
- [Building & Deploying](https://bkper.com/docs/build/apps/deploying.md) — Build, sync, preview, and deploy explicitly
|
|
84
|
+
- [CLI](https://bkper.com/docs/build/tools/cli.md) — Install the CLI and review its app-development workflows
|
|
85
|
+
- [Coding Agents](https://bkper.com/docs/ai/coding-agents.md) — Give coding agents the Bkper and project context they need
|
|
@@ -11,10 +11,10 @@ Build, deploy, and manage Bkper apps using the `bkper` CLI.
|
|
|
11
11
|
|
|
12
12
|
Bkper selects source mode without changing the local-build deployment model:
|
|
13
13
|
|
|
14
|
-
- **Managed 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
|
|
14
|
+
- **Managed source:** `bkper app sync` activates private Bkper-managed Git for a new or existing App when `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`. New Apps initially upload `main`; existing Apps atomically upload all local branches and tags.
|
|
15
|
+
- **External source:** an App keeps direct sync/deploy behavior when it has an external Git remote, is nested in a monorepo, or is not rooted at `bkper.yaml`. The CLI never changes an existing external remote.
|
|
16
16
|
|
|
17
|
-
To opt out
|
|
17
|
+
To opt out, keep a GitHub, GitLab, or other provider remote configured. Managed mode is sticky after activation; adding another remote later does not change it, and Artifacts remains `origin`. The App listing `repoUrl` metadata does not select source mode.
|
|
18
18
|
|
|
19
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
20
|
|
|
@@ -22,6 +22,26 @@ CLI-managed pushes are clean-tree and fast-forward-only. The CLI never commits,
|
|
|
22
22
|
|
|
23
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
24
|
|
|
25
|
+
### Migrate from an external Git provider
|
|
26
|
+
|
|
27
|
+
Source changes remain the user or coding agent's responsibility; the CLI never removes or renames provider remotes. Before migration, verify that `main` is clean and committed, the provider has the latest source, and every desired provider-only branch and tag is available locally. A coding agent must show the exact mutating commands and obtain explicit user approval before continuing.
|
|
28
|
+
|
|
29
|
+
Inspect first:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
git status --short --branch
|
|
33
|
+
git remote -v
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
After approval, remove every external remote and sync. For a repository whose only external remote is `origin`:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git remote remove origin
|
|
40
|
+
bkper app sync
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Sync preserves the existing App identity, activates managed source, configures it as `origin`, and atomically uploads all local branches and tags. If that upload fails, the pending marker makes the next `bkper app sync` retry the complete upload. `bkper app deploy` never activates migration.
|
|
44
|
+
|
|
25
45
|
## Verification Workflow
|
|
26
46
|
|
|
27
47
|
When scaffolding, developing, or deploying an app, verify each step before proceeding. This prevents broken deployments and silent failures.
|
|
@@ -33,18 +53,30 @@ bkper app init my-app
|
|
|
33
53
|
cd my-app
|
|
34
54
|
```
|
|
35
55
|
|
|
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
|
|
56
|
+
`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 validates the guidance markers in `AGENTS.md` and blocks scaffolding when they are missing, duplicated, malformed, nested, or out of order. It initializes Git on `main` when needed, but never stages, commits, pushes, syncs, or deploys.
|
|
57
|
+
|
|
58
|
+
Init does not install dependencies or execute package lifecycle scripts. The current template uses Bun; enter the App directory and run `bun install` explicitly when ready.
|
|
59
|
+
|
|
60
|
+
Before specializing the App, the active coding agent must read the newly created `AGENTS.md` at the path printed by init. When its marker pairs are present:
|
|
61
|
+
|
|
62
|
+
- Preserve `<!-- APP_STANDARDS:START -->` / `<!-- APP_STANDARDS:END -->` and `<!-- APP_SPECIFICS:START -->` / `<!-- APP_SPECIFICS:END -->`.
|
|
63
|
+
- Preserve `APP_STANDARDS` by default and change it only when explicitly requested.
|
|
64
|
+
- Maintain `APP_SPECIFICS` with the App's purpose, behavior, domain flows, resources, routes, and implementation decisions.
|
|
65
|
+
- Never replace `AGENTS.md` wholesale merely to specialize the App.
|
|
37
66
|
|
|
38
67
|
Verify:
|
|
39
68
|
|
|
69
|
+
- `AGENTS.md` contains each marker exactly once, with `APP_STANDARDS` before `APP_SPECIFICS`
|
|
40
70
|
- `client/` and `server/` exist
|
|
41
71
|
- `bkper.yaml` has `id`, `name`, `description`, and `developers`
|
|
42
|
-
- `package.json` scripts include `dev` and `
|
|
43
|
-
-
|
|
72
|
+
- `package.json` scripts include `dev`, `build`, and `check:agent-guidance`
|
|
73
|
+
- dependencies are not installed by init
|
|
74
|
+
- `.git` exists on branch `main` with no automatic staging or commit
|
|
44
75
|
|
|
45
76
|
### 2. Develop
|
|
46
77
|
|
|
47
78
|
```bash
|
|
79
|
+
bun install
|
|
48
80
|
npm run dev
|
|
49
81
|
```
|
|
50
82
|
|
|
@@ -192,7 +224,7 @@ Managed sync and deploy require `bkper.yaml` at the Git root, an attached branch
|
|
|
192
224
|
|
|
193
225
|
| Failure | Safe recovery |
|
|
194
226
|
| --- | --- |
|
|
195
|
-
| No Git repository | For a
|
|
227
|
+
| No Git repository | For a standalone App, run `git init -b main`, review files, commit, and retry. An eligible new or existing App activates managed source on sync when no remote exists. |
|
|
196
228
|
| `bkper.yaml` below Git root | Keep the monorepo/external workflow; managed monorepos are not supported. |
|
|
197
229
|
| No commits | Review, then run `git add .` and `git commit -m "Initial app"`. |
|
|
198
230
|
| Detached `HEAD` | Attach a branch with `git switch -c <branch>`; use `main` for first activation. |
|
|
@@ -511,11 +543,11 @@ Inside the interactive agent:
|
|
|
511
543
|
|
|
512
544
|
### App Lifecycle
|
|
513
545
|
|
|
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.
|
|
546
|
+
- `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. Validates the marked `AGENTS.md`, initializes Git on `main` when needed without staging or committing, and does not install dependencies. Read the printed `AGENTS.md` path before specialization and preserve its standards, specifics, and marker pairs.
|
|
515
547
|
- `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
548
|
- `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.
|
|
517
549
|
- `app list` - List all apps you have access to
|
|
518
|
-
- `app sync` - Sync [bkper.yaml][bkper.yaml reference] configuration.
|
|
550
|
+
- `app sync` - Sync [bkper.yaml][bkper.yaml reference] configuration. For an eligible standalone repository with no remote, activate managed source for a new or existing App; existing migrations atomically upload all local branches and tags. If already managed, cleanly fast-forward-push the current committed branch first.
|
|
519
551
|
- `app build` - Build the server Worker bundle for deployment
|
|
520
552
|
- `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.
|
|
521
553
|
- `-p, --preview` - Deploy to preview environment
|
package/lib/docs/index.md
CHANGED
|
@@ -7,7 +7,17 @@ For Bkper data, accounting, reporting, tax, or financial-flow tasks, read `core/
|
|
|
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
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
|
-
- `apps/
|
|
10
|
+
- `apps/overview.md` — Platform evaluation and capability overview: use when comparing managed Bkper hosting with self-managed infrastructure or clarifying platform responsibilities; use the task-specific app references for implementation.
|
|
11
|
+
- `apps/first-app.md` — First-app walkthrough: scaffold, install, run locally, trigger an event, customize the listing, establish shared source, check, and deploy.
|
|
12
|
+
- `apps/architecture.md` — App and template architecture: npm workspace structure, Lit/Vite client, Hono Worker, typed `/api/*` contracts, authentication, `/events`, static assets, and supported app shapes.
|
|
13
|
+
- `apps/configuration.md` — Complete `bkper.yaml` reference: identity, branding, ownership, access, context menus, event subscriptions, property schemas, and single-Worker deployment settings.
|
|
14
|
+
- `apps/development.md` — Local development: Vite and Worker processes, ports, API proxy, local authentication, secrets, KV, generated environment types, development loop, and debugging.
|
|
15
|
+
- `apps/event-handlers.md` — Event handler behavior: `/events` routing, responses, replay, loop prevention, platform and self-hosted authentication, event payloads, and event types.
|
|
16
|
+
- `apps/deploying.md` — Build, sync, and explicit deploy workflow; production and preview environments, secrets, KV, deployment status, and book installation.
|
|
17
|
+
- `apps/shared-app-source.md` — Bkper-managed private Git source: developer access, first sync, clone workflow, source/deployment separation, safety checks, external remotes, and monorepos.
|
|
18
|
+
- `apps/context-menu.md` — Book context-menu integration: production/development URLs, open modes, and dynamic Book, query, Account, and Group expressions.
|
|
19
|
+
- `apps/app-listing.md` — App listing metadata, visibility, publication review, end-user README guidance, and public listing locations.
|
|
20
|
+
- `apps/self-hosted.md` — Self-hosted event-handler alternatives: Cloud Functions, generic webhooks, direct authentication responsibilities, scaling, responses, and retries.
|
|
11
21
|
- `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
22
|
- `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.
|
|
13
23
|
- `advisory/accountant-recommendations.md` — Human accountant / advisor recommendation flow using the OpenAccountants verified network endpoint: jurisdiction resolution, live JSON fetching, no-private-data handoff, profile_url introductions, no-match handling, and tax-review cross-reference.
|
package/lib/docs/sdk/bkper-js.md
CHANGED
|
@@ -630,6 +630,7 @@ It contains all `Accounts` where `Transactions` are recorded/posted;
|
|
|
630
630
|
- `getTotalTransactionsCurrentMonth()` → `number` — Gets the total number of posted transactions on current month.
|
|
631
631
|
- `getTotalTransactionsCurrentYear()` → `number` — Gets the total number of posted transactions on current year.
|
|
632
632
|
- `getTransaction(id: string)` → `Promise<Transaction | undefined>` — Retrieve a transaction by id.
|
|
633
|
+
- `getTransactionsByIds(ids: string[])` → `Promise<Transaction[]>` — Retrieve complete transactions by id.
|
|
633
634
|
- `getVisibility()` / `setVisibility(visibility: Visibility)` → `Visibility` — Gets the visibility of the book.
|
|
634
635
|
- `json()` → `bkper.Book` — Gets an immutable copy of the JSON payload for this resource.
|
|
635
636
|
- `listEvents(options: ListEventsOptions)` → `Promise<EventList>` — Lists events in the Book based on the provided options.
|
|
@@ -731,6 +732,10 @@ const bookWithGroups = await Bkper.getBook(bookId, false, true);
|
|
|
731
732
|
const groups2 = await bookWithGroups.getGroups(); // Already cached
|
|
732
733
|
```
|
|
733
734
|
|
|
735
|
+
**getTransactionsByIds**
|
|
736
|
+
|
|
737
|
+
Requests are sent sequentially in batches of up to 200 IDs.
|
|
738
|
+
|
|
734
739
|
**mergeTransactions**
|
|
735
740
|
|
|
736
741
|
The merged transaction is created synchronously. Cleanup of the two
|
package/lib/upgrade/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { VERSION, detectMethod, detectMethodAsync, fetchLatestVersion, getUpgradeCommand, startDetachedUpgrade, } from './installation.js';
|
|
1
|
+
export { VERSION, detectMethod, detectMethodAsync, fetchLatestVersion, getUpgradeCommand, isVersionInstalledAsync, startDetachedUpgrade, } from './installation.js';
|
|
2
2
|
export { autoUpgrade, foregroundUpgrade, getAvailableUpgrade, isNewerVersion, } from './upgrade.js';
|
|
3
3
|
export type { InstallMethod } from './installation.js';
|
|
4
4
|
export type { AvailableUpgrade } from './upgrade.js';
|
|
@@ -1 +1 @@
|
|
|
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"}
|
|
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,uBAAuB,EACvB,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,3 +1,3 @@
|
|
|
1
|
-
export { VERSION, detectMethod, detectMethodAsync, fetchLatestVersion, getUpgradeCommand, startDetachedUpgrade, } from './installation.js';
|
|
1
|
+
export { VERSION, detectMethod, detectMethodAsync, fetchLatestVersion, getUpgradeCommand, isVersionInstalledAsync, startDetachedUpgrade, } from './installation.js';
|
|
2
2
|
export { autoUpgrade, foregroundUpgrade, getAvailableUpgrade, isNewerVersion, } from './upgrade.js';
|
|
3
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,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"}
|
|
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,uBAAuB,EACvB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,GACjB,MAAM,cAAc,CAAC"}
|
|
@@ -13,6 +13,10 @@ export declare function detectMethod(): InstallMethod;
|
|
|
13
13
|
* Async version of installation method detection to avoid blocking the event loop.
|
|
14
14
|
*/
|
|
15
15
|
export declare function detectMethodAsync(commandRunner?: CommandRunner): Promise<InstallMethod>;
|
|
16
|
+
/**
|
|
17
|
+
* Checks whether a specific Bkper version is already installed globally.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isVersionInstalledAsync(method: InstallMethod, version: string, commandRunner?: CommandRunner): Promise<boolean>;
|
|
16
20
|
/**
|
|
17
21
|
* Fetches the latest published version from the npm registry.
|
|
18
22
|
* Returns null if the fetch fails.
|
|
@@ -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,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"}
|
|
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;;GAEG;AACH,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,aAAoC,GACpD,OAAO,CAAC,OAAO,CAAC,CAoBlB;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"}
|
|
@@ -90,6 +90,29 @@ export function detectMethodAsync() {
|
|
|
90
90
|
return 'unknown';
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Checks whether a specific Bkper version is already installed globally.
|
|
95
|
+
*/
|
|
96
|
+
export function isVersionInstalledAsync(method_1, version_1) {
|
|
97
|
+
return __awaiter(this, arguments, void 0, function* (method, version, commandRunner = defaultCommandRunner) {
|
|
98
|
+
const check = getDetectionChecks().find(check => check.method === method);
|
|
99
|
+
if (!check) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const output = yield commandRunner(check.command, 10000);
|
|
104
|
+
const packageVersion = `${PACKAGE_NAME}@${version}`;
|
|
105
|
+
return output.split(/\s+/).some(token => {
|
|
106
|
+
const normalizedToken = token.replace(/^[^A-Za-z0-9@/._+-]+|[^A-Za-z0-9@/._+-]+$/g, '');
|
|
107
|
+
return normalizedToken === packageVersion;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (_a) {
|
|
111
|
+
// Preserve the existing upgrade flow when the check cannot be completed.
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
93
116
|
/**
|
|
94
117
|
* Fetches the latest published version from the npm registry.
|
|
95
118
|
* Returns null if the fetch fails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":"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"}
|
|
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;;GAEG;AACH,MAAM,UAAgB,uBAAuB;yDACzC,MAAqB,EACrB,OAAe,EACf,gBAA+B,oBAAoB;QAEnD,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,cAAc,GAAG,GAAG,YAAY,IAAI,OAAO,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACpC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CACjC,4CAA4C,EAC5C,EAAE,CACL,CAAC;gBACF,OAAO,eAAe,KAAK,cAAc,CAAC;YAC9C,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,WAAM,CAAC;YACL,yEAAyE;YACzE,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bkper",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.26.0",
|
|
4
4
|
"description": "Command line client for Bkper",
|
|
5
5
|
"bin": {
|
|
6
6
|
"bkper": "./lib/cli.js"
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"upgrade:api": "bun update @bkper/bkper-api-types --latest && bun update bkper-js --latest"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@earendil-works/pi-coding-agent": "0.84.
|
|
56
|
-
"@earendil-works/pi-tui": "0.84.
|
|
55
|
+
"@earendil-works/pi-coding-agent": "0.84.2",
|
|
56
|
+
"@earendil-works/pi-tui": "0.84.2",
|
|
57
57
|
"bkper-js": "^2.42.0",
|
|
58
58
|
"commander": "^13.1.0",
|
|
59
59
|
"dotenv": "^8.2.0",
|