@lumi.ai/runner 0.15.2 → 0.15.4

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 +21 -2
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -99,8 +99,9 @@ function effectiveAgentTools(agent) {
99
99
  const { capabilities } = getEngine(agent.engine);
100
100
  const tools = { ...DEFAULT_AGENT_TOOLS, ...agent.tools };
101
101
  const github = { ...DEFAULT_AGENT_TOOLS.github, ...tools.github };
102
+ const { agentWrite, ...spreadableTools } = tools;
102
103
  return {
103
- ...tools,
104
+ ...spreadableTools,
104
105
  workspaceMcp: tools.workspaceMcp && capabilities.mcp,
105
106
  bash: tools.bash && capabilities.bash,
106
107
  webSearch: tools.webSearch && capabilities.webSearch,
@@ -117,6 +118,9 @@ function effectiveAgentTools(agent) {
117
118
  // browser tools are served by Crew's own Workspace MCP, so an engine that cannot speak MCP
118
119
  // cannot reach them however the captain has configured the agent.
119
120
  browser: tools.browser && capabilities.mcp,
121
+ // §15.45, and intersected with `capabilities.mcp` for `browser`'s reason: `agent_write` is a
122
+ // Workspace MCP tool, so an engine that cannot speak MCP cannot reach it however this is set.
123
+ ...agentWrite && capabilities.mcp ? { agentWrite } : {},
120
124
  github: { ...github, repos: [...github.repos], enabled: github.enabled && capabilities.bash }
121
125
  };
122
126
  }
@@ -295,6 +299,21 @@ var COLLECTIONS = {
295
299
  * test that exists to catch a forgotten credential-bearing collection.
296
300
  */
297
301
  mcpServers: "mcp_servers",
302
+ /**
303
+ * `ships/{shipId}/oauth_grants/{grantId}` — a person's standing authorization for one OAuth
304
+ * client to reach this Ship's Workspace MCP (PRD §15.46).
305
+ *
306
+ * SHIP-SCOPED, unlike the three root-level collections the flow also uses, and for one reason:
307
+ * it must die with the Ship. The pending request and the authorization code both live at the
308
+ * root because neither has a Ship yet (choosing one is what consent is FOR) or lives longer than
309
+ * a minute; a grant is the durable half and outlives both.
310
+ *
311
+ * The row here is the NON-SECRET half — who, which client, when last used — so a member can see
312
+ * "connected apps" without a privileged read. The refresh token's hash lives beside it in
313
+ * `secrets/oauth_grant_{grantId}`, which no client may read at all, exactly the way a registered
314
+ * MCP connection splits from `secrets/mcp_srv_{key}`.
315
+ */
316
+ oauthGrants: "oauth_grants",
298
317
  /** Top-level `users/{uid}/...` — per-user docs (runner machine registry). */
299
318
  users: "users",
300
319
  /** Top-level `githubInstallStates/{stateId}` — single-use install-flow nonces (backend only). */
@@ -919,7 +938,7 @@ function mcpUrl(config2) {
919
938
  }
920
939
 
921
940
  // src/version.ts
922
- var RUNNER_VERSION = true ? "0.15.2" : "0.0.0-dev";
941
+ var RUNNER_VERSION = true ? "0.15.4" : "0.0.0-dev";
923
942
 
924
943
  // src/auth.ts
925
944
  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.2",
3
+ "version": "0.15.4",
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.",