@jitera/connect 0.1.1 → 0.7.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/.claude-plugin/plugin.json +12 -9
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +17 -3
  4. package/dist/adapters/codex.d.ts +4 -0
  5. package/dist/adapters/codex.d.ts.map +1 -0
  6. package/dist/adapters/codex.js +49 -0
  7. package/dist/adapters/codex.js.map +1 -0
  8. package/dist/adapters/cursor.d.ts +4 -0
  9. package/dist/adapters/cursor.d.ts.map +1 -0
  10. package/dist/adapters/cursor.js +47 -0
  11. package/dist/adapters/cursor.js.map +1 -0
  12. package/dist/adapters/types.d.ts +25 -0
  13. package/dist/adapters/types.d.ts.map +1 -0
  14. package/dist/adapters/types.js +2 -0
  15. package/dist/adapters/types.js.map +1 -0
  16. package/dist/bin/cli.d.ts +3 -0
  17. package/dist/bin/cli.d.ts.map +1 -0
  18. package/dist/bin/cli.js +164 -0
  19. package/dist/bin/cli.js.map +1 -0
  20. package/dist/bin/login.d.ts +3 -0
  21. package/dist/bin/login.d.ts.map +1 -0
  22. package/dist/bin/login.js +145 -0
  23. package/dist/bin/login.js.map +1 -0
  24. package/dist/bin/proxy.d.ts +3 -0
  25. package/dist/bin/proxy.d.ts.map +1 -0
  26. package/dist/bin/proxy.js +19 -0
  27. package/dist/bin/proxy.js.map +1 -0
  28. package/dist/bin/validate.d.ts +3 -0
  29. package/dist/bin/validate.d.ts.map +1 -0
  30. package/dist/bin/validate.js +13 -0
  31. package/dist/bin/validate.js.map +1 -0
  32. package/dist/device-flow.d.ts +30 -0
  33. package/dist/device-flow.d.ts.map +1 -0
  34. package/dist/device-flow.js +105 -0
  35. package/dist/device-flow.js.map +1 -0
  36. package/dist/discovery.d.ts +21 -0
  37. package/dist/discovery.d.ts.map +1 -0
  38. package/dist/discovery.js +58 -0
  39. package/dist/discovery.js.map +1 -0
  40. package/dist/environments.d.ts +18 -0
  41. package/dist/environments.d.ts.map +1 -0
  42. package/dist/environments.js +45 -0
  43. package/dist/environments.js.map +1 -0
  44. package/dist/graphql.d.ts +31 -0
  45. package/dist/graphql.d.ts.map +1 -0
  46. package/dist/graphql.js +100 -0
  47. package/dist/graphql.js.map +1 -0
  48. package/dist/hook-io.d.ts +22 -0
  49. package/dist/hook-io.d.ts.map +1 -0
  50. package/dist/hook-io.js +13 -0
  51. package/dist/hook-io.js.map +1 -0
  52. package/dist/hooks/session-start.d.ts +3 -0
  53. package/dist/hooks/session-start.d.ts.map +1 -0
  54. package/dist/hooks/session-start.js +16 -0
  55. package/dist/hooks/session-start.js.map +1 -0
  56. package/dist/hooks/stop.d.ts +3 -0
  57. package/dist/hooks/stop.d.ts.map +1 -0
  58. package/dist/hooks/stop.js +21 -0
  59. package/dist/hooks/stop.js.map +1 -0
  60. package/dist/hooks/user-prompt-submit.d.ts +3 -0
  61. package/dist/hooks/user-prompt-submit.d.ts.map +1 -0
  62. package/dist/hooks/user-prompt-submit.js +55 -0
  63. package/dist/hooks/user-prompt-submit.js.map +1 -0
  64. package/dist/install/agents-md.d.ts +25 -0
  65. package/dist/install/agents-md.d.ts.map +1 -0
  66. package/dist/install/agents-md.js +58 -0
  67. package/dist/install/agents-md.js.map +1 -0
  68. package/dist/install/render.d.ts +13 -0
  69. package/dist/install/render.d.ts.map +1 -0
  70. package/dist/install/render.js +22 -0
  71. package/dist/install/render.js.map +1 -0
  72. package/dist/install/skills.d.ts +16 -0
  73. package/dist/install/skills.d.ts.map +1 -0
  74. package/dist/install/skills.js +62 -0
  75. package/dist/install/skills.js.map +1 -0
  76. package/dist/manifest.d.ts +62 -0
  77. package/dist/manifest.d.ts.map +1 -0
  78. package/dist/manifest.js +5 -0
  79. package/dist/manifest.js.map +1 -0
  80. package/dist/mcp-client.d.ts +43 -0
  81. package/dist/mcp-client.d.ts.map +1 -0
  82. package/dist/mcp-client.js +85 -0
  83. package/dist/mcp-client.js.map +1 -0
  84. package/dist/mcp-config.d.ts +12 -0
  85. package/dist/mcp-config.d.ts.map +1 -0
  86. package/dist/mcp-config.js +45 -0
  87. package/dist/mcp-config.js.map +1 -0
  88. package/dist/proxy.d.ts +12 -0
  89. package/dist/proxy.d.ts.map +1 -0
  90. package/dist/proxy.js +54 -0
  91. package/dist/proxy.js.map +1 -0
  92. package/dist/session-marker.d.ts +4 -0
  93. package/dist/session-marker.d.ts.map +1 -0
  94. package/dist/session-marker.js +25 -0
  95. package/dist/session-marker.js.map +1 -0
  96. package/dist/toml-section.d.ts +12 -0
  97. package/dist/toml-section.d.ts.map +1 -0
  98. package/dist/toml-section.js +66 -0
  99. package/dist/toml-section.js.map +1 -0
  100. package/dist/validate.d.ts +11 -0
  101. package/dist/validate.d.ts.map +1 -0
  102. package/dist/validate.js +58 -0
  103. package/dist/validate.js.map +1 -0
  104. package/hooks/hooks.json +15 -2
  105. package/package.json +13 -6
  106. package/bin/jitera-connect.mjs +0 -120
  107. package/hooks/scripts/session-start.mjs +0 -36
  108. package/hooks/scripts/stop.mjs +0 -39
  109. package/src/adapters/cursor.mjs +0 -56
  110. package/src/environments.mjs +0 -46
  111. package/src/mcp-config.mjs +0 -45
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { collectContentFiles, validateRepository } from "../validate.js";
5
+ const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
6
+ const errors = validateRepository(ROOT);
7
+ if (errors.length) {
8
+ for (const error of errors)
9
+ process.stderr.write(`error: ${error}\n`);
10
+ process.exit(1);
11
+ }
12
+ process.stdout.write(`validated ${collectContentFiles(ROOT).length} content file(s)\n`);
13
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/bin/validate.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAExC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const DEVICE_CODE_GRANT = "urn:ietf:params:oauth:grant-type:device_code";
2
+ export declare const CLIENT_ID = "LWGH06SRvnBK7_72-QBwEEuL4kYepP2LzdlxMtWXv_o";
3
+ export interface DeviceAuthorization {
4
+ readonly deviceCode: string;
5
+ readonly userCode: string;
6
+ readonly verificationUri: string;
7
+ readonly verificationUriComplete: string | undefined;
8
+ readonly expiresInSeconds: number;
9
+ readonly intervalSeconds: number;
10
+ }
11
+ export type DeviceFlowFailure = "access_denied" | "expired_token" | "invalid_client" | "invalid_grant" | "timeout" | "transport";
12
+ export declare class DeviceFlowError extends Error {
13
+ readonly name = "DeviceFlowError";
14
+ readonly reason: DeviceFlowFailure;
15
+ constructor(reason: DeviceFlowFailure, message: string);
16
+ }
17
+ export interface DeviceFlowTransport {
18
+ readonly automationUrl: string;
19
+ readonly clientId?: string;
20
+ readonly fetchImpl?: typeof fetch;
21
+ }
22
+ export declare function requestDeviceAuthorization({ automationUrl, clientId, fetchImpl, }: DeviceFlowTransport): Promise<DeviceAuthorization>;
23
+ export interface PollOptions extends DeviceFlowTransport {
24
+ readonly authorization: DeviceAuthorization;
25
+ readonly sleep?: (ms: number) => Promise<void>;
26
+ readonly now?: () => number;
27
+ readonly onPending?: (attempt: number) => void;
28
+ }
29
+ export declare function pollForAccessToken({ automationUrl, authorization, clientId, fetchImpl, sleep, now, onPending, }: PollOptions): Promise<string>;
30
+ //# sourceMappingURL=device-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-flow.d.ts","sourceRoot":"","sources":["../src/device-flow.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,iDAAiD,CAAC;AAChF,eAAO,MAAM,SAAS,gDAAgD,CAAC;AAKvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,WAAW,CAAC;AAEhB,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAkB,IAAI,qBAAqB;IAC3C,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC,YAAY,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAGrD;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AA6BD,wBAAsB,0BAA0B,CAAC,EAC/C,aAAa,EACb,QAAoB,EACpB,SAAiB,GAClB,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgCpD;AAED,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACtD,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAID,wBAAsB,kBAAkB,CAAC,EACvC,aAAa,EACb,aAAa,EACb,QAAoB,EACpB,SAAiB,EACjB,KAAY,EACZ,GAAsB,EACtB,SAAS,GACV,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA8D/B"}
@@ -0,0 +1,105 @@
1
+ export const DEVICE_CODE_GRANT = "urn:ietf:params:oauth:grant-type:device_code";
2
+ export const CLIENT_ID = "LWGH06SRvnBK7_72-QBwEEuL4kYepP2LzdlxMtWXv_o";
3
+ const SLOW_DOWN_INCREMENT_SECONDS = 5;
4
+ const DEFAULT_INTERVAL_SECONDS = 5;
5
+ export class DeviceFlowError extends Error {
6
+ name = "DeviceFlowError";
7
+ reason;
8
+ constructor(reason, message) {
9
+ super(message);
10
+ this.reason = reason;
11
+ }
12
+ }
13
+ function endpoint(automationUrl, path) {
14
+ return `${automationUrl.replace(/\/$/, "")}${path}`;
15
+ }
16
+ async function postForm(url, body, fetchImpl) {
17
+ const response = await fetchImpl(url, {
18
+ method: "POST",
19
+ headers: {
20
+ "content-type": "application/x-www-form-urlencoded",
21
+ accept: "application/json",
22
+ },
23
+ body: new URLSearchParams(body).toString(),
24
+ });
25
+ const text = await response.text();
26
+ let payload = {};
27
+ try {
28
+ payload = JSON.parse(text);
29
+ }
30
+ catch {
31
+ payload = { error: "invalid_response", error_description: text.slice(0, 200) };
32
+ }
33
+ return { status: response.status, payload };
34
+ }
35
+ export async function requestDeviceAuthorization({ automationUrl, clientId = CLIENT_ID, fetchImpl = fetch, }) {
36
+ const url = endpoint(automationUrl, "/oauth/authorize_device");
37
+ let result;
38
+ try {
39
+ result = await postForm(url, { client_id: clientId }, fetchImpl);
40
+ }
41
+ catch (error) {
42
+ throw new DeviceFlowError("transport", `could not reach ${url}: ${error.message}`);
43
+ }
44
+ const { status, payload } = result;
45
+ if (status !== 200 || typeof payload["device_code"] !== "string") {
46
+ const detail = String(payload["error_description"] ?? payload["error"] ?? `HTTP ${status}`);
47
+ throw new DeviceFlowError(status === 401 || payload["error"] === "invalid_client" ? "invalid_client" : "transport", `${url} refused the device authorization request: ${detail}`);
48
+ }
49
+ return {
50
+ deviceCode: payload["device_code"],
51
+ userCode: String(payload["user_code"] ?? ""),
52
+ verificationUri: String(payload["verification_uri"] ?? ""),
53
+ verificationUriComplete: typeof payload["verification_uri_complete"] === "string"
54
+ ? payload["verification_uri_complete"]
55
+ : undefined,
56
+ expiresInSeconds: Number(payload["expires_in"] ?? 300),
57
+ intervalSeconds: Number(payload["interval"] ?? DEFAULT_INTERVAL_SECONDS),
58
+ };
59
+ }
60
+ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
61
+ export async function pollForAccessToken({ automationUrl, authorization, clientId = CLIENT_ID, fetchImpl = fetch, sleep = wait, now = () => Date.now(), onPending, }) {
62
+ const url = endpoint(automationUrl, "/oauth/token");
63
+ const deadline = now() + authorization.expiresInSeconds * 1000;
64
+ let intervalSeconds = authorization.intervalSeconds || DEFAULT_INTERVAL_SECONDS;
65
+ let attempt = 0;
66
+ while (now() < deadline) {
67
+ await sleep(intervalSeconds * 1000);
68
+ attempt += 1;
69
+ let result;
70
+ try {
71
+ result = await postForm(url, {
72
+ grant_type: DEVICE_CODE_GRANT,
73
+ device_code: authorization.deviceCode,
74
+ client_id: clientId,
75
+ }, fetchImpl);
76
+ }
77
+ catch (error) {
78
+ throw new DeviceFlowError("transport", `could not reach ${url}: ${error.message}`);
79
+ }
80
+ const { payload } = result;
81
+ const token = payload["access_token"];
82
+ if (typeof token === "string" && token)
83
+ return token;
84
+ const error = String(payload["error"] ?? "");
85
+ switch (error) {
86
+ case "authorization_pending":
87
+ onPending?.(attempt);
88
+ continue;
89
+ case "slow_down":
90
+ intervalSeconds += SLOW_DOWN_INCREMENT_SECONDS;
91
+ onPending?.(attempt);
92
+ continue;
93
+ case "access_denied":
94
+ throw new DeviceFlowError("access_denied", "the sign-in request was declined.");
95
+ case "expired_token":
96
+ throw new DeviceFlowError("expired_token", "the sign-in request expired before it was approved. Run the command again.");
97
+ case "invalid_client":
98
+ throw new DeviceFlowError("invalid_client", "this deployment does not recognise the connect client. It may need the client registration migration.");
99
+ default:
100
+ throw new DeviceFlowError("invalid_grant", `sign-in failed: ${String(payload["error_description"] ?? (error || "unknown error"))}`);
101
+ }
102
+ }
103
+ throw new DeviceFlowError("timeout", `the sign-in request was not approved within ${authorization.expiresInSeconds} seconds.`);
104
+ }
105
+ //# sourceMappingURL=device-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-flow.js","sourceRoot":"","sources":["../src/device-flow.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,8CAA8C,CAAC;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,6CAA6C,CAAC;AAEvE,MAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAmBnC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACtB,IAAI,GAAG,iBAAiB,CAAC;IAClC,MAAM,CAAoB;IAEnC,YAAY,MAAyB,EAAE,OAAe;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAQD,SAAS,QAAQ,CAAC,aAAqB,EAAE,IAAY;IACnD,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,GAAW,EACX,IAA4B,EAC5B,SAAuB;IAEvB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;QACpC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;YACnD,MAAM,EAAE,kBAAkB;SAC3B;QACD,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;KAC3C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,OAAO,GAA4B,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAC/C,aAAa,EACb,QAAQ,GAAG,SAAS,EACpB,SAAS,GAAG,KAAK,GACG;IACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CACvB,WAAW,EACX,mBAAmB,GAAG,KAAM,KAAe,CAAC,OAAO,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACnC,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,MAAM,EAAE,CAAC,CAAC;QAC5F,MAAM,IAAI,eAAe,CACvB,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EACxF,GAAG,GAAG,8CAA8C,MAAM,EAAE,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC;QAClC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC5C,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC1D,uBAAuB,EACrB,OAAO,OAAO,CAAC,2BAA2B,CAAC,KAAK,QAAQ;YACtD,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC;YACtC,CAAC,CAAC,SAAS;QACf,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;QACtD,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,wBAAwB,CAAC;KACzE,CAAC;AACJ,CAAC;AASD,MAAM,IAAI,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE9F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,aAAa,EACb,aAAa,EACb,QAAQ,GAAG,SAAS,EACpB,SAAS,GAAG,KAAK,EACjB,KAAK,GAAG,IAAI,EACZ,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EACtB,SAAS,GACG;IACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/D,IAAI,eAAe,GAAG,aAAa,CAAC,eAAe,IAAI,wBAAwB,CAAC;IAChF,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC;QAEb,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CACrB,GAAG,EACH;gBACE,UAAU,EAAE,iBAAiB;gBAC7B,WAAW,EAAE,aAAa,CAAC,UAAU;gBACrC,SAAS,EAAE,QAAQ;aACpB,EACD,SAAS,CACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QAErD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,uBAAuB;gBAC1B,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;gBACrB,SAAS;YACX,KAAK,WAAW;gBACd,eAAe,IAAI,2BAA2B,CAAC;gBAC/C,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;gBACrB,SAAS;YACX,KAAK,eAAe;gBAClB,MAAM,IAAI,eAAe,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC;YAClF,KAAK,eAAe;gBAClB,MAAM,IAAI,eAAe,CACvB,eAAe,EACf,4EAA4E,CAC7E,CAAC;YACJ,KAAK,gBAAgB;gBACnB,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,uGAAuG,CACxG,CAAC;YACJ;gBACE,MAAM,IAAI,eAAe,CACvB,eAAe,EACf,mBAAmB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC,EAAE,CACxF,CAAC;QACN,CAAC;IACH,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,SAAS,EACT,+CAA+C,aAAa,CAAC,gBAAgB,WAAW,CACzF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ export declare const DISCOVERY_PATHS: readonly ["/p/jitera-connect.json", "/jitera-connect.json"];
2
+ export interface DeploymentConfig {
3
+ readonly mcpUrl: string;
4
+ readonly apiBaseUrl: string;
5
+ readonly automationUrl: string;
6
+ readonly brand: string;
7
+ }
8
+ export declare class DiscoveryError extends Error {
9
+ readonly name = "DiscoveryError";
10
+ readonly studioUrl: string;
11
+ readonly attempts: readonly string[];
12
+ constructor(studioUrl: string, attempts: readonly string[], reason: string);
13
+ }
14
+ export interface DiscoverOptions {
15
+ readonly environment?: string | undefined;
16
+ readonly studioUrl?: string | undefined;
17
+ readonly timeoutMs?: number;
18
+ readonly fetchImpl?: typeof fetch;
19
+ }
20
+ export declare function discoverDeployment({ environment, studioUrl: studioOverride, timeoutMs, fetchImpl, }?: DiscoverOptions): Promise<DeploymentConfig>;
21
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,YAAI,wBAAwB,EAAE,sBAAsB,CAAU,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAErC,YAAY,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAQzE;CACF;AAQD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,wBAAsB,kBAAkB,CAAC,EACvC,WAAW,EACX,SAAS,EAAE,cAAc,EACzB,SAAgB,EAChB,SAAiB,GAClB,GAAE,eAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqClD"}
@@ -0,0 +1,58 @@
1
+ import { resolveStudioUrl } from "./environments.js";
2
+ export const DISCOVERY_PATHS = ["/p/jitera-connect.json", "/jitera-connect.json"];
3
+ export class DiscoveryError extends Error {
4
+ name = "DiscoveryError";
5
+ studioUrl;
6
+ attempts;
7
+ constructor(studioUrl, attempts, reason) {
8
+ super(`could not read the deployment configuration from ${studioUrl} (${reason}). ` +
9
+ `Tried: ${attempts.join(", ")}. ` +
10
+ `Check the environment name, or pass --mcp-url to bypass discovery.`);
11
+ this.studioUrl = studioUrl;
12
+ this.attempts = attempts;
13
+ }
14
+ }
15
+ function isUsable(value) {
16
+ if (typeof value !== "object" || value === null)
17
+ return false;
18
+ const candidate = value;
19
+ return typeof candidate["mcpUrl"] === "string" && candidate["mcpUrl"].startsWith("http");
20
+ }
21
+ export async function discoverDeployment({ environment, studioUrl: studioOverride, timeoutMs = 8000, fetchImpl = fetch, } = {}) {
22
+ const studioUrl = (studioOverride ?? "").replace(/\/$/, "") || resolveStudioUrl(environment);
23
+ const attempts = [];
24
+ let lastReason = "no response";
25
+ for (const path of DISCOVERY_PATHS) {
26
+ const url = `${studioUrl}${path}`;
27
+ attempts.push(url);
28
+ try {
29
+ const response = await fetchImpl(url, {
30
+ signal: AbortSignal.timeout(timeoutMs),
31
+ headers: { accept: "application/json" },
32
+ });
33
+ if (!response.ok) {
34
+ lastReason = `HTTP ${response.status}`;
35
+ continue;
36
+ }
37
+ const payload = await response.json();
38
+ if (!isUsable(payload)) {
39
+ lastReason = "the response did not contain an mcpUrl";
40
+ continue;
41
+ }
42
+ const record = payload;
43
+ return {
44
+ mcpUrl: payload.mcpUrl,
45
+ apiBaseUrl: typeof record["apiBaseUrl"] === "string" ? record["apiBaseUrl"] : "",
46
+ automationUrl: typeof record["automationUrl"] === "string" ? record["automationUrl"] : "",
47
+ brand: typeof record["brand"] === "string" && record["brand"] ? record["brand"] : "Jitera",
48
+ };
49
+ }
50
+ catch (error) {
51
+ const cause = error;
52
+ lastReason =
53
+ cause.name === "TimeoutError" ? `timed out after ${timeoutMs}ms` : cause.message;
54
+ }
55
+ }
56
+ throw new DiscoveryError(studioUrl, attempts, lastReason);
57
+ }
58
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const DEFAULT_ENVIRONMENT = "studio";
2
+ export declare const SUPPORTED_ENVIRONMENTS: readonly ["studio", "studio-stage", "studio-01", "studio-06"];
3
+ export type Deployment = {
4
+ readonly kind: "production";
5
+ } | {
6
+ readonly kind: "stage";
7
+ } | {
8
+ readonly kind: "pilot";
9
+ readonly instance: string;
10
+ };
11
+ export declare class UnknownEnvironmentError extends Error {
12
+ readonly name = "UnknownEnvironmentError";
13
+ readonly value: unknown;
14
+ constructor(value: unknown);
15
+ }
16
+ export declare function parseEnvironment(environment?: string | null): Deployment;
17
+ export declare function resolveStudioUrl(environment?: string | null): string;
18
+ //# sourceMappingURL=environments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../src/environments.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,eAAO,MAAM,sBAAsB,YACjC,QAAQ,EACR,cAAc,EACd,WAAW,EACX,WAAW,CACH,CAAC;AAEX,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA6B;IACnD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB,YAAY,KAAK,EAAE,OAAO,EAMzB;CACF;AAED,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAgBxE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUpE"}
@@ -0,0 +1,45 @@
1
+ const PRODUCTION_STUDIO = "https://studio.jitera.app";
2
+ const PILOT_DOMAIN = "pilot.jitera.app";
3
+ const PILOT_PATTERN = /^studio-(\d{1,2})$/;
4
+ export const DEFAULT_ENVIRONMENT = "studio";
5
+ export const SUPPORTED_ENVIRONMENTS = [
6
+ "studio",
7
+ "studio-stage",
8
+ "studio-01",
9
+ "studio-06",
10
+ ];
11
+ export class UnknownEnvironmentError extends Error {
12
+ name = "UnknownEnvironmentError";
13
+ value;
14
+ constructor(value) {
15
+ super(`unknown environment "${String(value)}". Supported: "studio" for production, ` +
16
+ `"studio-stage" for staging, or "studio-NN" for a numbered pilot such as "studio-06".`);
17
+ this.value = value;
18
+ }
19
+ }
20
+ export function parseEnvironment(environment) {
21
+ const name = String(environment ?? "").trim().toLowerCase();
22
+ if (name === "" || name === DEFAULT_ENVIRONMENT || name === "production") {
23
+ return { kind: "production" };
24
+ }
25
+ if (name === "studio-stage") {
26
+ return { kind: "stage" };
27
+ }
28
+ const pilot = PILOT_PATTERN.exec(name);
29
+ if (pilot?.[1] !== undefined) {
30
+ return { kind: "pilot", instance: pilot[1].padStart(2, "0") };
31
+ }
32
+ throw new UnknownEnvironmentError(environment);
33
+ }
34
+ export function resolveStudioUrl(environment) {
35
+ const deployment = parseEnvironment(environment);
36
+ switch (deployment.kind) {
37
+ case "production":
38
+ return PRODUCTION_STUDIO;
39
+ case "stage":
40
+ return `https://studio-stage.${PILOT_DOMAIN}`;
41
+ case "pilot":
42
+ return `https://studio-${deployment.instance}.${PILOT_DOMAIN}`;
43
+ }
44
+ }
45
+ //# sourceMappingURL=environments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.js","sourceRoot":"","sources":["../src/environments.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AACtD,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,QAAQ;IACR,cAAc;IACd,WAAW;IACX,WAAW;CACH,CAAC;AAOX,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9B,IAAI,GAAG,yBAAyB,CAAC;IAC1C,KAAK,CAAU;IAExB,YAAY,KAAc;QACxB,KAAK,CACH,wBAAwB,MAAM,CAAC,KAAK,CAAC,yCAAyC;YAC5E,sFAAsF,CACzF,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,WAA2B;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE5D,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAA2B;IAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACjD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,YAAY;YACf,OAAO,iBAAiB,CAAC;QAC3B,KAAK,OAAO;YACV,OAAO,wBAAwB,YAAY,EAAE,CAAC;QAChD,KAAK,OAAO;YACV,OAAO,kBAAkB,UAAU,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ export declare class GraphqlError extends Error {
2
+ readonly name = "GraphqlError";
3
+ readonly errors: readonly string[];
4
+ constructor(operation: string, errors: readonly string[]);
5
+ }
6
+ export interface GraphqlTransport {
7
+ readonly automationUrl: string;
8
+ readonly accessToken: string;
9
+ readonly fetchImpl?: typeof fetch;
10
+ readonly timeoutMs?: number;
11
+ }
12
+ export declare function query<T>(operation: string, document: string, variables: Record<string, unknown>, { automationUrl, accessToken, fetchImpl, timeoutMs }: GraphqlTransport): Promise<T>;
13
+ export interface ProjectSummary {
14
+ readonly uuid: string;
15
+ readonly name: string;
16
+ }
17
+ export declare function listProjects(transport: GraphqlTransport): Promise<ProjectSummary[]>;
18
+ export type McpAccess = "read" | "read_write";
19
+ export interface CreatedApiKey {
20
+ readonly rawKey: string;
21
+ readonly maskedKey: string;
22
+ }
23
+ type MutationErrors = string | readonly string[] | null | undefined;
24
+ export declare function toErrorMessages(errors: MutationErrors): string[];
25
+ export declare function createApiKey(options: {
26
+ readonly projectUuid: string;
27
+ readonly name: string;
28
+ readonly mcpAccess: McpAccess;
29
+ }, transport: GraphqlTransport): Promise<CreatedApiKey>;
30
+ export {};
31
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAkB,IAAI,kBAAkB;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,YAAY,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAOvD;CACF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAOD,wBAAsB,KAAK,CAAC,CAAC,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,EAAE,aAAa,EAAE,WAAW,EAAE,SAAiB,EAAE,SAAkB,EAAE,EAAE,gBAAgB,GACtF,OAAO,CAAC,CAAC,CAAC,CA0CZ;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AASD,wBAAsB,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAQzF;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAYD,KAAK,cAAc,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAWpE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAKhE;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAAE,EAC/F,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
@@ -0,0 +1,100 @@
1
+ export class GraphqlError extends Error {
2
+ name = "GraphqlError";
3
+ errors;
4
+ constructor(operation, errors) {
5
+ super(errors.length
6
+ ? `${operation} failed: ${errors.join("; ")}`
7
+ : `${operation} returned no data and no error`);
8
+ this.errors = errors;
9
+ }
10
+ }
11
+ export async function query(operation, document, variables, { automationUrl, accessToken, fetchImpl = fetch, timeoutMs = 20_000 }) {
12
+ const url = `${automationUrl.replace(/\/$/, "")}/graphql`;
13
+ let response;
14
+ let raw;
15
+ try {
16
+ response = await fetchImpl(url, {
17
+ method: "POST",
18
+ signal: AbortSignal.timeout(timeoutMs),
19
+ headers: {
20
+ "content-type": "application/json",
21
+ accept: "application/json",
22
+ authorization: `Bearer ${accessToken}`,
23
+ },
24
+ body: JSON.stringify({ query: document, variables, operationName: operation }),
25
+ });
26
+ raw = await response.text();
27
+ }
28
+ catch (error) {
29
+ throw new GraphqlError(operation, [`could not reach ${url}: ${error.message}`]);
30
+ }
31
+ if (response.status === 401) {
32
+ throw new GraphqlError(operation, ["the access token was rejected. Sign in again."]);
33
+ }
34
+ let payload;
35
+ try {
36
+ payload = JSON.parse(raw);
37
+ }
38
+ catch {
39
+ throw new GraphqlError(operation, [`HTTP ${response.status} with an unreadable body`]);
40
+ }
41
+ if (payload.errors?.length) {
42
+ throw new GraphqlError(operation, payload.errors.map((e) => e.message ?? "unknown error"));
43
+ }
44
+ if (payload.data === undefined || payload.data === null) {
45
+ throw new GraphqlError(operation, []);
46
+ }
47
+ return payload.data;
48
+ }
49
+ const PROJECTS_DOCUMENT = `query ConnectProjects {
50
+ projects {
51
+ uuid
52
+ name
53
+ }
54
+ }`;
55
+ export async function listProjects(transport) {
56
+ const data = await query("ConnectProjects", PROJECTS_DOCUMENT, {}, transport);
57
+ return data.projects ?? [];
58
+ }
59
+ const CREATE_KEY_DOCUMENT = `mutation ConnectCreateApiKey($params: CreateApiKeyInput!) {
60
+ createApiKey(params: $params) {
61
+ rawKey
62
+ errors
63
+ apiKey {
64
+ maskedKey
65
+ }
66
+ }
67
+ }`;
68
+ export function toErrorMessages(errors) {
69
+ if (errors === null || errors === undefined)
70
+ return [];
71
+ if (Array.isArray(errors))
72
+ return errors.map((error) => String(error)).filter(Boolean);
73
+ const single = String(errors).trim();
74
+ return single ? [single] : [];
75
+ }
76
+ export async function createApiKey(options, transport) {
77
+ const data = await query("ConnectCreateApiKey", CREATE_KEY_DOCUMENT, {
78
+ params: {
79
+ projectUuid: options.projectUuid,
80
+ name: options.name,
81
+ mcpAccess: options.mcpAccess,
82
+ },
83
+ }, transport);
84
+ const result = data.createApiKey;
85
+ if (!result)
86
+ throw new GraphqlError("ConnectCreateApiKey", ["the mutation returned no payload"]);
87
+ const messages = toErrorMessages(result.errors);
88
+ if (messages.length)
89
+ throw new GraphqlError("ConnectCreateApiKey", messages);
90
+ if (result.success === false) {
91
+ throw new GraphqlError("ConnectCreateApiKey", ["the deployment reported the request unsuccessful"]);
92
+ }
93
+ if (!result.rawKey) {
94
+ throw new GraphqlError("ConnectCreateApiKey", [
95
+ "no key was returned. The account may lack permission to manage api keys for this project.",
96
+ ]);
97
+ }
98
+ return { rawKey: result.rawKey, maskedKey: result.apiKey?.maskedKey ?? "" };
99
+ }
100
+ //# sourceMappingURL=graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export type HookEventName = "SessionStart" | "UserPromptSubmit" | "Stop" | "PreCompact" | "SessionEnd";
2
+ export interface HookInputBase {
3
+ readonly hook_event_name?: HookEventName;
4
+ readonly session_id?: string;
5
+ readonly transcript_path?: string;
6
+ readonly cwd?: string;
7
+ }
8
+ export interface SessionStartInput extends HookInputBase {
9
+ readonly source?: "startup" | "resume" | "clear" | "compact" | "fork";
10
+ }
11
+ export interface UserPromptSubmitInput extends HookInputBase {
12
+ readonly prompt_text?: string;
13
+ }
14
+ export interface StopInput extends HookInputBase {
15
+ readonly turn_number?: number;
16
+ readonly stop_reason?: string;
17
+ readonly last_assistant_message?: string;
18
+ }
19
+ export type HookInput = SessionStartInput & UserPromptSubmitInput & StopInput;
20
+ export declare function readHookInput(fd?: number): HookInput;
21
+ export declare function emitContext(event: HookEventName, additionalContext: string): void;
22
+ //# sourceMappingURL=hook-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-io.d.ts","sourceRoot":"","sources":["../src/hook-io.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,kBAAkB,GAClB,MAAM,GACN,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACvE;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,SAAS,CAAC;AAE9E,wBAAgB,aAAa,CAAC,EAAE,GAAE,MAAU,GAAG,SAAS,CAMvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAIjF"}
@@ -0,0 +1,13 @@
1
+ import { readFileSync } from "node:fs";
2
+ export function readHookInput(fd = 0) {
3
+ try {
4
+ return JSON.parse(readFileSync(fd, "utf8"));
5
+ }
6
+ catch {
7
+ return {};
8
+ }
9
+ }
10
+ export function emitContext(event, additionalContext) {
11
+ process.stdout.write(JSON.stringify({ hookSpecificOutput: { hookEventName: event, additionalContext } }));
12
+ }
13
+ //# sourceMappingURL=hook-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-io.js","sourceRoot":"","sources":["../src/hook-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgCvC,MAAM,UAAU,aAAa,CAAC,EAAE,GAAW,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAc,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,iBAAyB;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,kBAAkB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC,CACpF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=session-start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { emitContext, readHookInput } from "../hook-io.js";
6
+ const CONTENT_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "content");
7
+ readHookInput();
8
+ let directive;
9
+ try {
10
+ directive = readFileSync(join(CONTENT_ROOT, "session-start.md"), "utf8").trim();
11
+ }
12
+ catch {
13
+ process.exit(0);
14
+ }
15
+ emitContext("SessionStart", directive);
16
+ //# sourceMappingURL=session-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAE1F,aAAa,EAAE,CAAC;AAEhB,IAAI,SAAiB,CAAC;AACtB,IAAI,CAAC;IACH,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAClF,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { emitContext, readHookInput } from "../hook-io.js";
6
+ const CONTENT_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "content");
7
+ const CHECKPOINT_EVERY_TURNS = 5;
8
+ const turn = readHookInput().turn_number;
9
+ if (!Number.isInteger(turn) || turn < 1)
10
+ process.exit(0);
11
+ if (turn % CHECKPOINT_EVERY_TURNS !== 0)
12
+ process.exit(0);
13
+ let directive;
14
+ try {
15
+ directive = readFileSync(join(CONTENT_ROOT, "checkpoint.md"), "utf8").trim();
16
+ }
17
+ catch {
18
+ process.exit(0);
19
+ }
20
+ emitContext("Stop", directive);
21
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1F,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC,WAAW,CAAC;AACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAK,IAAe,GAAG,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE,IAAK,IAAe,GAAG,sBAAsB,KAAK,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErE,IAAI,SAAiB,CAAC;AACtB,IAAI,CAAC;IACH,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=user-prompt-submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-prompt-submit.d.ts","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":""}