@ceki/n8n-nodes-ceki 0.2.30 → 0.2.31

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.
@@ -1,415 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // nodes/CekiContract/CekiContract.node.ts
21
- var CekiContract_node_exports = {};
22
- __export(CekiContract_node_exports, {
23
- CekiContract: () => CekiContract
24
- });
25
- module.exports = __toCommonJS(CekiContract_node_exports);
26
-
27
- // lib/contract-client.ts
28
- function cleanArgs(o) {
29
- const out = { ...o };
30
- for (const k of Object.keys(out)) {
31
- if (out[k] === void 0 || out[k] === null) delete out[k];
32
- }
33
- return out;
34
- }
35
- function parseBenefitable(value) {
36
- if (!value) return null;
37
- const m = /^(agent|user):(\d+)$/.exec(value);
38
- if (!m) return null;
39
- return { type: m[1], value: Number(m[2]) };
40
- }
41
- function parseParticipant(value, roleId) {
42
- const b = parseBenefitable(value);
43
- if (!b) return null;
44
- return { participable_id: b.value, type: b.type, role_id: roleId };
45
- }
46
- function deriveLabel(desc) {
47
- if (!desc) return "";
48
- const line = desc.split("\n")[0].trim();
49
- return line.length > 60 ? line.slice(0, 57) + "..." : line;
50
- }
51
- var ROLE_REVIEWER = 5;
52
- var ROLE_QA = 6;
53
- var ContractClient = class {
54
- constructor(token, endpoint, apiBase) {
55
- this._endpoint = (endpoint ?? "https://api.ceki.me/mcp").replace(/\/+$/, "");
56
- this._apiBase = (apiBase ?? "https://api.ceki.me").replace(/\/+$/, "");
57
- this._token = token;
58
- }
59
- _headers() {
60
- return {
61
- "Content-Type": "application/json",
62
- Accept: "application/json",
63
- Authorization: `Bearer ${this._token}`
64
- };
65
- }
66
- async _rpc(method, params) {
67
- const body = JSON.stringify({ jsonrpc: "2.0", id: Date.now(), method, params });
68
- const resp = await fetch(this._endpoint, {
69
- method: "POST",
70
- headers: this._headers(),
71
- body
72
- });
73
- if (!resp.ok) {
74
- const text = await resp.text().catch(() => "");
75
- throw new Error(`HTTP ${resp.status}: ${text.slice(0, 400)}`);
76
- }
77
- return resp.json();
78
- }
79
- async _call(tool, args) {
80
- const body = await this._rpc("tools/call", { name: tool, arguments: args ?? {} });
81
- if (body.error) throw new Error(`${tool} \u2192 ${JSON.stringify(body.error).slice(0, 400)}`);
82
- const result = body.result ?? {};
83
- const content = result.content;
84
- if (Array.isArray(content)) {
85
- const texts = content.filter((c) => c.type === "text").map((c) => String(c.text ?? ""));
86
- const joined = texts.join("\n");
87
- try {
88
- return JSON.parse(joined);
89
- } catch {
90
- return joined;
91
- }
92
- }
93
- if (result.structuredContent !== void 0) return result.structuredContent;
94
- return result;
95
- }
96
- // ── domain methods ─────────────────────────────────────────
97
- async listContracts() {
98
- return this._call("list-contracts");
99
- }
100
- async members(contractId) {
101
- return this._call("contract-members", { contract_id: contractId });
102
- }
103
- async tasks(contractId) {
104
- return this._call("contract-tasks", { contract_id: contractId });
105
- }
106
- async myEvents() {
107
- return this._call("get-my-events");
108
- }
109
- async task(eventId) {
110
- return this._call("get-event", { event_id: eventId });
111
- }
112
- async create(contractId, opts) {
113
- const args = cleanArgs({
114
- contract_id: contractId,
115
- label: opts.label,
116
- type_id: opts.type,
117
- status_id: opts.status,
118
- description: opts.description,
119
- benefitable: opts.benefitable ? parseBenefitable(opts.benefitable) : void 0
120
- });
121
- const users = [];
122
- const rev = parseParticipant(opts.reviewer, ROLE_REVIEWER);
123
- if (rev) users.push(rev);
124
- const qa = parseParticipant(opts.qa, ROLE_QA);
125
- if (qa) users.push(qa);
126
- if (users.length) args.users = users;
127
- return this._call("create-contract-event", args);
128
- }
129
- async propose(eventId, opts) {
130
- return this._call("propose-correction", cleanArgs({
131
- event_id: eventId,
132
- status_id: opts.status,
133
- label: opts.label,
134
- description: opts.description,
135
- benefitable: opts.benefitable ? parseBenefitable(opts.benefitable) : void 0
136
- }));
137
- }
138
- async comment(eventId, opts) {
139
- return this._call("comment", cleanArgs({
140
- event_id: eventId,
141
- label: opts?.label,
142
- description: opts?.description
143
- }));
144
- }
145
- async progress(eventId, opts) {
146
- let statusResult = null;
147
- if (opts.status != null) {
148
- statusResult = await this.propose(eventId, { status: opts.status });
149
- }
150
- const commentResult = await this.comment(eventId, { label: deriveLabel(opts.desc), description: opts.desc });
151
- return { status_correction: statusResult, comment: commentResult };
152
- }
153
- async callHuman(eventId, kind, desc) {
154
- if (!["input", "review", "stuck"].includes(kind)) throw new Error(`kind must be input|review|stuck, got ${kind}`);
155
- return this._call("call-human", { event_id: eventId, kind, desc });
156
- }
157
- /** GET /agent/polling. Returns [] on 429. */
158
- async poll() {
159
- const resp = await fetch(`${this._apiBase}/agent/polling`, {
160
- headers: { Accept: "application/json", Authorization: `Bearer ${this._token}` }
161
- });
162
- if (resp.status === 429) return [];
163
- if (!resp.ok) {
164
- const text = await resp.text().catch(() => "");
165
- throw new Error(`poll HTTP ${resp.status}: ${text.slice(0, 300)}`);
166
- }
167
- const body = await resp.json();
168
- if (Array.isArray(body)) return body;
169
- if (body && typeof body === "object") {
170
- for (const k of ["notifications", "data", "items"]) {
171
- if (Array.isArray(body[k])) return body[k];
172
- }
173
- }
174
- return [];
175
- }
176
- };
177
-
178
- // nodes/CekiContract/CekiContract.node.ts
179
- var STATUS_OPTIONS = [
180
- { name: "100 \xB7 Backlog", value: 100 },
181
- { name: "200 \xB7 Hand (assigned)", value: 200 },
182
- { name: "222 \xB7 Hand done", value: 222 },
183
- { name: "300 \xB7 QA", value: 300 },
184
- { name: "350 \xB7 QA done", value: 350 },
185
- { name: "499 \xB7 Reviewer", value: 499 }
186
- ];
187
- var CekiContract = class {
188
- constructor() {
189
- this.description = {
190
- displayName: "Ceki Contract",
191
- name: "cekiContract",
192
- icon: "file:ceki.png",
193
- group: ["transform"],
194
- version: 1,
195
- subtitle: '={{ "Contract: " + $operation }}',
196
- description: "Work with Ceki contract tasks: list, create, assign, update status, comment, report progress, escalate to a human, and poll",
197
- defaults: { name: "Ceki Contract" },
198
- inputs: ["main"],
199
- outputs: ["main"],
200
- credentials: [{ name: "cekiApi", required: true }],
201
- properties: [
202
- {
203
- displayName: "Operation",
204
- name: "operation",
205
- type: "options",
206
- default: "myEvents",
207
- options: [
208
- { name: "List My Contracts", value: "listContracts" },
209
- { name: "List Tasks in Contract", value: "listTasks" },
210
- { name: "Get Task", value: "getTask" },
211
- { name: "My Assigned Events", value: "myEvents" },
212
- { name: "Create Task", value: "createTask" },
213
- { name: "Assign Executor", value: "assign" },
214
- { name: "Update Status", value: "setStatus" },
215
- { name: "Comment", value: "comment" },
216
- { name: "Progress Report", value: "progress" },
217
- { name: "Call Human", value: "callHuman" },
218
- { name: "Poll Notifications", value: "poll" }
219
- ]
220
- },
221
- // --- contractId / eventId ---
222
- {
223
- displayName: "Contract ID",
224
- name: "contractId",
225
- type: "number",
226
- default: 0,
227
- description: "ceki contract id",
228
- displayOptions: { show: { operation: ["listTasks", "createTask"] } }
229
- },
230
- {
231
- displayName: "Event ID",
232
- name: "eventId",
233
- type: "number",
234
- default: 0,
235
- description: "Task / event id (KalEvent)",
236
- displayOptions: {
237
- show: { operation: ["getTask", "assign", "setStatus", "comment", "progress", "callHuman"] }
238
- }
239
- },
240
- // --- createTask fields ---
241
- {
242
- displayName: "Label",
243
- name: "label",
244
- type: "string",
245
- default: "",
246
- required: true,
247
- displayOptions: { show: { operation: ["createTask"] } }
248
- },
249
- {
250
- displayName: "Description",
251
- name: "description",
252
- type: "string",
253
- typeOptions: { rows: 4 },
254
- default: "",
255
- displayOptions: { show: { operation: ["createTask", "comment"] } }
256
- },
257
- {
258
- displayName: "Executor (benefitable)",
259
- name: "benefitableType",
260
- type: "options",
261
- default: "agent",
262
- options: [
263
- { name: "Agent", value: "agent" },
264
- { name: "User (human)", value: "user" }
265
- ],
266
- displayOptions: { show: { operation: ["createTask", "assign"] } }
267
- },
268
- {
269
- displayName: "Executor ID",
270
- name: "benefitableValue",
271
- type: "number",
272
- default: 0,
273
- description: "Agent ID or user ID of the executor",
274
- displayOptions: { show: { operation: ["createTask", "assign"] } }
275
- },
276
- // --- status ---
277
- {
278
- displayName: "Status",
279
- name: "status",
280
- type: "options",
281
- options: STATUS_OPTIONS,
282
- default: 200,
283
- displayOptions: { show: { operation: ["createTask", "setStatus", "progress"] } }
284
- },
285
- // --- progress desc ---
286
- {
287
- displayName: "Progress Description",
288
- name: "progressDesc",
289
- type: "string",
290
- typeOptions: { rows: 4 },
291
- default: "",
292
- required: true,
293
- description: "Body of the progress comment (does not overwrite the task spec)",
294
- displayOptions: { show: { operation: ["progress"] } }
295
- },
296
- // --- call human (escalate) ---
297
- {
298
- displayName: "Call Kind",
299
- name: "callKind",
300
- type: "options",
301
- default: "review",
302
- options: [
303
- { name: "Input (need clarification)", value: "input" },
304
- { name: "Review (done, take a look)", value: "review" },
305
- { name: "Stuck (blocked)", value: "stuck" }
306
- ],
307
- description: "Type of escalation to a human (the call-human action)",
308
- displayOptions: { show: { operation: ["callHuman"] } }
309
- },
310
- {
311
- displayName: "Message",
312
- name: "callDesc",
313
- type: "string",
314
- typeOptions: { rows: 4 },
315
- default: "",
316
- required: true,
317
- description: "What to tell the human \u2014 context, question, or what was done",
318
- displayOptions: { show: { operation: ["callHuman"] } }
319
- }
320
- ]
321
- };
322
- }
323
- async execute() {
324
- const items = this.getInputData();
325
- const out = [];
326
- const creds = await this.getCredentials("cekiApi");
327
- const token = creds.token;
328
- const client = new ContractClient(token);
329
- for (let i = 0; i < items.length; i++) {
330
- const op = this.getNodeParameter("operation", i);
331
- let result;
332
- switch (op) {
333
- case "listContracts":
334
- result = await client.listContracts();
335
- break;
336
- case "listTasks": {
337
- const contractId = this.getNodeParameter("contractId", i);
338
- result = await client.tasks(contractId);
339
- break;
340
- }
341
- case "getTask": {
342
- const eventId = this.getNodeParameter("eventId", i);
343
- result = await client.task(eventId);
344
- break;
345
- }
346
- case "myEvents":
347
- result = await client.myEvents();
348
- break;
349
- case "createTask": {
350
- const contractId = this.getNodeParameter("contractId", i);
351
- const label = this.getNodeParameter("label", i);
352
- const description = this.getNodeParameter("description", i) || "";
353
- const status = this.getNodeParameter("status", i);
354
- const bType = this.getNodeParameter("benefitableType", i);
355
- const bValue = this.getNodeParameter("benefitableValue", i);
356
- result = await client.create(contractId, {
357
- label,
358
- description: description || void 0,
359
- status,
360
- benefitable: bValue ? `${bType}:${bValue}` : void 0
361
- });
362
- break;
363
- }
364
- case "assign": {
365
- const eventId = this.getNodeParameter("eventId", i);
366
- const bType = this.getNodeParameter("benefitableType", i);
367
- const bValue = this.getNodeParameter("benefitableValue", i);
368
- if (!bValue) throw new Error("Executor ID is required for Assign");
369
- result = await client.propose(eventId, { benefitable: `${bType}:${bValue}` });
370
- break;
371
- }
372
- case "setStatus": {
373
- const eventId = this.getNodeParameter("eventId", i);
374
- const status = this.getNodeParameter("status", i);
375
- result = await client.propose(eventId, { status });
376
- break;
377
- }
378
- case "comment": {
379
- const eventId = this.getNodeParameter("eventId", i);
380
- const description = this.getNodeParameter("description", i) || "";
381
- if (!description) throw new Error("Comment text is required");
382
- result = await client.comment(eventId, { description });
383
- break;
384
- }
385
- case "progress": {
386
- const eventId = this.getNodeParameter("eventId", i);
387
- const status = this.getNodeParameter("status", i);
388
- const desc = this.getNodeParameter("progressDesc", i);
389
- result = await client.progress(eventId, { status, desc });
390
- break;
391
- }
392
- case "callHuman": {
393
- const eventId = this.getNodeParameter("eventId", i);
394
- const kind = this.getNodeParameter("callKind", i);
395
- const desc = this.getNodeParameter("callDesc", i);
396
- if (!desc) throw new Error("Message is required for Call Human");
397
- result = await client.callHuman(eventId, kind, desc);
398
- break;
399
- }
400
- case "poll":
401
- result = await client.poll();
402
- break;
403
- default:
404
- throw new Error(`Unknown operation: ${op}`);
405
- }
406
- out.push({ json: { op, result } });
407
- }
408
- return [out];
409
- }
410
- };
411
- // Annotate the CommonJS export names for ESM import in node:
412
- 0 && (module.exports = {
413
- CekiContract
414
- });
415
- //# sourceMappingURL=CekiContract.node.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../nodes/CekiContract/CekiContract.node.ts", "../../../lib/contract-client.ts"],
4
- "sourcesContent": ["import type {\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { ContractClient } from '../../lib/contract-client';\n\nconst STATUS_OPTIONS = [\n\t{ name: '100 \u00B7 Backlog', value: 100 },\n\t{ name: '200 \u00B7 Hand (assigned)', value: 200 },\n\t{ name: '222 \u00B7 Hand done', value: 222 },\n\t{ name: '300 \u00B7 QA', value: 300 },\n\t{ name: '350 \u00B7 QA done', value: 350 },\n\t{ name: '499 \u00B7 Reviewer', value: 499 },\n];\n\n/**\n * Ceki Contract \u2014 operation node for the Ceki contract system (tasks/events).\n * Uses native fetch() \u2014 zero external runtime deps.\n */\nexport class CekiContract implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Ceki Contract',\n\t\tname: 'cekiContract',\n\t\ticon: 'file:ceki.png',\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tsubtitle: '={{ \"Contract: \" + $operation }}',\n\t\tdescription: 'Work with Ceki contract tasks: list, create, assign, update status, comment, report progress, escalate to a human, and poll',\n\t\tdefaults: { name: 'Ceki Contract' },\n\t\tinputs: ['main'],\n\t\toutputs: ['main'],\n\t\tcredentials: [{ name: 'cekiApi', required: true }],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: 'myEvents',\n\t\t\t\toptions: [\n\t\t\t\t\t{ name: 'List My Contracts', value: 'listContracts' },\n\t\t\t\t\t{ name: 'List Tasks in Contract', value: 'listTasks' },\n\t\t\t\t\t{ name: 'Get Task', value: 'getTask' },\n\t\t\t\t\t{ name: 'My Assigned Events', value: 'myEvents' },\n\t\t\t\t\t{ name: 'Create Task', value: 'createTask' },\n\t\t\t\t\t{ name: 'Assign Executor', value: 'assign' },\n\t\t\t\t\t{ name: 'Update Status', value: 'setStatus' },\n\t\t\t\t\t{ name: 'Comment', value: 'comment' },\n\t\t\t\t\t{ name: 'Progress Report', value: 'progress' },\n\t\t\t\t\t{ name: 'Call Human', value: 'callHuman' },\n\t\t\t\t\t{ name: 'Poll Notifications', value: 'poll' },\n\t\t\t\t],\n\t\t\t},\n\t\t\t// --- contractId / eventId ---\n\t\t\t{\n\t\t\t\tdisplayName: 'Contract ID',\n\t\t\t\tname: 'contractId',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 0,\n\t\t\t\tdescription: 'ceki contract id',\n\t\t\t\tdisplayOptions: { show: { operation: ['listTasks', 'createTask'] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Event ID',\n\t\t\t\tname: 'eventId',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 0,\n\t\t\t\tdescription: 'Task / event id (KalEvent)',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: { operation: ['getTask', 'assign', 'setStatus', 'comment', 'progress', 'callHuman'] },\n\t\t\t\t},\n\t\t\t},\n\t\t\t// --- createTask fields ---\n\t\t\t{\n\t\t\t\tdisplayName: 'Label',\n\t\t\t\tname: 'label',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\trequired: true,\n\t\t\t\tdisplayOptions: { show: { operation: ['createTask'] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Description',\n\t\t\t\tname: 'description',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: { rows: 4 },\n\t\t\t\tdefault: '',\n\t\t\t\tdisplayOptions: { show: { operation: ['createTask', 'comment'] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Executor (benefitable)',\n\t\t\t\tname: 'benefitableType',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: 'agent',\n\t\t\t\toptions: [\n\t\t\t\t\t{ name: 'Agent', value: 'agent' },\n\t\t\t\t\t{ name: 'User (human)', value: 'user' },\n\t\t\t\t],\n\t\t\t\tdisplayOptions: { show: { operation: ['createTask', 'assign'] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Executor ID',\n\t\t\t\tname: 'benefitableValue',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 0,\n\t\t\t\tdescription: 'Agent ID or user ID of the executor',\n\t\t\t\tdisplayOptions: { show: { operation: ['createTask', 'assign'] } },\n\t\t\t},\n\t\t\t// --- status ---\n\t\t\t{\n\t\t\t\tdisplayName: 'Status',\n\t\t\t\tname: 'status',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: STATUS_OPTIONS,\n\t\t\t\tdefault: 200,\n\t\t\t\tdisplayOptions: { show: { operation: ['createTask', 'setStatus', 'progress'] } },\n\t\t\t},\n\t\t\t// --- progress desc ---\n\t\t\t{\n\t\t\t\tdisplayName: 'Progress Description',\n\t\t\t\tname: 'progressDesc',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: { rows: 4 },\n\t\t\t\tdefault: '',\n\t\t\t\trequired: true,\n\t\t\t\tdescription: 'Body of the progress comment (does not overwrite the task spec)',\n\t\t\t\tdisplayOptions: { show: { operation: ['progress'] } },\n\t\t\t},\n\t\t\t// --- call human (escalate) ---\n\t\t\t{\n\t\t\t\tdisplayName: 'Call Kind',\n\t\t\t\tname: 'callKind',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: 'review',\n\t\t\t\toptions: [\n\t\t\t\t\t{ name: 'Input (need clarification)', value: 'input' },\n\t\t\t\t\t{ name: 'Review (done, take a look)', value: 'review' },\n\t\t\t\t\t{ name: 'Stuck (blocked)', value: 'stuck' },\n\t\t\t\t],\n\t\t\t\tdescription: 'Type of escalation to a human (the call-human action)',\n\t\t\t\tdisplayOptions: { show: { operation: ['callHuman'] } },\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Message',\n\t\t\t\tname: 'callDesc',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: { rows: 4 },\n\t\t\t\tdefault: '',\n\t\t\t\trequired: true,\n\t\t\t\tdescription: 'What to tell the human \u2014 context, question, or what was done',\n\t\t\t\tdisplayOptions: { show: { operation: ['callHuman'] } },\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst out: INodeExecutionData[] = [];\n\t\tconst creds = await this.getCredentials('cekiApi');\n\t\tconst token = creds.token as string;\n\t\tconst client = new ContractClient(token);\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst op = this.getNodeParameter('operation', i) as string;\n\t\t\tlet result: unknown;\n\n\t\t\tswitch (op) {\n\t\t\t\tcase 'listContracts':\n\t\t\t\t\tresult = await client.listContracts();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'listTasks': {\n\t\t\t\t\tconst contractId = this.getNodeParameter('contractId', i) as number;\n\t\t\t\t\tresult = await client.tasks(contractId);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'getTask': {\n\t\t\t\t\tconst eventId = this.getNodeParameter('eventId', i) as number;\n\t\t\t\t\tresult = await client.task(eventId);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'myEvents':\n\t\t\t\t\tresult = await client.myEvents();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'createTask': {\n\t\t\t\t\tconst contractId = this.getNodeParameter('contractId', i) as number;\n\t\t\t\t\tconst label = this.getNodeParameter('label', i) as string;\n\t\t\t\t\tconst description = (this.getNodeParameter('description', i) as string) || '';\n\t\t\t\t\tconst status = this.getNodeParameter('status', i) as number;\n\t\t\t\t\tconst bType = this.getNodeParameter('benefitableType', i) as string;\n\t\t\t\t\tconst bValue = this.getNodeParameter('benefitableValue', i) as number;\n\t\t\t\t\tresult = await client.create(contractId, {\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\tdescription: description || undefined,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tbenefitable: bValue ? `${bType}:${bValue}` : undefined,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'assign': {\n\t\t\t\t\tconst eventId = this.getNodeParameter('eventId', i) as number;\n\t\t\t\t\tconst bType = this.getNodeParameter('benefitableType', i) as string;\n\t\t\t\t\tconst bValue = this.getNodeParameter('benefitableValue', i) as number;\n\t\t\t\t\tif (!bValue) throw new Error('Executor ID is required for Assign');\n\t\t\t\t\tresult = await client.propose(eventId, { benefitable: `${bType}:${bValue}` });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'setStatus': {\n\t\t\t\t\tconst eventId = this.getNodeParameter('eventId', i) as number;\n\t\t\t\t\tconst status = this.getNodeParameter('status', i) as number;\n\t\t\t\t\tresult = await client.propose(eventId, { status });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'comment': {\n\t\t\t\t\tconst eventId = this.getNodeParameter('eventId', i) as number;\n\t\t\t\t\tconst description = (this.getNodeParameter('description', i) as string) || '';\n\t\t\t\t\tif (!description) throw new Error('Comment text is required');\n\t\t\t\t\tresult = await client.comment(eventId, { description });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'progress': {\n\t\t\t\t\tconst eventId = this.getNodeParameter('eventId', i) as number;\n\t\t\t\t\tconst status = this.getNodeParameter('status', i) as number;\n\t\t\t\t\tconst desc = this.getNodeParameter('progressDesc', i) as string;\n\t\t\t\t\tresult = await client.progress(eventId, { status, desc });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'callHuman': {\n\t\t\t\t\tconst eventId = this.getNodeParameter('eventId', i) as number;\n\t\t\t\t\tconst kind = this.getNodeParameter('callKind', i) as 'input' | 'review' | 'stuck';\n\t\t\t\t\tconst desc = this.getNodeParameter('callDesc', i) as string;\n\t\t\t\t\tif (!desc) throw new Error('Message is required for Call Human');\n\t\t\t\t\tresult = await client.callHuman(eventId, kind, desc);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'poll':\n\t\t\t\t\tresult = await client.poll();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown operation: ${op}`);\n\t\t\t}\n\n\t\t\tout.push({ json: { op, result: result as any } });\n\t\t}\n\t\treturn [out];\n\t}\n}\n", "/**\n * Minimal Ceki contract client \u2014 uses only native fetch (Node 22 global).\n * Zero npm imports (no ws, no axios, no node built-in modules beyond globals).\n *\n * Communicates with Ceki's MCP endpoint via JSON-RPC 2.0 over HTTP POST.\n */\n\n// \u2500\u2500 helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction cleanArgs<T extends Record<string, unknown>>(o: T): Partial<T> {\n\tconst out = { ...o };\n\tfor (const k of Object.keys(out)) {\n\t\tif ((out as any)[k] === undefined || (out as any)[k] === null) delete (out as any)[k];\n\t}\n\treturn out;\n}\n\nfunction parseBenefitable(value: string | null | undefined): { type: string; value: number } | null {\n\tif (!value) return null;\n\tconst m = /^(agent|user):(\\d+)$/.exec(value);\n\tif (!m) return null;\n\treturn { type: m[1], value: Number(m[2]) };\n}\n\ninterface ParticipantSpec {\n\tparticipable_id: number;\n\ttype: string;\n\trole_id: number;\n}\n\nfunction parseParticipant(value: string | null | undefined, roleId: number): ParticipantSpec | null {\n\tconst b = parseBenefitable(value);\n\tif (!b) return null;\n\treturn { participable_id: b.value, type: b.type, role_id: roleId };\n}\n\nfunction deriveLabel(desc: string | null | undefined): string {\n\tif (!desc) return '';\n\tconst line = desc.split('\\n')[0].trim();\n\treturn line.length > 60 ? line.slice(0, 57) + '...' : line;\n}\n\nconst ROLE_REVIEWER = 5;\nconst ROLE_QA = 6;\n\n// \u2500\u2500 types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface CreateOptions {\n\tlabel: string;\n\ttype?: number;\n\tstatus?: number;\n\tdescription?: string;\n\tbenefitable?: string;\n\treviewer?: string;\n\tqa?: string;\n}\n\nexport interface ProposeOptions {\n\tstatus?: number;\n\tlabel?: string;\n\tdescription?: string;\n\tbenefitable?: string;\n}\n\nexport interface CommentOptions {\n\tlabel?: string;\n\tdescription?: string;\n}\n\nexport interface ProgressOptions {\n\tstatus?: number;\n\tdesc: string;\n}\n\n// \u2500\u2500 client \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport class ContractClient {\n\tprivate _endpoint: string;\n\tprivate _apiBase: string;\n\tprivate _token: string;\n\n\tconstructor(token: string, endpoint?: string, apiBase?: string) {\n\t\tthis._endpoint = (endpoint ?? 'https://api.ceki.me/mcp').replace(/\\/+$/, '');\n\t\tthis._apiBase = (apiBase ?? 'https://api.ceki.me').replace(/\\/+$/, '');\n\t\tthis._token = token;\n\t}\n\n\tprivate _headers(): Record<string, string> {\n\t\treturn {\n\t\t\t'Content-Type': 'application/json',\n\t\t\tAccept: 'application/json',\n\t\t\tAuthorization: `Bearer ${this._token}`,\n\t\t};\n\t}\n\n\tprivate async _rpc(method: string, params: Record<string, unknown>): Promise<any> {\n\t\tconst body = JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method, params });\n\t\tconst resp = await fetch(this._endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this._headers(),\n\t\t\tbody,\n\t\t});\n\t\tif (!resp.ok) {\n\t\t\tconst text = await resp.text().catch(() => '');\n\t\t\tthrow new Error(`HTTP ${resp.status}: ${text.slice(0, 400)}`);\n\t\t}\n\t\treturn resp.json();\n\t}\n\n\tprivate async _call(tool: string, args?: Record<string, unknown>): Promise<any> {\n\t\tconst body = await this._rpc('tools/call', { name: tool, arguments: args ?? {} });\n\t\tif (body.error) throw new Error(`${tool} \u2192 ${JSON.stringify(body.error).slice(0, 400)}`);\n\t\tconst result = body.result ?? {};\n\t\tconst content = result.content;\n\t\tif (Array.isArray(content)) {\n\t\t\tconst texts = content.filter((c: any) => c.type === 'text').map((c: any) => String(c.text ?? ''));\n\t\t\tconst joined = texts.join('\\n');\n\t\t\ttry { return JSON.parse(joined); } catch { return joined; }\n\t\t}\n\t\tif (result.structuredContent !== undefined) return result.structuredContent;\n\t\treturn result;\n\t}\n\n\t// \u2500\u2500 domain methods \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n\tasync listContracts(): Promise<any> {\n\t\treturn this._call('list-contracts');\n\t}\n\n\tasync members(contractId: number): Promise<any> {\n\t\treturn this._call('contract-members', { contract_id: contractId });\n\t}\n\n\tasync tasks(contractId: number): Promise<any> {\n\t\treturn this._call('contract-tasks', { contract_id: contractId });\n\t}\n\n\tasync myEvents(): Promise<any> {\n\t\treturn this._call('get-my-events');\n\t}\n\n\tasync task(eventId: number): Promise<any> {\n\t\treturn this._call('get-event', { event_id: eventId });\n\t}\n\n\tasync create(contractId: number, opts: CreateOptions): Promise<any> {\n\t\tconst args = cleanArgs({\n\t\t\tcontract_id: contractId,\n\t\t\tlabel: opts.label,\n\t\t\ttype_id: opts.type,\n\t\t\tstatus_id: opts.status,\n\t\t\tdescription: opts.description,\n\t\t\tbenefitable: opts.benefitable ? parseBenefitable(opts.benefitable) : undefined,\n\t\t});\n\t\tconst users: ParticipantSpec[] = [];\n\t\tconst rev = parseParticipant(opts.reviewer, ROLE_REVIEWER);\n\t\tif (rev) users.push(rev);\n\t\tconst qa = parseParticipant(opts.qa, ROLE_QA);\n\t\tif (qa) users.push(qa);\n\t\tif (users.length) (args as any).users = users;\n\t\treturn this._call('create-contract-event', args);\n\t}\n\n\tasync propose(eventId: number, opts: ProposeOptions): Promise<any> {\n\t\treturn this._call('propose-correction', cleanArgs({\n\t\t\tevent_id: eventId,\n\t\t\tstatus_id: opts.status,\n\t\t\tlabel: opts.label,\n\t\t\tdescription: opts.description,\n\t\t\tbenefitable: opts.benefitable ? parseBenefitable(opts.benefitable) : undefined,\n\t\t}));\n\t}\n\n\tasync comment(eventId: number, opts?: CommentOptions): Promise<any> {\n\t\treturn this._call('comment', cleanArgs({\n\t\t\tevent_id: eventId,\n\t\t\tlabel: opts?.label,\n\t\t\tdescription: opts?.description,\n\t\t}));\n\t}\n\n\tasync progress(eventId: number, opts: ProgressOptions): Promise<any> {\n\t\tlet statusResult: any = null;\n\t\tif (opts.status != null) {\n\t\t\tstatusResult = await this.propose(eventId, { status: opts.status });\n\t\t}\n\t\tconst commentResult = await this.comment(eventId, { label: deriveLabel(opts.desc), description: opts.desc });\n\t\treturn { status_correction: statusResult, comment: commentResult };\n\t}\n\n\tasync callHuman(eventId: number, kind: 'input' | 'review' | 'stuck', desc: string): Promise<any> {\n\t\tif (!['input', 'review', 'stuck'].includes(kind)) throw new Error(`kind must be input|review|stuck, got ${kind}`);\n\t\treturn this._call('call-human', { event_id: eventId, kind, desc });\n\t}\n\n\t/** GET /agent/polling. Returns [] on 429. */\n\tasync poll(): Promise<any[]> {\n\t\tconst resp = await fetch(`${this._apiBase}/agent/polling`, {\n\t\t\theaders: { Accept: 'application/json', Authorization: `Bearer ${this._token}` },\n\t\t});\n\t\tif (resp.status === 429) return [];\n\t\tif (!resp.ok) {\n\t\t\tconst text = await resp.text().catch(() => '');\n\t\t\tthrow new Error(`poll HTTP ${resp.status}: ${text.slice(0, 300)}`);\n\t\t}\n\t\tconst body = (await resp.json()) as Record<string, unknown>;\n\t\tif (Array.isArray(body)) return body;\n\t\tif (body && typeof body === 'object') {\n\t\t\tfor (const k of ['notifications', 'data', 'items']) {\n\t\t\t\tif (Array.isArray(body[k])) return body[k] as any[];\n\t\t\t}\n\t\t}\n\t\treturn [];\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
2
- <circle cx="12" cy="12" r="11" fill="#E36E4B"/>
3
- <circle cx="16.2" cy="8.3" r="8.5" fill="#1a1a2e"/>
4
- <g transform="translate(17, 7) rotate(45)">
5
- <line x1="0" y1="-5" x2="0" y2="6" stroke="#E36E4B" stroke-width="1.8" stroke-linecap="round"/>
6
- <line x1="-2.5" y1="0" x2="2.5" y2="0" stroke="#E36E4B" stroke-width="1.8" stroke-linecap="round"/>
7
- <line x1="-1.2" y1="-3.5" x2="1.2" y2="-3.5" stroke="#E36E4B" stroke-width="1.4" stroke-linecap="round"/>
8
- </g>
9
- </svg>
@@ -1,9 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
2
- <circle cx="12" cy="12" r="11" fill="#E36E4B"/>
3
- <circle cx="16.2" cy="8.3" r="8.5" fill="#fff"/>
4
- <g transform="translate(17, 7) rotate(45)">
5
- <line x1="0" y1="-5" x2="0" y2="6" stroke="#E36E4B" stroke-width="1.8" stroke-linecap="round"/>
6
- <line x1="-2.5" y1="0" x2="2.5" y2="0" stroke="#E36E4B" stroke-width="1.8" stroke-linecap="round"/>
7
- <line x1="-1.2" y1="-3.5" x2="1.2" y2="-3.5" stroke="#E36E4B" stroke-width="1.4" stroke-linecap="round"/>
8
- </g>
9
- </svg>
Binary file