paperclip-mcp 1.2.4 → 2.0.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 (111) hide show
  1. package/README.md +119 -620
  2. package/dist/client.d.ts +7 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +28 -0
  5. package/dist/client.js.map +1 -1
  6. package/dist/constants.d.ts +3 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +3 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/contract/harness.d.ts +34 -0
  11. package/dist/contract/harness.d.ts.map +1 -0
  12. package/dist/contract/harness.js +56 -0
  13. package/dist/contract/harness.js.map +1 -0
  14. package/dist/contract/seed.d.ts +37 -0
  15. package/dist/contract/seed.d.ts.map +1 -0
  16. package/dist/contract/seed.js +85 -0
  17. package/dist/contract/seed.js.map +1 -0
  18. package/dist/index.js +2 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/test/helpers/assert-result.d.ts +27 -0
  21. package/dist/test/helpers/assert-result.d.ts.map +1 -0
  22. package/dist/test/helpers/assert-result.js +61 -0
  23. package/dist/test/helpers/assert-result.js.map +1 -0
  24. package/dist/test/helpers/fixtures.d.ts +108 -0
  25. package/dist/test/helpers/fixtures.d.ts.map +1 -0
  26. package/dist/test/helpers/fixtures.js +187 -0
  27. package/dist/test/helpers/fixtures.js.map +1 -0
  28. package/dist/test/helpers/mock-client.d.ts +54 -0
  29. package/dist/test/helpers/mock-client.d.ts.map +1 -0
  30. package/dist/test/helpers/mock-client.js +66 -0
  31. package/dist/test/helpers/mock-client.js.map +1 -0
  32. package/dist/tools/activity.d.ts.map +1 -1
  33. package/dist/tools/activity.js +158 -83
  34. package/dist/tools/activity.js.map +1 -1
  35. package/dist/tools/agents.d.ts.map +1 -1
  36. package/dist/tools/agents.js +851 -173
  37. package/dist/tools/agents.js.map +1 -1
  38. package/dist/tools/approvals.d.ts.map +1 -1
  39. package/dist/tools/approvals.js +369 -143
  40. package/dist/tools/approvals.js.map +1 -1
  41. package/dist/tools/attachments.d.ts.map +1 -1
  42. package/dist/tools/attachments.js +139 -58
  43. package/dist/tools/attachments.js.map +1 -1
  44. package/dist/tools/comments.d.ts.map +1 -1
  45. package/dist/tools/comments.js +111 -59
  46. package/dist/tools/comments.js.map +1 -1
  47. package/dist/tools/company-import.d.ts +3 -0
  48. package/dist/tools/company-import.d.ts.map +1 -0
  49. package/dist/tools/company-import.js +309 -0
  50. package/dist/tools/company-import.js.map +1 -0
  51. package/dist/tools/company.d.ts +3 -0
  52. package/dist/tools/company.d.ts.map +1 -0
  53. package/dist/tools/company.js +265 -0
  54. package/dist/tools/company.js.map +1 -0
  55. package/dist/tools/dashboard.d.ts.map +1 -1
  56. package/dist/tools/dashboard.js +32 -11
  57. package/dist/tools/dashboard.js.map +1 -1
  58. package/dist/tools/documents.d.ts.map +1 -1
  59. package/dist/tools/documents.js +161 -75
  60. package/dist/tools/documents.js.map +1 -1
  61. package/dist/tools/feedback.d.ts +3 -0
  62. package/dist/tools/feedback.d.ts.map +1 -0
  63. package/dist/tools/feedback.js +281 -0
  64. package/dist/tools/feedback.js.map +1 -0
  65. package/dist/tools/format.d.ts +60 -0
  66. package/dist/tools/format.d.ts.map +1 -0
  67. package/dist/tools/format.js +278 -0
  68. package/dist/tools/format.js.map +1 -0
  69. package/dist/tools/goals.d.ts.map +1 -1
  70. package/dist/tools/goals.js +132 -57
  71. package/dist/tools/goals.js.map +1 -1
  72. package/dist/tools/identity.d.ts.map +1 -1
  73. package/dist/tools/identity.js +149 -45
  74. package/dist/tools/identity.js.map +1 -1
  75. package/dist/tools/index.d.ts +14 -3
  76. package/dist/tools/index.d.ts.map +1 -1
  77. package/dist/tools/index.js +40 -4
  78. package/dist/tools/index.js.map +1 -1
  79. package/dist/tools/issues.d.ts.map +1 -1
  80. package/dist/tools/issues.js +297 -177
  81. package/dist/tools/issues.js.map +1 -1
  82. package/dist/tools/labels.d.ts.map +1 -1
  83. package/dist/tools/labels.js +72 -26
  84. package/dist/tools/labels.js.map +1 -1
  85. package/dist/tools/plugins.d.ts +3 -0
  86. package/dist/tools/plugins.d.ts.map +1 -0
  87. package/dist/tools/plugins.js +285 -0
  88. package/dist/tools/plugins.js.map +1 -0
  89. package/dist/tools/projects.d.ts.map +1 -1
  90. package/dist/tools/projects.js +278 -102
  91. package/dist/tools/projects.js.map +1 -1
  92. package/dist/tools/routines.d.ts.map +1 -1
  93. package/dist/tools/routines.js +330 -168
  94. package/dist/tools/routines.js.map +1 -1
  95. package/dist/tools/runs.d.ts +3 -0
  96. package/dist/tools/runs.d.ts.map +1 -0
  97. package/dist/tools/runs.js +202 -0
  98. package/dist/tools/runs.js.map +1 -0
  99. package/dist/tools/secrets.d.ts +3 -0
  100. package/dist/tools/secrets.d.ts.map +1 -0
  101. package/dist/tools/secrets.js +230 -0
  102. package/dist/tools/secrets.js.map +1 -0
  103. package/dist/tools/validation.d.ts +84 -2
  104. package/dist/tools/validation.d.ts.map +1 -1
  105. package/dist/tools/validation.js +150 -16
  106. package/dist/tools/validation.js.map +1 -1
  107. package/dist/version.d.ts +6 -0
  108. package/dist/version.d.ts.map +1 -0
  109. package/dist/version.js +9 -0
  110. package/dist/version.js.map +1 -0
  111. package/package.json +10 -3
package/dist/client.d.ts CHANGED
@@ -3,6 +3,8 @@ export type FetchFn = (url: string, init: RequestInit) => Promise<Response>;
3
3
  export declare class PaperclipClient {
4
4
  private auth;
5
5
  private fetchFn;
6
+ private _timeoutMs;
7
+ get timeoutMs(): number;
6
8
  constructor(auth?: PaperclipAuth, fetchFn?: FetchFn);
7
9
  get companyId(): string;
8
10
  get agentId(): string;
@@ -13,6 +15,11 @@ export declare class PaperclipClient {
13
15
  put<T>(path: string, body: unknown, runId?: string): Promise<T>;
14
16
  postForm<T>(path: string, form: FormData, runId?: string): Promise<T>;
15
17
  delete<T>(path: string, runId?: string): Promise<T>;
18
+ getRaw(path: string): Promise<{
19
+ contentType: string;
20
+ bytes: Uint8Array;
21
+ status: number;
22
+ }>;
16
23
  private handleResponse;
17
24
  }
18
25
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAG9D,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5E,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAU;gBAEb,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO;IAKnD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY9C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASjE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASjE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAS/D,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBrE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAQ3C,cAAc;CAe7B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAI9D,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5E,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAE3B,IAAI,SAAS,IAAI,MAAM,CAEtB;gBAEW,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,OAAO;IAQnD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY9C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAShC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAU/D,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBrE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASnD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;YAejF,cAAc;CAe7B"}
package/dist/client.js CHANGED
@@ -1,11 +1,19 @@
1
1
  import { getAuthConfig } from "./auth.js";
2
2
  import { PaperclipApiError } from "./errors.js";
3
+ import { DEFAULT_TIMEOUT_MS } from "./constants.js";
3
4
  export class PaperclipClient {
4
5
  auth;
5
6
  fetchFn;
7
+ _timeoutMs;
8
+ get timeoutMs() {
9
+ return this._timeoutMs;
10
+ }
6
11
  constructor(auth, fetchFn) {
7
12
  this.auth = auth ?? getAuthConfig();
8
13
  this.fetchFn = fetchFn ?? ((url, init) => fetch(url, init));
14
+ const envTimeout = process.env["PAPERCLIP_REQUEST_TIMEOUT_MS"];
15
+ const parsed = envTimeout ? parseInt(envTimeout, 10) : NaN;
16
+ this._timeoutMs = Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_TIMEOUT_MS;
9
17
  }
10
18
  get companyId() {
11
19
  return this.auth.companyId;
@@ -28,6 +36,7 @@ export class PaperclipClient {
28
36
  const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
29
37
  method: "GET",
30
38
  headers: this.buildHeaders(),
39
+ signal: AbortSignal.timeout(this.timeoutMs),
31
40
  });
32
41
  return this.handleResponse(response);
33
42
  }
@@ -36,6 +45,7 @@ export class PaperclipClient {
36
45
  method: "POST",
37
46
  headers: this.buildHeaders(runId),
38
47
  body: body !== undefined ? JSON.stringify(body) : undefined,
48
+ signal: AbortSignal.timeout(this.timeoutMs),
39
49
  });
40
50
  return this.handleResponse(response);
41
51
  }
@@ -44,6 +54,7 @@ export class PaperclipClient {
44
54
  method: "PATCH",
45
55
  headers: this.buildHeaders(runId),
46
56
  body: JSON.stringify(body),
57
+ signal: AbortSignal.timeout(this.timeoutMs),
47
58
  });
48
59
  return this.handleResponse(response);
49
60
  }
@@ -52,6 +63,7 @@ export class PaperclipClient {
52
63
  method: "PUT",
53
64
  headers: this.buildHeaders(runId),
54
65
  body: JSON.stringify(body),
66
+ signal: AbortSignal.timeout(this.timeoutMs),
55
67
  });
56
68
  return this.handleResponse(response);
57
69
  }
@@ -67,6 +79,7 @@ export class PaperclipClient {
67
79
  method: "POST",
68
80
  headers,
69
81
  body: form,
82
+ signal: AbortSignal.timeout(this.timeoutMs),
70
83
  });
71
84
  return this.handleResponse(response);
72
85
  }
@@ -74,9 +87,24 @@ export class PaperclipClient {
74
87
  const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
75
88
  method: "DELETE",
76
89
  headers: this.buildHeaders(runId),
90
+ signal: AbortSignal.timeout(this.timeoutMs),
77
91
  });
78
92
  return this.handleResponse(response);
79
93
  }
94
+ async getRaw(path) {
95
+ const response = await this.fetchFn(`${this.auth.apiUrl}${path}`, {
96
+ method: "GET",
97
+ headers: this.buildHeaders(),
98
+ signal: AbortSignal.timeout(this.timeoutMs),
99
+ });
100
+ if (!response.ok) {
101
+ const body = await response.text().catch(() => "");
102
+ throw new PaperclipApiError(response.status, response.statusText, body);
103
+ }
104
+ const contentType = response.headers.get("content-type") ?? "application/octet-stream";
105
+ const bytes = new Uint8Array(await response.arrayBuffer());
106
+ return { contentType, bytes, status: response.status };
107
+ }
80
108
  async handleResponse(response) {
81
109
  if (!response.ok) {
82
110
  let body;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const CHARACTER_LIMIT = 25000;
2
+ export declare const DEFAULT_TIMEOUT_MS = 30000;
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const CHARACTER_LIMIT = 25_000;
2
+ export const DEFAULT_TIMEOUT_MS = 30_000;
3
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Contract test harness.
3
+ *
4
+ * Contract tests run against a live local Paperclip server.
5
+ * They are gated behind the PAPERCLIP_CONTRACT_TESTS=1 environment variable.
6
+ * When that variable is absent, every suite is skipped so `npm run test`
7
+ * is unaffected.
8
+ *
9
+ * Required env vars (same as production):
10
+ * PAPERCLIP_API_KEY, PAPERCLIP_API_URL, PAPERCLIP_AGENT_ID, PAPERCLIP_COMPANY_ID
11
+ *
12
+ * Optional:
13
+ * PAPERCLIP_RUN_ID
14
+ */
15
+ import { PaperclipClient } from "../client.js";
16
+ export declare const CONTRACT_ENABLED: boolean;
17
+ /** Skip option for node:test describe/it blocks when contract tests are disabled. */
18
+ export declare const SKIP: string | undefined;
19
+ export declare function buildContractAuth(): {
20
+ apiKey: string;
21
+ apiUrl: string;
22
+ agentId: string;
23
+ companyId: string;
24
+ runId: string | undefined;
25
+ };
26
+ export declare function buildContractClient(): PaperclipClient;
27
+ /**
28
+ * A client backed by a deliberately invalid API key — used to exercise
29
+ * 401/403 permission-error paths against the real server.
30
+ */
31
+ export declare function buildBadAuthClient(): PaperclipClient;
32
+ /** A UUID that will never exist in any real database. */
33
+ export declare const NONEXISTENT_UUID = "00000000-0000-0000-0000-000000000000";
34
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/contract/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,eAAO,MAAM,gBAAgB,SAAkD,CAAC;AAEhF,qFAAqF;AACrF,eAAO,MAAM,IAAI,oBAA4E,CAAC;AAc9F,wBAAgB,iBAAiB;;;;;;EAQhC;AAED,wBAAgB,mBAAmB,IAAI,eAAe,CAErD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAOpD;AAED,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,yCAAyC,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Contract test harness.
3
+ *
4
+ * Contract tests run against a live local Paperclip server.
5
+ * They are gated behind the PAPERCLIP_CONTRACT_TESTS=1 environment variable.
6
+ * When that variable is absent, every suite is skipped so `npm run test`
7
+ * is unaffected.
8
+ *
9
+ * Required env vars (same as production):
10
+ * PAPERCLIP_API_KEY, PAPERCLIP_API_URL, PAPERCLIP_AGENT_ID, PAPERCLIP_COMPANY_ID
11
+ *
12
+ * Optional:
13
+ * PAPERCLIP_RUN_ID
14
+ */
15
+ import { PaperclipClient } from "../client.js";
16
+ export const CONTRACT_ENABLED = process.env["PAPERCLIP_CONTRACT_TESTS"] === "1";
17
+ /** Skip option for node:test describe/it blocks when contract tests are disabled. */
18
+ export const SKIP = CONTRACT_ENABLED ? undefined : "set PAPERCLIP_CONTRACT_TESTS=1 to enable";
19
+ function requireEnv(name) {
20
+ const value = process.env[name];
21
+ if (!value) {
22
+ if (!CONTRACT_ENABLED) {
23
+ // Safe to return a placeholder — callers are only invoked when CONTRACT_ENABLED is true.
24
+ return `__missing_${name}__`;
25
+ }
26
+ throw new Error(`Contract tests require ${name} to be set`);
27
+ }
28
+ return value;
29
+ }
30
+ export function buildContractAuth() {
31
+ return {
32
+ apiKey: requireEnv("PAPERCLIP_API_KEY"),
33
+ apiUrl: requireEnv("PAPERCLIP_API_URL"),
34
+ agentId: requireEnv("PAPERCLIP_AGENT_ID"),
35
+ companyId: requireEnv("PAPERCLIP_COMPANY_ID"),
36
+ runId: process.env["PAPERCLIP_RUN_ID"],
37
+ };
38
+ }
39
+ export function buildContractClient() {
40
+ return new PaperclipClient(buildContractAuth());
41
+ }
42
+ /**
43
+ * A client backed by a deliberately invalid API key — used to exercise
44
+ * 401/403 permission-error paths against the real server.
45
+ */
46
+ export function buildBadAuthClient() {
47
+ return new PaperclipClient({
48
+ apiKey: "invalid-bad-key",
49
+ apiUrl: requireEnv("PAPERCLIP_API_URL"),
50
+ agentId: requireEnv("PAPERCLIP_AGENT_ID"),
51
+ companyId: requireEnv("PAPERCLIP_COMPANY_ID"),
52
+ });
53
+ }
54
+ /** A UUID that will never exist in any real database. */
55
+ export const NONEXISTENT_UUID = "00000000-0000-0000-0000-000000000000";
56
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/contract/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,KAAK,GAAG,CAAC;AAEhF,qFAAqF;AACrF,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0CAA0C,CAAC;AAE9F,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,yFAAyF;YACzF,OAAO,aAAa,IAAI,IAAI,CAAC;QAC/B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,YAAY,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC;QACvC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC;QACvC,OAAO,EAAE,UAAU,CAAC,oBAAoB,CAAC;QACzC,SAAS,EAAE,UAAU,CAAC,sBAAsB,CAAC;QAC7C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,eAAe,CAAC;QACzB,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC;QACvC,OAAO,EAAE,UAAU,CAAC,oBAAoB,CAAC;QACzC,SAAS,EAAE,UAAU,CAAC,sBAAsB,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sCAAsC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Contract test fixture seed.
3
+ *
4
+ * Creates deterministic test entities in the running Paperclip server and
5
+ * returns their IDs. Designed to be called once in a `before()` hook so all
6
+ * contract test suites share the same fixture set within a single test run.
7
+ *
8
+ * Entities created:
9
+ * - One issue used as the primary fixture (title: "CONTRACT-TEST-ISSUE")
10
+ * - One approval used as the primary approval fixture
11
+ *
12
+ * Required env vars (in addition to those in harness.ts):
13
+ * PAPERCLIP_CONTRACT_PROJECT_ID — UUID of the project to attach fixture issues to
14
+ * PAPERCLIP_CONTRACT_GOAL_ID — UUID of the goal to attach fixture issues to
15
+ *
16
+ * These are only read when PAPERCLIP_CONTRACT_TESTS=1 is set; missing values
17
+ * produce a clear error at test startup rather than a cryptic API 404.
18
+ */
19
+ export interface ContractFixtures {
20
+ /** The primary test issue ID */
21
+ issueId: string;
22
+ /** A second issue for operations that need a distinct target */
23
+ issueId2: string;
24
+ /** A live agent ID (read-only in tests — never deleted) */
25
+ agentId: string;
26
+ /** The approval fixture ID */
27
+ approvalId: string;
28
+ /** The company ID taken from auth config */
29
+ companyId: string;
30
+ /** The project ID in use */
31
+ projectId: string;
32
+ /** The goal ID in use */
33
+ goalId: string;
34
+ }
35
+ export declare function seedFixtures(): Promise<ContractFixtures>;
36
+ export declare function teardownFixtures(fixtures: ContractFixtures): Promise<void>;
37
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/contract/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAsB,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA+C9D;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAchF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Contract test fixture seed.
3
+ *
4
+ * Creates deterministic test entities in the running Paperclip server and
5
+ * returns their IDs. Designed to be called once in a `before()` hook so all
6
+ * contract test suites share the same fixture set within a single test run.
7
+ *
8
+ * Entities created:
9
+ * - One issue used as the primary fixture (title: "CONTRACT-TEST-ISSUE")
10
+ * - One approval used as the primary approval fixture
11
+ *
12
+ * Required env vars (in addition to those in harness.ts):
13
+ * PAPERCLIP_CONTRACT_PROJECT_ID — UUID of the project to attach fixture issues to
14
+ * PAPERCLIP_CONTRACT_GOAL_ID — UUID of the goal to attach fixture issues to
15
+ *
16
+ * These are only read when PAPERCLIP_CONTRACT_TESTS=1 is set; missing values
17
+ * produce a clear error at test startup rather than a cryptic API 404.
18
+ */
19
+ import { buildContractAuth } from "./harness.js";
20
+ import { PaperclipClient } from "../client.js";
21
+ const FIXTURE_TITLE_1 = "CONTRACT-TEST-ISSUE-1";
22
+ const FIXTURE_TITLE_2 = "CONTRACT-TEST-ISSUE-2";
23
+ function requireContractEnv(name) {
24
+ const value = process.env[name];
25
+ if (!value)
26
+ throw new Error(`Contract tests require ${name} to be set`);
27
+ return value;
28
+ }
29
+ export async function seedFixtures() {
30
+ const auth = buildContractAuth();
31
+ const client = new PaperclipClient(auth);
32
+ const projectId = requireContractEnv("PAPERCLIP_CONTRACT_PROJECT_ID");
33
+ const goalId = requireContractEnv("PAPERCLIP_CONTRACT_GOAL_ID");
34
+ const agentId = auth.agentId; // QA agent — always present
35
+ // Create the primary fixture issue.
36
+ const issue1 = await client.post(`/api/companies/${auth.companyId}/issues`, {
37
+ title: FIXTURE_TITLE_1,
38
+ description: "Fixture issue created by the contract test seed script. Safe to delete.",
39
+ status: "backlog",
40
+ priority: "low",
41
+ projectId,
42
+ goalId,
43
+ });
44
+ // Create a second fixture issue for checkout / update tests.
45
+ const issue2 = await client.post(`/api/companies/${auth.companyId}/issues`, {
46
+ title: FIXTURE_TITLE_2,
47
+ description: "Fixture issue #2 created by the contract test seed script. Safe to delete.",
48
+ status: "todo",
49
+ priority: "low",
50
+ projectId,
51
+ goalId,
52
+ });
53
+ // Create a fixture approval (hire_agent type; minimal payload).
54
+ const approval = await client.post(`/api/companies/${auth.companyId}/approvals`, {
55
+ type: "hire_agent",
56
+ payload: {
57
+ name: "ContractTestAgent",
58
+ role: "engineer",
59
+ title: "Contract Test Hire",
60
+ },
61
+ });
62
+ return {
63
+ issueId: issue1.id,
64
+ issueId2: issue2.id,
65
+ agentId,
66
+ approvalId: approval.id,
67
+ companyId: auth.companyId,
68
+ projectId,
69
+ goalId,
70
+ };
71
+ }
72
+ export async function teardownFixtures(fixtures) {
73
+ const auth = buildContractAuth();
74
+ const client = new PaperclipClient(auth);
75
+ // Cancel both fixture issues so they don't pollute the board.
76
+ await client.patch(`/api/issues/${fixtures.issueId}`, { status: "cancelled" }).catch(() => { });
77
+ await client.patch(`/api/issues/${fixtures.issueId2}`, { status: "cancelled" }).catch(() => { });
78
+ // Reject the fixture approval so it's closed out.
79
+ await client
80
+ .post(`/api/approvals/${fixtures.approvalId}/reject`, {
81
+ reason: "Contract test teardown — fixture cleanup.",
82
+ })
83
+ .catch(() => { });
84
+ }
85
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/contract/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmB/C,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAChD,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,YAAY,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,SAAS,GAAG,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,4BAA4B,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,4BAA4B;IAE1D,oCAAoC;IACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,kBAAkB,IAAI,CAAC,SAAS,SAAS,EAAE;QAC1F,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,KAAK;QACf,SAAS;QACT,MAAM;KACP,CAAC,CAAC;IAEH,6DAA6D;IAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,kBAAkB,IAAI,CAAC,SAAS,SAAS,EAAE;QAC1F,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,4EAA4E;QACzF,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,KAAK;QACf,SAAS;QACT,MAAM;KACP,CAAC,CAAC;IAEH,gEAAgE;IAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,kBAAkB,IAAI,CAAC,SAAS,YAAY,EAAE;QAC/F,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,oBAAoB;SAC5B;KACF,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,OAAO;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS;QACT,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAA0B;IAC/D,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAEzC,8DAA8D;IAC9D,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/F,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEhG,kDAAkD;IAClD,MAAM,MAAM;SACT,IAAI,CAAC,kBAAkB,QAAQ,CAAC,UAAU,SAAS,EAAE;QACpD,MAAM,EAAE,2CAA2C;KACpD,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC"}
package/dist/index.js CHANGED
@@ -2,9 +2,10 @@
2
2
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { registerAllTools } from "./tools/index.js";
5
+ import { SERVER_VERSION } from "./version.js";
5
6
  const server = new Server({
6
7
  name: "paperclip-mcp",
7
- version: "0.1.0",
8
+ version: SERVER_VERSION,
8
9
  }, {
9
10
  capabilities: {
10
11
  tools: {},
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,cAAc;CACxB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ToolResult } from "../../tools/index.js";
2
+ /**
3
+ * Assert the result is a successful ToolResult: isError absent/falsy
4
+ * AND content array is non-empty.
5
+ */
6
+ export declare function assertSuccess(result: ToolResult, message?: string): void;
7
+ /**
8
+ * Assert the result is an error ToolResult: isError === true AND
9
+ * content array is non-empty AND text includes expectedStatus (if given).
10
+ */
11
+ export declare function assertError(result: ToolResult, expectedStatus?: number): void;
12
+ /**
13
+ * Assert the result is successful AND its text is under the CHARACTER_LIMIT
14
+ * AND contains a truncation hint. Use for Stage 5 truncation tests.
15
+ */
16
+ export declare function assertTruncated(result: ToolResult): void;
17
+ /**
18
+ * Assert the result body is a pagination envelope with the expected
19
+ * total / limit / offset / count values. Use for Stage 6 list_* tests.
20
+ */
21
+ export declare function assertPaginationEnvelope(result: ToolResult, expected: {
22
+ total?: number;
23
+ limit: number;
24
+ offset: number;
25
+ count?: number;
26
+ }): void;
27
+ //# sourceMappingURL=assert-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-result.d.ts","sourceRoot":"","sources":["../../../src/test/helpers/assert-result.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOxE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAW7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAOxD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1E,IAAI,CAiBN"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Assertion helpers for ToolResult shapes.
3
+ *
4
+ * These reduce boilerplate in tests and make intent explicit — tests
5
+ * using these helpers are also safer against the "test passes if handler
6
+ * returns empty content" false-positive class.
7
+ */
8
+ import assert from "node:assert/strict";
9
+ /**
10
+ * Assert the result is a successful ToolResult: isError absent/falsy
11
+ * AND content array is non-empty.
12
+ */
13
+ export function assertSuccess(result, message) {
14
+ assert.notEqual(result.isError, true, message ?? `Expected success but got isError: ${result.content[0]?.text}`);
15
+ assert.ok(result.content.length > 0, "Expected non-empty content array");
16
+ }
17
+ /**
18
+ * Assert the result is an error ToolResult: isError === true AND
19
+ * content array is non-empty AND text includes expectedStatus (if given).
20
+ */
21
+ export function assertError(result, expectedStatus) {
22
+ assert.equal(result.isError, true, "Expected isError: true");
23
+ assert.ok(result.content.length > 0, "Expected non-empty error content");
24
+ const text = result.content[0].text;
25
+ assert.ok(text.length > 0, "Expected non-empty error text");
26
+ if (expectedStatus !== undefined) {
27
+ assert.ok(text.includes(String(expectedStatus)), `Expected error text to contain status ${expectedStatus}; got: ${text}`);
28
+ }
29
+ }
30
+ /**
31
+ * Assert the result is successful AND its text is under the CHARACTER_LIMIT
32
+ * AND contains a truncation hint. Use for Stage 5 truncation tests.
33
+ */
34
+ export function assertTruncated(result) {
35
+ assertSuccess(result);
36
+ const text = result.content[0].text;
37
+ assert.ok(text.toLowerCase().includes("truncated") || text.includes("…"), `Expected truncation hint in text; got tail: …${text.slice(-200)}`);
38
+ }
39
+ /**
40
+ * Assert the result body is a pagination envelope with the expected
41
+ * total / limit / offset / count values. Use for Stage 6 list_* tests.
42
+ */
43
+ export function assertPaginationEnvelope(result, expected) {
44
+ assertSuccess(result);
45
+ const data = JSON.parse(result.content[0].text);
46
+ assert.equal(typeof data.total, "number", "envelope missing 'total' number");
47
+ assert.equal(typeof data.limit, "number", "envelope missing 'limit' number");
48
+ assert.equal(typeof data.offset, "number", "envelope missing 'offset' number");
49
+ assert.equal(typeof data.count, "number", "envelope missing 'count' number");
50
+ assert.equal(typeof data.has_more, "boolean", "envelope missing 'has_more' boolean");
51
+ assert.ok(Array.isArray(data.items), "envelope missing 'items' array");
52
+ assert.equal(data.limit, expected.limit, "limit mismatch");
53
+ assert.equal(data.offset, expected.offset, "offset mismatch");
54
+ if (expected.total !== undefined) {
55
+ assert.equal(data.total, expected.total, "total mismatch");
56
+ }
57
+ if (expected.count !== undefined) {
58
+ assert.equal(data.count, expected.count, "count mismatch");
59
+ }
60
+ }
61
+ //# sourceMappingURL=assert-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-result.js","sourceRoot":"","sources":["../../../src/test/helpers/assert-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Fixture builders for test data.
3
+ *
4
+ * Each builder returns a minimal, valid domain object and accepts a
5
+ * Partial override for test-specific fields. Grow per stage — Stage 8
6
+ * sub-stages will add company, plugin, secret, run, feedback, and
7
+ * import/export fixtures.
8
+ */
9
+ export interface IssueLike {
10
+ id: string;
11
+ identifier: string;
12
+ title: string;
13
+ status: string;
14
+ priority: string | null;
15
+ projectId: string | null;
16
+ goalId: string | null;
17
+ parentId: string | null;
18
+ executionRunId: string | null;
19
+ executionLockedAt: string | null;
20
+ checkoutRunId: string | null;
21
+ assigneeAgentId: string | null;
22
+ updatedAt: string;
23
+ }
24
+ export declare function issueFixture(overrides?: Partial<IssueLike>): IssueLike;
25
+ export interface AgentLike {
26
+ id: string;
27
+ name: string;
28
+ urlKey: string;
29
+ role: string;
30
+ status: string;
31
+ title: string | null;
32
+ }
33
+ export declare function agentFixture(overrides?: Partial<AgentLike>): AgentLike;
34
+ export interface ApprovalLike {
35
+ id: string;
36
+ type: string;
37
+ status: string;
38
+ payload: Record<string, unknown>;
39
+ }
40
+ export declare function approvalFixture(overrides?: Partial<ApprovalLike>): ApprovalLike;
41
+ export declare function conflictBody(details: {
42
+ issueId?: string;
43
+ checkoutRunId: string | null;
44
+ executionRunId: string | null;
45
+ }): {
46
+ error: string;
47
+ details: {
48
+ issueId: string;
49
+ checkoutRunId: string | null;
50
+ executionRunId: string | null;
51
+ };
52
+ };
53
+ export declare function largeIssueList(count?: number): IssueLike[];
54
+ export interface GoalLike {
55
+ id: string;
56
+ title: string;
57
+ status: string;
58
+ description: string | null;
59
+ }
60
+ export declare function goalFixture(overrides?: Partial<GoalLike>): GoalLike;
61
+ export declare function largeGoalList(count?: number): GoalLike[];
62
+ export interface ProjectLike {
63
+ id: string;
64
+ name: string;
65
+ status: string;
66
+ goalId: string | null;
67
+ }
68
+ export declare function projectFixture(overrides?: Partial<ProjectLike>): ProjectLike;
69
+ export declare function largeProjectList(count?: number): ProjectLike[];
70
+ export interface LabelLike {
71
+ id: string;
72
+ name: string;
73
+ color: string | null;
74
+ }
75
+ export declare function labelFixture(overrides?: Partial<LabelLike>): LabelLike;
76
+ export declare function largeLabelList(count?: number): LabelLike[];
77
+ export interface CommentLike {
78
+ id: string;
79
+ body: string;
80
+ authorId: string;
81
+ authorType: string;
82
+ createdAt: string;
83
+ }
84
+ export declare function commentFixture(overrides?: Partial<CommentLike>): CommentLike;
85
+ export declare function largeCommentList(count?: number): CommentLike[];
86
+ export declare function largeApprovalList(count?: number): ApprovalLike[];
87
+ export interface ActivityLike {
88
+ id: string;
89
+ entityType: string;
90
+ entityId: string;
91
+ action: string;
92
+ agentId: string;
93
+ createdAt: string;
94
+ detail: string;
95
+ }
96
+ export declare function activityFixture(overrides?: Partial<ActivityLike>): ActivityLike;
97
+ export declare function largeActivityList(count?: number): ActivityLike[];
98
+ export interface RoutineLike {
99
+ id: string;
100
+ name: string;
101
+ agentId: string;
102
+ concurrencyPolicy: string;
103
+ catchUpPolicy: string;
104
+ }
105
+ export declare function routineFixture(overrides?: Partial<RoutineLike>): RoutineLike;
106
+ export declare function largeRoutineList(count?: number): RoutineLike[];
107
+ export declare function largeRoutineRunList(count?: number): Record<string, unknown>[];
108
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/test/helpers/fixtures.ts"],"names":[],"mappings":"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"}