pipebrain-mcp 0.21.0 → 0.22.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.
Files changed (2) hide show
  1. package/dist/main.js +32 -1
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -15640,6 +15640,12 @@ var setStatusInputSchema = external_exports.strictObject({
15640
15640
  issue: issueRefSchema,
15641
15641
  status: issueStatusSchema
15642
15642
  });
15643
+ var getWorkContextInputSchema = external_exports.strictObject({
15644
+ issue: issueRefSchema.optional(),
15645
+ project: projectRefSchema.optional()
15646
+ }).refine((v) => v.issue === void 0 !== (v.project === void 0), {
15647
+ message: "pass exactly one of `issue` or `project` \u2014 an issue names its own project, and passing neither names nothing to read"
15648
+ });
15643
15649
  var claimInputSchema = external_exports.strictObject({
15644
15650
  issue: issueRefSchema
15645
15651
  });
@@ -16563,6 +16569,22 @@ var ApiClient = class _ApiClient {
16563
16569
  const query = filter?.mine === true ? { mine: "1" } : void 0;
16564
16570
  return this.requestList("GET", "/api/v1/waiting", { query });
16565
16571
  }
16572
+ // --- the working-context pack ----------------------------------------------
16573
+ /**
16574
+ * Everything a session needs before it starts work, in ONE read (PIPE-86): the
16575
+ * item, the documents that bind it AT THE REVISION IT WAS SPECIFIED AGAINST, the
16576
+ * project's cross-cutting requirements and the release being worked — or, given a
16577
+ * project, the work available to pick up instead.
16578
+ *
16579
+ * ONE method for two routes because they are two forms of one pack, decided by
16580
+ * which of `issue`/`project` is named — exactly one of them, as
16581
+ * `getWorkContextInputSchema` requires. The API assembles the pack and this computes
16582
+ * nothing of its own, so the browser, the command line and the agent read the same
16583
+ * answer.
16584
+ */
16585
+ getWorkContext(input) {
16586
+ return input.issue !== void 0 ? this.request("GET", `/api/v1/issues/${enc(input.issue)}/work-context`) : this.request("GET", `/api/v1/projects/${enc(input.project)}/work-context`);
16587
+ }
16566
16588
  // --- secrets ---------------------------------------------------------------
16567
16589
  // Metadata only: no method here returns a secret VALUE (the reveal plane is a
16568
16590
  // separate surface). Every response type is a `*View` with no `value` field.
@@ -16960,6 +16982,15 @@ Every loose end has one destination, and none of them is prose. Anything you not
16960
16982
  // makes that comparable at a glance.
16961
16983
  run(async () => ({ items: await client2.listWaiting() }))
16962
16984
  ));
16985
+ registerTool("get_work_context", {
16986
+ description: "Everything a session needs before it starts work, in ONE read \u2014 assembled by the API and returned verbatim. Addressed by `issue` OR by `project`, never both and never neither: an issue names its own project, so the pair is refused rather than resolved for you (\xA77). Given an ISSUE: that issue\u2019s full detail \u2014 the same payload `get_issue` returns \u2014 PLUS the BODY TEXT of every requirement it links, AT THE REVISION THE LINK IS PINNED AT. That text is the round trip this removes: `get_issue` names which documents bind the work and at which revision, never what they SAY, so a session that has read the issue still owes one fetch per link \u2014 and the one it skips leaves it building against rules it never read. Comments come CAPPED at the newest `commentLimit`, with `commentCount` \u2014 the issue\u2019s TRUE total \u2014 beside them, so a shortened list reads AS shortened rather than as the whole history; read the issue directly for the rest. Given a PROJECT: `available`, the work a session could START right now. It EXCLUDES finished and abandoned work (`done`, `killed`), work another person has claimed, and anything blocked \u2014 the status guard would refuse to start that, and offering work that cannot be started is offering a refusal. Your OWN claims stay, and so does unscheduled work carrying no milestone. The item form carries no `available`; the project form carries no item. BOTH forms also carry the project half: the release currently being worked (the active milestone) and the project\u2019s cross-cutting requirements WITH their text \u2014 they bind every epic automatically, and each is otherwise a separate call a session can simply forget to make. READ-ONLY \u2014 this claims nothing, moves nothing and writes nothing.",
16987
+ // The WHOLE domain schema rather than its `.shape`: the exactly-one-of rule is a
16988
+ // refinement on the OBJECT, and a raw shape drops it — the SDK validates against
16989
+ // what it is handed, so the shape alone would quietly accept both arguments and
16990
+ // neither. Handing it the schema lets its refusal reach the caller verbatim,
16991
+ // naming the two arguments it refused rather than a reworded stand-in.
16992
+ inputSchema: getWorkContextInputSchema
16993
+ }, (args) => run(() => client2.getWorkContext(args)));
16963
16994
  registerTool("create_milestone", {
16964
16995
  description: "Create a milestone on a project. `token` is the short ref issues point at via their `milestone` field (e.g. `M1`) and is unique per project (a duplicate is rejected); `label` is its display name (e.g. `Feature Verification`). Optional `position` orders it (0-based, defaults to last); optional `active` marks it the current milestone \u2014 AT MOST ONE milestone per project is active, so `active: true` transactionally DEMOTES the previously active one rather than failing. Returns the created milestone (\xA77).",
16965
16996
  inputSchema: {
@@ -17376,7 +17407,7 @@ function loadMcpConfig() {
17376
17407
  }
17377
17408
 
17378
17409
  // src/version.ts
17379
- var VERSION = "0.21.0";
17410
+ var VERSION = "0.22.0";
17380
17411
 
17381
17412
  // src/main.ts
17382
17413
  var config2 = loadMcpConfig();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipebrain-mcp",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "Pipebrain MCP server for Claude Code and Claude Desktop — issues, requirements, content, assets, and metadata-only secrets over the Pipebrain API.",
5
5
  "type": "module",
6
6
  "license": "MIT",