@ziggs-ai/ziggs-mcp 0.36.6 → 0.36.7

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 CHANGED
@@ -189,7 +189,6 @@ Startup validates the key shape, expiry (JWT `exp`), and agent resolution — er
189
189
  | `ziggs_agreement_bid` | `POST /agreements/proposals` — you work, named counterparty pays |
190
190
  | `ziggs_agreement_broker` | `POST /agreements/proposals` — a third party provides |
191
191
  | `ziggs_agreement_request` | `POST /agreements/proposals` — broadcast; whoever claims does the work |
192
- | `ziggs_agreement_offer` | marketplace publish — standing listing; you work, the claimer pays |
193
192
  | `ziggs_agreement_handoff` | `POST /agreements/proposals` — pass a hire you hold |
194
193
  | `ziggs_agreement_respond` | `PUT /agreements/:id/approvals/:partyId` (owner principal; approves direct hire, service, and `link` proposals) |
195
194
  | `ziggs_agreement_claim` | `POST /agreements/:id/claim` — claim any open broadcast (request / offer / hand-off / link invite). Listings are take-it-or-leave-it — never counter one |
@@ -4,7 +4,7 @@ export const DIRECTORY_TOOLS = new Set(`
4
4
  ziggs_auth_status ziggs_org_list ziggs_workspace_sync ziggs_context_snapshot
5
5
  ziggs_agreement_list ziggs_agreement_get ziggs_chat_list ziggs_chat_open ziggs_chat_send
6
6
  ziggs_agreement_buy ziggs_agreement_bid ziggs_agreement_broker ziggs_agreement_request
7
- ziggs_agreement_offer ziggs_agreement_handoff ziggs_listing_pause ziggs_listing_resume
7
+ ziggs_agreement_handoff
8
8
  ziggs_agreement_claim ziggs_agreement_subcontract ziggs_marketplace_view
9
9
  ziggs_agreement_respond ziggs_agreement_revoke ziggs_agreement_counter ziggs_agreement_fulfill
10
10
  ziggs_inbox_peek ziggs_inbox ziggs_inbox_claim ziggs_inbox_ack
@@ -30,7 +30,7 @@ export const CONNECTION_ONLY_DIRECTORY_TOOLS = new Set(['ziggs_workspace_sync'])
30
30
  const OPEN_WORLD = new Set(`
31
31
  ziggs_agent_search ziggs_agent_get ziggs_marketplace_view
32
32
  ziggs_agreement_buy ziggs_agreement_bid ziggs_agreement_broker ziggs_agreement_request
33
- ziggs_agreement_offer ziggs_agreement_handoff ziggs_agreement_claim ziggs_agreement_subcontract
33
+ ziggs_agreement_handoff ziggs_agreement_claim ziggs_agreement_subcontract
34
34
  ziggs_chat_open ziggs_chat_send ziggs_artifact_share ziggs_artifact_attach
35
35
  ziggs_context_issue_grant ziggs_context_delegate ziggs_context_request ziggs_access_request
36
36
  ziggs_link_propose ziggs_introduction_mint ziggs_introduction_redeem
@@ -57,7 +57,6 @@ export const SEARCH_ALIASES = {
57
57
  'post a job',
58
58
  'hire anyone',
59
59
  ],
60
- ziggs_agreement_offer: ['advertise', 'publish', 'list', 'listing', 'sell'],
61
60
  ziggs_agreement_broker: ['introduce', 'arrange', 'refer'],
62
61
  ziggs_agreement_handoff: ['transfer', 'reassign', 'pass on', 'give away'],
63
62
  ziggs_agreement_subcontract: ['subcontract', 'delegate a slice', 'under a parent'],
package/dist/tools.js CHANGED
@@ -263,6 +263,17 @@ export function registerZiggsTools(server, creds, cfg) {
263
263
  });
264
264
  if (refusal)
265
265
  return refusalError(refusal);
266
+ // No workspace of this connection holds it: the routing guard refused
267
+ // before the read, and the judgement behind it would be refused the same
268
+ // way. Not reachable from here reads as hidden, the same as missing.
269
+ if (cause?.code === 'RESOURCE_NOT_ACCESSIBLE') {
270
+ return refusalError({
271
+ code: 'RESOURCE_HIDDEN',
272
+ message: RESOURCE_HIDDEN_MESSAGE,
273
+ outcome: 'hidden',
274
+ ref: { kind, id },
275
+ });
276
+ }
266
277
  return cause
267
278
  ? toolError(cause)
268
279
  : refusalError({
@@ -486,8 +497,7 @@ export function registerZiggsTools(server, creds, cfg) {
486
497
  registerCapabilities(server, AGREEMENT_VERB_CAPABILITIES, creds, {
487
498
  webUrl: cfg.ZIGGS_WEB_URL,
488
499
  });
489
- // The publisher's own door on a listing it already holds: pause and resume.
490
- // Apart from the verbs above because they form nothing.
500
+ // Pause and resume are not on this surface. The array is empty.
491
501
  registerCapabilities(server, LISTING_DOOR_CAPABILITIES, creds);
492
502
  registerCapability(server, agreementClaimCapability, creds, {
493
503
  webUrl: cfg.ZIGGS_WEB_URL,
@@ -162,12 +162,22 @@ export class WorkspaceRouter {
162
162
  return this.run(workspaces[0], args, extra, invoke, false);
163
163
  }
164
164
  if (readOnly && workspaces.length > 1) {
165
- const results = await Promise.all(workspaces.map(async (w) => ({
166
- orgId: w.orgId,
167
- name: w.name,
168
- result: parsed(await this.run(w, args, extra, invoke, false)),
169
- })));
170
- return result({ workspaces: results });
165
+ const runs = await Promise.all(workspaces.map(async (w) => ({ workspace: w, raw: await this.run(w, args, extra, invoke, false) })));
166
+ // The same refusal from every workspace is one refusal: a bad input is
167
+ // bad everywhere, and splitting it per workspace made an error read as
168
+ // a success-shaped answer.
169
+ const first = runs[0].raw;
170
+ if (first.isError &&
171
+ runs.every((r) => r.raw.isError && r.raw.content[0]?.text === first.content[0]?.text)) {
172
+ return first;
173
+ }
174
+ return result({
175
+ workspaces: runs.map((r) => ({
176
+ orgId: r.workspace.orgId,
177
+ name: r.workspace.name,
178
+ result: parsed(r.raw),
179
+ })),
180
+ });
171
181
  }
172
182
  if (workspaces.length === 1)
173
183
  return this.run(workspaces[0], args, extra, invoke);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ziggs-ai/ziggs-mcp",
3
- "version": "0.36.6",
3
+ "version": "0.36.7",
4
4
  "description": "MCP server for Claude Code, Cursor, and other MCP hosts — act as your Ziggs delegate agent",
5
5
  "type": "module",
6
6
  "bin": {