@tribeunal/mcp-server 1.13.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 (102) hide show
  1. package/CHANGELOG.md +287 -0
  2. package/LICENSE +21 -0
  3. package/README.md +196 -0
  4. package/dist/auth/auth.d.ts +8 -0
  5. package/dist/auth/auth.d.ts.map +1 -0
  6. package/dist/auth/auth.js +14 -0
  7. package/dist/auth/auth.js.map +1 -0
  8. package/dist/client/api-client.d.ts +216 -0
  9. package/dist/client/api-client.d.ts.map +1 -0
  10. package/dist/client/api-client.js +325 -0
  11. package/dist/client/api-client.js.map +1 -0
  12. package/dist/client/from-env.d.ts +17 -0
  13. package/dist/client/from-env.d.ts.map +1 -0
  14. package/dist/client/from-env.js +25 -0
  15. package/dist/client/from-env.js.map +1 -0
  16. package/dist/core/instructions.d.ts +14 -0
  17. package/dist/core/instructions.d.ts.map +1 -0
  18. package/dist/core/instructions.js +21 -0
  19. package/dist/core/instructions.js.map +1 -0
  20. package/dist/core/stdio-register.d.ts +14 -0
  21. package/dist/core/stdio-register.d.ts.map +1 -0
  22. package/dist/core/stdio-register.js +39 -0
  23. package/dist/core/stdio-register.js.map +1 -0
  24. package/dist/core/tools.d.ts +1072 -0
  25. package/dist/core/tools.d.ts.map +1 -0
  26. package/dist/core/tools.js +1041 -0
  27. package/dist/core/tools.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +40 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/server.d.ts +15 -0
  33. package/dist/server.d.ts.map +1 -0
  34. package/dist/server.js +19 -0
  35. package/dist/server.js.map +1 -0
  36. package/dist/tools/activity.d.ts +98 -0
  37. package/dist/tools/activity.d.ts.map +1 -0
  38. package/dist/tools/activity.js +167 -0
  39. package/dist/tools/activity.js.map +1 -0
  40. package/dist/tools/cases.d.ts +154 -0
  41. package/dist/tools/cases.d.ts.map +1 -0
  42. package/dist/tools/cases.js +91 -0
  43. package/dist/tools/cases.js.map +1 -0
  44. package/dist/tools/comments.d.ts +29 -0
  45. package/dist/tools/comments.d.ts.map +1 -0
  46. package/dist/tools/comments.js +17 -0
  47. package/dist/tools/comments.js.map +1 -0
  48. package/dist/tools/decisions.d.ts +297 -0
  49. package/dist/tools/decisions.d.ts.map +1 -0
  50. package/dist/tools/decisions.js +102 -0
  51. package/dist/tools/decisions.js.map +1 -0
  52. package/dist/tools/jury-duty.d.ts +56 -0
  53. package/dist/tools/jury-duty.d.ts.map +1 -0
  54. package/dist/tools/jury-duty.js +39 -0
  55. package/dist/tools/jury-duty.js.map +1 -0
  56. package/dist/tools/sides.d.ts +15 -0
  57. package/dist/tools/sides.d.ts.map +1 -0
  58. package/dist/tools/sides.js +11 -0
  59. package/dist/tools/sides.js.map +1 -0
  60. package/dist/tools/trials.d.ts +78 -0
  61. package/dist/tools/trials.d.ts.map +1 -0
  62. package/dist/tools/trials.js +29 -0
  63. package/dist/tools/trials.js.map +1 -0
  64. package/dist/tools/tribes.d.ts +75 -0
  65. package/dist/tools/tribes.d.ts.map +1 -0
  66. package/dist/tools/tribes.js +47 -0
  67. package/dist/tools/tribes.js.map +1 -0
  68. package/dist/tools/users.d.ts +9 -0
  69. package/dist/tools/users.d.ts.map +1 -0
  70. package/dist/tools/users.js +6 -0
  71. package/dist/tools/users.js.map +1 -0
  72. package/dist/tools/uuid.d.ts +35 -0
  73. package/dist/tools/uuid.d.ts.map +1 -0
  74. package/dist/tools/uuid.js +77 -0
  75. package/dist/tools/uuid.js.map +1 -0
  76. package/dist/tools/votes.d.ts +45 -0
  77. package/dist/tools/votes.d.ts.map +1 -0
  78. package/dist/tools/votes.js +22 -0
  79. package/dist/tools/votes.js.map +1 -0
  80. package/dist/tools/webhooks.d.ts +26 -0
  81. package/dist/tools/webhooks.d.ts.map +1 -0
  82. package/dist/tools/webhooks.js +39 -0
  83. package/dist/tools/webhooks.js.map +1 -0
  84. package/dist/utils/format.d.ts +4 -0
  85. package/dist/utils/format.d.ts.map +1 -0
  86. package/dist/utils/format.js +24 -0
  87. package/dist/utils/format.js.map +1 -0
  88. package/llms-install.md +81 -0
  89. package/package.json +73 -0
  90. package/skills/README.md +43 -0
  91. package/skills/acting-on-verdicts/SKILL.md +103 -0
  92. package/skills/arbitrating-a-dispute/SKILL.md +107 -0
  93. package/skills/convening-a-team-jury/SKILL.md +94 -0
  94. package/skills/deciding-with-a-jury/SKILL.md +120 -0
  95. package/skills/serving-jury-duty/SKILL.md +90 -0
  96. package/skills/using-tribeunal/SKILL.md +56 -0
  97. package/skills/using-tribeunal/references/errors.md +54 -0
  98. package/skills/using-tribeunal/references/tools.md +53 -0
  99. package/skills/weighing-evidence/SKILL.md +94 -0
  100. package/skills/wiring-webhooks/SKILL.md +107 -0
  101. package/skills/wiring-webhooks/references/events.md +52 -0
  102. package/skills/wiring-webhooks/scripts/verify-signature.js +72 -0
@@ -0,0 +1,216 @@
1
+ export declare class TribeunalAPIError extends Error {
2
+ statusCode?: number | undefined;
3
+ details?: any | undefined;
4
+ constructor(message: string, statusCode?: number | undefined, details?: any | undefined);
5
+ }
6
+ /**
7
+ * Pull a human-readable message out of a Tribeunal API error body.
8
+ *
9
+ * The API renders errors via API Platform, so the useful text lives in
10
+ * `detail` (problem+json / APIP 4) or `hydra:description` (Hydra / APIP 3),
11
+ * with field-level issues in `violations` — NOT in a top-level `message`.
12
+ * Reading only `message` (the previous behaviour) collapsed every failure to a
13
+ * bare "Request failed with status code 400", which is what made callers guess
14
+ * blindly. Falls back through the older shapes and finally `fallback`.
15
+ */
16
+ export declare function extractApiErrorMessage(data: unknown, fallback: string): string;
17
+ export interface TribeunalAPIClientConfig {
18
+ /** Base URL of the Tribeunal API, e.g. https://tribeunal.com/api */
19
+ baseURL: string;
20
+ /**
21
+ * Bearer token sent as `Authorization: Bearer <token>` on every request.
22
+ * For the stdio/persona path this is a legacy API key; for the Cloudflare
23
+ * worker path this is the per-user Auth0 access token.
24
+ */
25
+ bearerToken?: string;
26
+ /**
27
+ * Optional pre-built Node `https.Agent` (typed loosely so this file carries no
28
+ * dependency on Node's type declarations and stays compilable in the
29
+ * Cloudflare Workers type environment). The stdio path injects one via
30
+ * `createApiClientFromEnv()` to control TLS verification; the worker omits it
31
+ * and lets the Workers runtime handle TLS.
32
+ */
33
+ httpsAgent?: unknown;
34
+ }
35
+ /** One event in the case-activity feed. */
36
+ export interface CaseActivityEvent {
37
+ cursor: string;
38
+ type: string;
39
+ actorUsername: string;
40
+ actorIsAi: boolean;
41
+ sideUuid: string | null;
42
+ sideName: string | null;
43
+ sideColor: number | null;
44
+ text: string | null;
45
+ refUuid: string | null;
46
+ createdAt: string;
47
+ }
48
+ /** The machine-readable verdict block (non-null once the case is terminal). */
49
+ export interface CaseVerdict {
50
+ decided: boolean;
51
+ decisionUuid: string | null;
52
+ type: number;
53
+ typeName: string;
54
+ name: string | null;
55
+ text: string | null;
56
+ winningSides: Array<{
57
+ uuid: string;
58
+ name: string | null;
59
+ }>;
60
+ sides: Array<{
61
+ uuid: string;
62
+ name: string | null;
63
+ totalVotes: number;
64
+ votePercentage: number;
65
+ isWinner: boolean;
66
+ }>;
67
+ totalVotes: number;
68
+ decidedAt: string | null;
69
+ /** 1 for a case decided once; increments per reopen. */
70
+ version: number;
71
+ /** Verdicts reached before the most recent reopen, oldest first. */
72
+ supersededVerdicts: Array<{
73
+ decisionUuid: string;
74
+ type: number;
75
+ typeName: string;
76
+ name: string | null;
77
+ decidedAt: string | null;
78
+ }>;
79
+ /** Why the verdict is Void, or null on an ordinary verdict (a plain tie included). */
80
+ voidReason: 'quorum_not_met' | 'requirement_not_met' | null;
81
+ /** required is the case's minVotes (0 when it set none). */
82
+ quorum: {
83
+ required: number;
84
+ received: number;
85
+ };
86
+ /** A guest vote has no owner; every other vote is a person or an AI persona. */
87
+ voterBreakdown: {
88
+ human: number;
89
+ ai: number;
90
+ guest: number;
91
+ };
92
+ }
93
+ /** Response of GET /api/cases/{uuid}/activity. */
94
+ export interface CaseActivityPage {
95
+ caseUuid: string;
96
+ caseState: string;
97
+ caseEndsAt: string | null;
98
+ events: CaseActivityEvent[];
99
+ latestCursor: string | null;
100
+ hasMore: boolean;
101
+ verdict: CaseVerdict | null;
102
+ }
103
+ export declare class TribeunalAPIClient {
104
+ private client;
105
+ private bearerToken;
106
+ private baseOrigin;
107
+ constructor(config: TribeunalAPIClientConfig);
108
+ searchCases(params: {
109
+ query?: string;
110
+ status?: string;
111
+ type?: string;
112
+ tags?: string[];
113
+ page?: number;
114
+ limit?: number;
115
+ }): Promise<any>;
116
+ getCase(id: string): Promise<any>;
117
+ /**
118
+ * Fetch a page of the case-activity feed. Each call is a sub-second request,
119
+ * far under the 30s axios timeout, so the await tools can poll it on a fixed
120
+ * interval. `after` is an opaque cursor (omitted = tail of the latest events).
121
+ */
122
+ getCaseActivity(caseId: string, opts?: {
123
+ after?: string;
124
+ types?: string[];
125
+ limit?: number;
126
+ }): Promise<CaseActivityPage>;
127
+ createCase(data: {
128
+ title: string;
129
+ description: string;
130
+ type: 'case' | 'advice' | 'poll';
131
+ juryType: 'public' | 'invited';
132
+ visibility?: 'public' | 'private';
133
+ sides: Array<{
134
+ name: string;
135
+ description?: string;
136
+ image?: string;
137
+ }>;
138
+ caseLength?: number;
139
+ maxAiJurorPercentage?: number;
140
+ jurorCount?: number;
141
+ openImmediately?: boolean;
142
+ allowsGuestVotes?: boolean;
143
+ arbitrationMode?: boolean;
144
+ decisionRequirement?: 'any' | 'simple' | 'qualified' | 'unanimous';
145
+ minVotes?: number;
146
+ tags?: string[];
147
+ }): Promise<any>;
148
+ closeCase(caseId: string): Promise<any>;
149
+ setSideImage(sideId: string, imageUrl: string): Promise<any>;
150
+ castVote(caseId: string, sideId: string, comment?: string): Promise<any>;
151
+ joinJury(caseId: string): Promise<any>;
152
+ revokeVote(caseId: string, sideId: string): Promise<any>;
153
+ getVoteStats(caseId: string): Promise<any>;
154
+ listTribes(params: {
155
+ query?: string;
156
+ page?: number;
157
+ limit?: number;
158
+ }): Promise<any>;
159
+ getTribe(id: string): Promise<any>;
160
+ /**
161
+ * Backs tribeunal_list_tribe_members via GET /api/tribes/{uuid}/members. Roster
162
+ * is member-only: a private tribe the caller cannot view 404s, a viewable tribe
163
+ * they are not in 403s. Hand-built scalars only — no member credentials.
164
+ */
165
+ listTribeMembers(tribeId: string, params: {
166
+ page?: number;
167
+ limit?: number;
168
+ }): Promise<any>;
169
+ joinTribe(tribeId: string): Promise<any>;
170
+ leaveTribe(tribeId: string): Promise<any>;
171
+ createTribe(data: {
172
+ name: string;
173
+ description: string;
174
+ tags?: string[];
175
+ isPublic?: boolean;
176
+ }): Promise<any>;
177
+ /**
178
+ * Backs the tribeunal_invite_tribe_members tool via POST /api/tribes/{uuid}/invite.
179
+ * Owner-only; a public tribe answers 400 because it is already open to everyone.
180
+ */
181
+ inviteTribeMembers(tribeId: string, invitees: string[]): Promise<any>;
182
+ /**
183
+ * Backs tribeunal_create_webhook via POST /api/webhooks. The response is the
184
+ * ONLY place the signing secret ever appears (besides an explicit rotate), so
185
+ * it is returned to the caller verbatim rather than summarised away.
186
+ */
187
+ createWebhook(data: {
188
+ url: string;
189
+ events: string[];
190
+ }): Promise<any>;
191
+ /** Backs tribeunal_list_webhooks via GET /api/webhooks. Never carries secrets. */
192
+ listWebhooks(): Promise<any>;
193
+ /**
194
+ * Backs tribeunal_delete_webhook via DELETE /api/webhooks/{uuid}. Endpoints are
195
+ * owner-scoped: someone else's uuid answers 404, exactly like an unknown one.
196
+ */
197
+ deleteWebhook(webhookId: string): Promise<any>;
198
+ getUser(id: string): Promise<any>;
199
+ getCurrentUser(): Promise<any>;
200
+ getJuryDutyStatus(): Promise<any>;
201
+ getJuryDutyAllowance(): Promise<any>;
202
+ getJuryDutyDashboard(): Promise<any>;
203
+ startJuryDuty(): Promise<any>;
204
+ cancelJuryDuty(): Promise<any>;
205
+ acceptJuryDuty(memberId: string): Promise<any>;
206
+ rejectJuryDuty(memberId: string): Promise<any>;
207
+ getJuryDutyHistory(days?: number): Promise<any>;
208
+ inviteJurors(caseId: string, invitees?: string[], tribeId?: string): Promise<any>;
209
+ getCaseEvidence(caseId: string): Promise<any>;
210
+ postComment(caseId: string, text: string): Promise<any>;
211
+ listComments(caseId: string): Promise<any>;
212
+ markEvidence(kind: 'comment' | 'file', id: string): Promise<any>;
213
+ unmarkEvidence(kind: 'comment' | 'file', id: string): Promise<any>;
214
+ rateEvidence(evidenceId: string, rating: number, sideId?: string): Promise<any>;
215
+ }
216
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,325 @@
1
+ import axios from 'axios';
2
+ export class TribeunalAPIError extends Error {
3
+ statusCode;
4
+ details;
5
+ constructor(message, statusCode, details) {
6
+ super(message);
7
+ this.statusCode = statusCode;
8
+ this.details = details;
9
+ this.name = 'TribeunalAPIError';
10
+ }
11
+ }
12
+ /**
13
+ * Pull a human-readable message out of a Tribeunal API error body.
14
+ *
15
+ * The API renders errors via API Platform, so the useful text lives in
16
+ * `detail` (problem+json / APIP 4) or `hydra:description` (Hydra / APIP 3),
17
+ * with field-level issues in `violations` — NOT in a top-level `message`.
18
+ * Reading only `message` (the previous behaviour) collapsed every failure to a
19
+ * bare "Request failed with status code 400", which is what made callers guess
20
+ * blindly. Falls back through the older shapes and finally `fallback`.
21
+ */
22
+ export function extractApiErrorMessage(data, fallback) {
23
+ if (data && typeof data === 'object') {
24
+ const d = data;
25
+ if (typeof d.reason === 'string' && d.reason.trim()) {
26
+ return typeof d.message === 'string' && d.message.trim() ? `${d.reason}: ${d.message}` : d.reason;
27
+ }
28
+ if (typeof d.detail === 'string' && d.detail.trim())
29
+ return d.detail;
30
+ if (typeof d['hydra:description'] === 'string' && d['hydra:description'].trim())
31
+ return d['hydra:description'];
32
+ if (Array.isArray(d.violations) && d.violations.length) {
33
+ const msg = d.violations
34
+ .map((v) => (v?.propertyPath ? `${v.propertyPath}: ${v.message}` : v?.message))
35
+ .filter(Boolean)
36
+ .join('; ');
37
+ if (msg)
38
+ return msg;
39
+ }
40
+ if (typeof d.error === 'string' && d.error.trim())
41
+ return d.error;
42
+ if (d.error && typeof d.error.message === 'string' && d.error.message.trim())
43
+ return d.error.message;
44
+ if (typeof d.message === 'string' && d.message.trim())
45
+ return d.message;
46
+ if (typeof d.title === 'string' && d.title.trim())
47
+ return d.title;
48
+ }
49
+ return fallback;
50
+ }
51
+ export class TribeunalAPIClient {
52
+ client;
53
+ bearerToken;
54
+ baseOrigin;
55
+ constructor(config) {
56
+ const { baseURL, bearerToken, httpsAgent } = config;
57
+ this.baseOrigin = new URL(baseURL).origin;
58
+ this.bearerToken = bearerToken;
59
+ const axiosConfig = {
60
+ baseURL,
61
+ headers: {
62
+ 'Content-Type': 'application/json',
63
+ 'Accept': 'application/json',
64
+ },
65
+ timeout: 30000,
66
+ };
67
+ // The stdio path may inject a Node `https.Agent` (e.g. to allow the
68
+ // self-signed tribeunal.test cert in dev). On Cloudflare Workers no agent is
69
+ // passed and the runtime handles TLS natively.
70
+ if (httpsAgent) {
71
+ axiosConfig.httpsAgent = httpsAgent;
72
+ }
73
+ this.client = axios.create(axiosConfig);
74
+ // Add auth interceptor
75
+ this.client.interceptors.request.use((requestConfig) => {
76
+ if (this.bearerToken) {
77
+ requestConfig.headers['Authorization'] = `Bearer ${this.bearerToken}`;
78
+ }
79
+ return requestConfig;
80
+ });
81
+ // Add error interceptor
82
+ this.client.interceptors.response.use((response) => response, (error) => {
83
+ const message = extractApiErrorMessage(error.response?.data, error.message);
84
+ const statusCode = error.response?.status;
85
+ throw new TribeunalAPIError(message, statusCode, error.response?.data);
86
+ });
87
+ }
88
+ // Case endpoints
89
+ async searchCases(params) {
90
+ const response = await this.client.get('/cases', { params });
91
+ return response.data;
92
+ }
93
+ async getCase(id) {
94
+ const response = await this.client.get(`/cases/${id}`);
95
+ return response.data;
96
+ }
97
+ /**
98
+ * Fetch a page of the case-activity feed. Each call is a sub-second request,
99
+ * far under the 30s axios timeout, so the await tools can poll it on a fixed
100
+ * interval. `after` is an opaque cursor (omitted = tail of the latest events).
101
+ */
102
+ async getCaseActivity(caseId, opts = {}) {
103
+ const params = {};
104
+ if (opts.after)
105
+ params.after = opts.after;
106
+ if (opts.types && opts.types.length)
107
+ params.types = opts.types.join(',');
108
+ if (opts.limit !== undefined)
109
+ params.limit = opts.limit;
110
+ const response = await this.client.get(`/cases/${caseId}/activity`, { params });
111
+ return response.data;
112
+ }
113
+ async createCase(data) {
114
+ const { caseLength, ...rest } = data;
115
+ // The backend's create contract still names the duration `trialLength`; this
116
+ // is the single internal mapping from the user-facing `caseLength`. Every other
117
+ // field (openImmediately, allowsGuestVotes and the three arbitration fields
118
+ // included) forwards verbatim;
119
+ // omitting either lets the backend default it — true and false respectively.
120
+ // Each side's `image` maps to the backend's `imageUrl` field the same way.
121
+ const sides = rest.sides.map(({ image, ...side }) => (image === undefined ? side : { ...side, imageUrl: image }));
122
+ const body = caseLength === undefined ? { ...rest, sides } : { ...rest, sides, trialLength: caseLength };
123
+ const response = await this.client.post('/cases', body);
124
+ return response.data;
125
+ }
126
+ async closeCase(caseId) {
127
+ // POST /api/cases/{uuid}/close — the API Platform close operation (uses the /api
128
+ // baseURL like createCase, not baseOrigin). No request body. Owner/admin only,
129
+ // open cases only; the verdict is determined asynchronously by the backend pipeline.
130
+ const response = await this.client.post(`/cases/${caseId}/close`);
131
+ return response.data;
132
+ }
133
+ async setSideImage(sideId, imageUrl) {
134
+ // POST /api/sides/{uuid}/image {url} — owner-only, uuid-only. Uses the /api baseURL
135
+ // like createCase. A 422 carries {reason, message}; the response interceptor surfaces it.
136
+ const response = await this.client.post(`/sides/${sideId}/image`, { url: imageUrl });
137
+ return response.data;
138
+ }
139
+ // Vote endpoints (these routes have no /api/ prefix)
140
+ async castVote(caseId, sideId, comment) {
141
+ const params = new URLSearchParams();
142
+ params.append('side_id', sideId);
143
+ // Optional rationale: stored server-side as a vote-linked comment shown
144
+ // in the case activity feed.
145
+ if (comment && comment.trim() !== '') {
146
+ params.append('comment', comment.trim());
147
+ }
148
+ const response = await this.client.post(`${this.baseOrigin}/cases/${caseId}/vote`, params, {
149
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
150
+ });
151
+ return response.data;
152
+ }
153
+ async joinJury(caseId) {
154
+ // Seats the caller on a case's jury. Like the vote routes this lives on the
155
+ // web origin, NOT under /api, and needs no body — the caller is the subject.
156
+ const response = await this.client.post(`${this.baseOrigin}/cases/${caseId}/jury/join`, undefined);
157
+ return response.data;
158
+ }
159
+ async revokeVote(caseId, sideId) {
160
+ // The trailing segment is the SIDE uuid (the API looks up the caller's vote
161
+ // by (user, case)); this vote route has no /api/ prefix.
162
+ const response = await this.client.delete(`${this.baseOrigin}/cases/${caseId}/vote/${sideId}`);
163
+ return response.data;
164
+ }
165
+ async getVoteStats(caseId) {
166
+ // Served by GET /api/cases/{uuid}/votes (uses the /api baseURL, not baseOrigin).
167
+ const response = await this.client.get(`/cases/${caseId}/votes`);
168
+ return response.data;
169
+ }
170
+ // Tribe endpoints
171
+ async listTribes(params) {
172
+ const response = await this.client.get('/tribes', { params });
173
+ return response.data;
174
+ }
175
+ async getTribe(id) {
176
+ const response = await this.client.get(`/tribes/${id}`);
177
+ return response.data;
178
+ }
179
+ /**
180
+ * Backs tribeunal_list_tribe_members via GET /api/tribes/{uuid}/members. Roster
181
+ * is member-only: a private tribe the caller cannot view 404s, a viewable tribe
182
+ * they are not in 403s. Hand-built scalars only — no member credentials.
183
+ */
184
+ async listTribeMembers(tribeId, params) {
185
+ const response = await this.client.get(`/tribes/${tribeId}/members`, { params });
186
+ return response.data;
187
+ }
188
+ async joinTribe(tribeId) {
189
+ const response = await this.client.post(`/tribes/${tribeId}/join`);
190
+ return response.data;
191
+ }
192
+ async leaveTribe(tribeId) {
193
+ const response = await this.client.post(`/tribes/${tribeId}/leave`);
194
+ return response.data;
195
+ }
196
+ async createTribe(data) {
197
+ const response = await this.client.post('/tribes', data);
198
+ return response.data;
199
+ }
200
+ /**
201
+ * Backs the tribeunal_invite_tribe_members tool via POST /api/tribes/{uuid}/invite.
202
+ * Owner-only; a public tribe answers 400 because it is already open to everyone.
203
+ */
204
+ async inviteTribeMembers(tribeId, invitees) {
205
+ const response = await this.client.post(`/tribes/${tribeId}/invite`, { invitees });
206
+ return response.data;
207
+ }
208
+ /**
209
+ * Backs tribeunal_create_webhook via POST /api/webhooks. The response is the
210
+ * ONLY place the signing secret ever appears (besides an explicit rotate), so
211
+ * it is returned to the caller verbatim rather than summarised away.
212
+ */
213
+ async createWebhook(data) {
214
+ const response = await this.client.post('/webhooks', data);
215
+ return response.data;
216
+ }
217
+ /** Backs tribeunal_list_webhooks via GET /api/webhooks. Never carries secrets. */
218
+ async listWebhooks() {
219
+ const response = await this.client.get('/webhooks');
220
+ return response.data;
221
+ }
222
+ /**
223
+ * Backs tribeunal_delete_webhook via DELETE /api/webhooks/{uuid}. Endpoints are
224
+ * owner-scoped: someone else's uuid answers 404, exactly like an unknown one.
225
+ */
226
+ async deleteWebhook(webhookId) {
227
+ const response = await this.client.delete(`/webhooks/${webhookId}`);
228
+ return response.data;
229
+ }
230
+ // User endpoints
231
+ async getUser(id) {
232
+ const response = await this.client.get(`/users/${id}`);
233
+ return response.data;
234
+ }
235
+ async getCurrentUser() {
236
+ const response = await this.client.get('/users/me');
237
+ return response.data;
238
+ }
239
+ // Jury Duty endpoints
240
+ async getJuryDutyStatus() {
241
+ const response = await this.client.get('/jury-duty/status');
242
+ return response.data;
243
+ }
244
+ async getJuryDutyAllowance() {
245
+ const response = await this.client.get('/jury-duty/allowance');
246
+ return response.data;
247
+ }
248
+ async getJuryDutyDashboard() {
249
+ const response = await this.client.get('/jury-duty/index');
250
+ return response.data;
251
+ }
252
+ async startJuryDuty() {
253
+ const response = await this.client.post('/jury-duty/start');
254
+ return response.data;
255
+ }
256
+ async cancelJuryDuty() {
257
+ const response = await this.client.delete('/jury-duty/cancel');
258
+ return response.data;
259
+ }
260
+ async acceptJuryDuty(memberId) {
261
+ const response = await this.client.post(`/jury-duty/accept/${memberId}`);
262
+ return response.data;
263
+ }
264
+ async rejectJuryDuty(memberId) {
265
+ const response = await this.client.post(`/jury-duty/reject/${memberId}`);
266
+ return response.data;
267
+ }
268
+ async getJuryDutyHistory(days = 7) {
269
+ const response = await this.client.get('/jury-duty/allowance/history', { params: { days } });
270
+ return response.data;
271
+ }
272
+ async inviteJurors(caseId, invitees, tribeId) {
273
+ // POST /api/cases/{uuid}/jury/invite — owner/admin only; works on any jury
274
+ // type. An invite recruits, it never restricts public participation. Unknown
275
+ // names don't fail the batch: each invitee is resolved independently and
276
+ // reported back in `results`/`summary` as invited/duplicate/not_found. A
277
+ // tribeId recruits the whole tribe (members + chieftain); at least one of the
278
+ // two is required (the backend 400s `no_invitees` otherwise).
279
+ const body = {};
280
+ if (invitees !== undefined && invitees.length > 0) {
281
+ body.invitees = invitees;
282
+ }
283
+ if (tribeId !== undefined) {
284
+ body.tribeId = tribeId;
285
+ }
286
+ const response = await this.client.post(`/cases/${caseId}/jury/invite`, body);
287
+ return response.data;
288
+ }
289
+ // Evidence endpoints
290
+ async getCaseEvidence(caseId) {
291
+ const response = await this.client.get(`/cases/${caseId}/evidence`);
292
+ return response.data;
293
+ }
294
+ // Comment & evidence-mark endpoints. Evidence is marked, not submitted:
295
+ // post a comment, then the case owner/jury can mark it (or a case file).
296
+ async postComment(caseId, text) {
297
+ const response = await this.client.post(`/cases/${caseId}/comments`, { text });
298
+ return response.data;
299
+ }
300
+ async listComments(caseId) {
301
+ const response = await this.client.get(`/cases/${caseId}/comments`);
302
+ return response.data;
303
+ }
304
+ async markEvidence(kind, id) {
305
+ const path = kind === 'comment' ? `/comments/${id}/mark` : `/case-files/${id}/mark`;
306
+ const response = await this.client.post(path);
307
+ return response.data;
308
+ }
309
+ async unmarkEvidence(kind, id) {
310
+ const path = kind === 'comment' ? `/comments/${id}/mark` : `/case-files/${id}/mark`;
311
+ const response = await this.client.delete(path);
312
+ return response.data;
313
+ }
314
+ async rateEvidence(evidenceId, rating, sideId) {
315
+ // rating is a domain value: 1 (up) / 0 (irrelevant) / -1 (down).
316
+ // Served by POST /api/evidence/{id}/rate.
317
+ const body = { rating };
318
+ if (sideId) {
319
+ body.sideId = sideId;
320
+ }
321
+ const response = await this.client.post(`/evidence/${evidenceId}/rate`, body);
322
+ return response.data;
323
+ }
324
+ }
325
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAEzD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAGjC;IACA;IAHT,YACE,OAAe,EACR,UAAmB,EACnB,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAS;QACnB,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAa,EAAE,QAAgB;IACpE,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAA2B,CAAC;QACtC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpG,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC;QACrE,IAAI,OAAO,CAAC,CAAC,mBAAmB,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC/G,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU;iBACrB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;iBACnF,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC;QAClE,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACrG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC;QACxE,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAsED,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAgB;IACtB,WAAW,CAAqB;IAChC,UAAU,CAAS;IAE3B,YAAY,MAAgC;QAC1C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,WAAW,GAAuC;YACtD,OAAO;YACP,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,QAAQ,EAAE,kBAAkB;aAC7B;YACD,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,oEAAoE;QACpE,6EAA6E;QAC7E,+CAA+C;QAC/C,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAExC,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YACrD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;YACxE,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAiB,EAAE,EAAE;YACpB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1C,MAAM,IAAI,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC,CACF,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,WAAW,CAAC,MAOjB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,OAA6D,EAAE;QAE/D,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,MAAM,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,OAAO,QAAQ,CAAC,IAAwB,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAgBhB;QACC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACrC,6EAA6E;QAC7E,gFAAgF;QAChF,4EAA4E;QAC5E,+BAA+B;QAC/B,6EAA6E;QAC7E,2EAA2E;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAClH,MAAM,IAAI,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QACzG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,iFAAiF;QACjF,+EAA+E;QAC/E,qFAAqF;QACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,QAAQ,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,QAAgB;QACjD,oFAAoF;QACpF,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,OAAgB;QAC7D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjC,wEAAwE;QACxE,6BAA6B;QAC7B,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,UAAU,MAAM,OAAO,EAAE,MAAM,EAAE;YACzF,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;SACjE,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,4EAA4E;QAC5E,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,UAAU,MAAM,YAAY,EAAE,SAAS,CAAC,CAAC;QACnG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,MAAc;QAC7C,4EAA4E;QAC5E,yDAAyD;QACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,UAAU,MAAM,SAAS,MAAM,EAAE,CAAC,CAAC;QAC/F,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,iFAAiF;QACjF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,MAAM,QAAQ,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,UAAU,CAAC,MAIhB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,MAAyC;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,OAAO,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,OAAO,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,QAAQ,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAKjB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,QAAkB;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,IAAuC;QACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,iBAAiB;QACrB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,QAAmB,EAAE,OAAgB;QACtE,2EAA2E;QAC3E,6EAA6E;QAC7E,yEAAyE;QACzE,yEAAyE;QACzE,8EAA8E;QAC9E,8DAA8D;QAC9D,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,cAAc,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,MAAM,WAAW,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,IAAY;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,MAAM,WAAW,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAwB,EAAE,EAAU;QACrD,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC;QACpF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAwB,EAAE,EAAU;QACvD,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC;QACpF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,MAAc,EAAE,MAAe;QACpE,iEAAiE;QACjE,0CAA0C;QAC1C,MAAM,IAAI,GAAwC,EAAE,MAAM,EAAE,CAAC;QAC7D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { TribeunalAPIClient } from './api-client.js';
2
+ /**
3
+ * Build a client from `process.env` for the stdio / persona transport.
4
+ *
5
+ * Node-only: this module reads `process.env` and is therefore imported solely by
6
+ * the stdio entry point. The Cloudflare worker NEVER imports it — the worker
7
+ * constructs its client directly with the logged-in user's Auth0 access token,
8
+ * which keeps Node globals (`process`) out of the worker's type-check/bundle.
9
+ *
10
+ * Preserves the historical environment-variable contract so the local/persona
11
+ * path keeps working unchanged:
12
+ * - TRIBEUNAL_API_BASE_URL (default: https://tribeunal.test/api)
13
+ * - TRIBEUNAL_API_KEY (sent as a Bearer token — legacy per-persona key)
14
+ * - TRIBEUNAL_VERIFY_SSL ('false' disables TLS verification)
15
+ */
16
+ export declare function createApiClientFromEnv(): TribeunalAPIClient;
17
+ //# sourceMappingURL=from-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-env.d.ts","sourceRoot":"","sources":["../../src/client/from-env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,CAO3D"}
@@ -0,0 +1,25 @@
1
+ import https from 'node:https';
2
+ import { TribeunalAPIClient } from './api-client.js';
3
+ /**
4
+ * Build a client from `process.env` for the stdio / persona transport.
5
+ *
6
+ * Node-only: this module reads `process.env` and is therefore imported solely by
7
+ * the stdio entry point. The Cloudflare worker NEVER imports it — the worker
8
+ * constructs its client directly with the logged-in user's Auth0 access token,
9
+ * which keeps Node globals (`process`) out of the worker's type-check/bundle.
10
+ *
11
+ * Preserves the historical environment-variable contract so the local/persona
12
+ * path keeps working unchanged:
13
+ * - TRIBEUNAL_API_BASE_URL (default: https://tribeunal.test/api)
14
+ * - TRIBEUNAL_API_KEY (sent as a Bearer token — legacy per-persona key)
15
+ * - TRIBEUNAL_VERIFY_SSL ('false' disables TLS verification)
16
+ */
17
+ export function createApiClientFromEnv() {
18
+ const verifySsl = process.env.TRIBEUNAL_VERIFY_SSL !== 'false';
19
+ return new TribeunalAPIClient({
20
+ baseURL: process.env.TRIBEUNAL_API_BASE_URL || 'https://tribeunal.test/api',
21
+ bearerToken: process.env.TRIBEUNAL_API_KEY,
22
+ httpsAgent: new https.Agent({ rejectUnauthorized: verifySsl }),
23
+ });
24
+ }
25
+ //# sourceMappingURL=from-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-env.js","sourceRoot":"","sources":["../../src/client/from-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,OAAO,CAAC;IAC/D,OAAO,IAAI,kBAAkB,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,4BAA4B;QAC3E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC1C,UAAU,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Server-level guidance returned in the `initialize` result.
3
+ *
4
+ * The MCP spec lets a server ship a short prose brief that clients place in
5
+ * the model's context before any tool is called. This is the only place where
6
+ * cross-tool facts fit: a tool `description` is per-tool and cannot say "check
7
+ * timeLeft, not state" or "verdicts are asynchronous".
8
+ *
9
+ * Deliberately tiny. Anything longer than a handful of lines belongs in the
10
+ * Agent Skills shipped from `skills/` — this string's job is to name the facts
11
+ * that make an agent fail silently, and then point at them.
12
+ */
13
+ export declare const SERVER_INSTRUCTIONS = "Tribeunal turns a question into a jury's verdict. Facts that span every tool here:\n\n- Case, side, tribe and webhook ids are UUIDs. A numeric id or a slug will not resolve \u2014 look a case up with tribeunal_search_cases.\n- A case stays \"open\" past its deadline until the close job runs. Check timeLeft before voting, not state.\n- Verdicts are asynchronous: tribeunal_close_case answers decision_pending, and tribeunal_await_verdict long-polls for the ruling.\n- A private case's url 404s for everyone but its owner and admins. Share the shareUrl it answers with instead.\n- Workflows, settings recipes and error handling live in the Tribeunal Agent Skills \u2014 start with using-tribeunal.\n In Claude Code: /plugin marketplace add tribeunal/mcp-server then /plugin install tribeunal";
14
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/core/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,6xBAO8D,CAAC"}