@lumi.ai/runner 0.15.11 → 0.15.12

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 +29 -1
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -314,6 +314,24 @@ var COLLECTIONS = {
314
314
  * MCP connection splits from `secrets/mcp_srv_{key}`.
315
315
  */
316
316
  oauthGrants: "oauth_grants",
317
+ /**
318
+ * `ships/{shipId}/webhooks/{hookId}` — one inbound endpoint (PRD §15.56). NON-SECRET metadata;
319
+ * the signing secret is `secrets/webhook_{hookId}`, which no rule releases to anybody.
320
+ *
321
+ * SNAKE_CASE-safe as a single word, which matters for the reason `mcp_servers` documents: the
322
+ * purge-completeness oracle finds Ship subcollections by regexing firestore.rules for
323
+ * `match /([a-z_]+)/{`, so a camelCase name would be invisible to the one test that exists to
324
+ * catch a forgotten credential-bearing collection.
325
+ */
326
+ webhooks: "webhooks",
327
+ /**
328
+ * `ships/{shipId}/webhook_deliveries/{key}` — the idempotency ledger (PRD §15.56).
329
+ *
330
+ * One document per accepted delivery, created transactionally: `tx.create` FAILING because the
331
+ * document exists IS the lock, so there is no read-then-write race for two concurrent retries to
332
+ * slip through. Swept by TTL rather than kept, since its only job is to be present.
333
+ */
334
+ webhookDeliveries: "webhook_deliveries",
317
335
  /** Top-level `users/{uid}/...` — per-user docs (runner machine registry). */
318
336
  users: "users",
319
337
  /** Top-level `githubInstallStates/{stateId}` — single-use install-flow nonces (backend only). */
@@ -814,6 +832,16 @@ var EMPTY_USAGE_BY_AGENT = {
814
832
  jobs: 0
815
833
  };
816
834
 
835
+ // ../shared/dist/webhook.js
836
+ var MAX_WEBHOOK_FANOUT = 5;
837
+ var WEBHOOK_ACK_REASONS = {
838
+ disabled: "This hook is switched off, so the delivery was accepted and dropped.",
839
+ duplicate: "Already delivered \u2014 this is a retry of a delivery that was accepted.",
840
+ noListener: "No enabled playbook on this Ship is listening to this hook.",
841
+ rateLimited: "Deliveries are arriving faster than one per second; this one was dropped.",
842
+ fanout: `Woke the first ${MAX_WEBHOOK_FANOUT} playbooks listening; the rest were skipped.`
843
+ };
844
+
817
845
  // ../shared/dist/workflow.js
818
846
  var WORKFLOW_SENTINELS = ["generic", "assigned", "activity", "chat"];
819
847
  function isWorkflowSentinel(id) {
@@ -940,7 +968,7 @@ function mcpUrl(config2) {
940
968
  }
941
969
 
942
970
  // src/version.ts
943
- var RUNNER_VERSION = true ? "0.15.11" : "0.0.0-dev";
971
+ var RUNNER_VERSION = true ? "0.15.12" : "0.0.0-dev";
944
972
 
945
973
  // src/auth.ts
946
974
  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.11",
3
+ "version": "0.15.12",
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.",