@lumi.ai/runner 0.15.13 → 0.15.15

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 (2) hide show
  1. package/dist/cli.js +30 -1
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -277,6 +277,34 @@ var COLLECTIONS = {
277
277
  /** ROOT collection (§15.44): one liveness document per relay instance, overwritten each
278
278
  * report. Not a Ship subcollection — a relay serves every Ship and belongs to none. */
279
279
  browserRelays: "browserRelays",
280
+ /**
281
+ * ROOT (§15.64): `crew_stripe_events/{eventId}` — the webhook idempotency ledger.
282
+ *
283
+ * Root rather than Ship-scoped because a Stripe event is addressed to an ACCOUNT, and the Ship
284
+ * it concerns is read out of its metadata AFTER the duplicate check. Scoping it under a Ship
285
+ * would mean resolving the Ship before knowing whether the event had already been handled,
286
+ * which is the wrong order — and would strand the ledger row when that Ship is purged.
287
+ */
288
+ crewStripeEvents: "crewStripeEvents",
289
+ /**
290
+ * ROOT (§15.64): `crewBillingAccounts/{uid}` — one person's subscription, entire.
291
+ *
292
+ * Keyed by auth uid, not by Ship, because ONE PERSON HAS ONE SUBSCRIPTION covering every
293
+ * workspace they own. That is the whole of §15.64's second shape: a workspace is free, a seat is
294
+ * paid, and the seat count is pooled across the account — so the subscription cannot live on a
295
+ * Ship without being copied onto each of them, and N copies of one fact is N chances for a stale
296
+ * one.
297
+ *
298
+ * What a Ship still carries is only what `firestore.rules` and the triggers must read without a
299
+ * network call: `billing.status` and `billing.trialEnd`. Everything else — customer, subscription
300
+ * id, seats, interval, period end, the seat-sync error — is here, once.
301
+ *
302
+ * Deny-all to clients. Writable it is an account-takeover primitive (point your uid at somebody
303
+ * else's customer and the Portal session minted for you opens their card); readable it leaks who
304
+ * is a customer. The app never touches it — the Billing page gets its numbers from
305
+ * `crewBillingPreview`, which asks Stripe.
306
+ */
307
+ crewBillingAccounts: "crewBillingAccounts",
280
308
  /** `ships/{shipId}/notifications/{id}` — per-member in-app notifications. */
281
309
  notifications: "notifications",
282
310
  /** `ships/{shipId}/usage_daily/{yyyy-mm-dd}` — token-tracking aggregates. */
@@ -861,6 +889,7 @@ var WEBHOOK_ACK_REASONS = {
861
889
  duplicate: "Already delivered \u2014 this is a retry of a delivery that was accepted.",
862
890
  noListener: "No enabled playbook on this Ship is listening to this hook.",
863
891
  rateLimited: "Deliveries are arriving faster than one per second; this one was dropped.",
892
+ shipPaused: "This Ship's subscription is not active, so the delivery was accepted and no agent was woken.",
864
893
  fanout: `Woke the first ${MAX_WEBHOOK_FANOUT} playbooks listening; the rest were skipped.`
865
894
  };
866
895
 
@@ -990,7 +1019,7 @@ function mcpUrl(config2) {
990
1019
  }
991
1020
 
992
1021
  // src/version.ts
993
- var RUNNER_VERSION = true ? "0.15.13" : "0.0.0-dev";
1022
+ var RUNNER_VERSION = true ? "0.15.15" : "0.0.0-dev";
994
1023
 
995
1024
  // src/auth.ts
996
1025
  import { signInWithCustomToken } from "firebase/auth";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumi.ai/runner",
3
- "version": "0.15.13",
3
+ "version": "0.15.15",
4
4
  "type": "module",
5
5
  "description": "Lumi Crew runner daemon — claims jobs from your Ships and executes them as headless Claude sessions on your own machine.",
6
6
  "//name": "The ONLY package in this monorepo published to the public registry, so it is the one that does not follow the internal @lumi/crew-* convention: `@lumi` is not a scope we own, `@lumi.ai` is (the npm org). The workspace DIRECTORY stays packages/crew/runner — renaming the package is not renaming the folder.",