@jitera/connect 0.1.1 → 1.2.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 (115) 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 +181 -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/claude-code.d.ts +20 -0
  69. package/dist/install/claude-code.d.ts.map +1 -0
  70. package/dist/install/claude-code.js +33 -0
  71. package/dist/install/claude-code.js.map +1 -0
  72. package/dist/install/render.d.ts +13 -0
  73. package/dist/install/render.d.ts.map +1 -0
  74. package/dist/install/render.js +22 -0
  75. package/dist/install/render.js.map +1 -0
  76. package/dist/install/skills.d.ts +16 -0
  77. package/dist/install/skills.d.ts.map +1 -0
  78. package/dist/install/skills.js +62 -0
  79. package/dist/install/skills.js.map +1 -0
  80. package/dist/manifest.d.ts +62 -0
  81. package/dist/manifest.d.ts.map +1 -0
  82. package/dist/manifest.js +5 -0
  83. package/dist/manifest.js.map +1 -0
  84. package/dist/mcp-client.d.ts +43 -0
  85. package/dist/mcp-client.d.ts.map +1 -0
  86. package/dist/mcp-client.js +85 -0
  87. package/dist/mcp-client.js.map +1 -0
  88. package/dist/mcp-config.d.ts +12 -0
  89. package/dist/mcp-config.d.ts.map +1 -0
  90. package/dist/mcp-config.js +45 -0
  91. package/dist/mcp-config.js.map +1 -0
  92. package/dist/proxy.d.ts +12 -0
  93. package/dist/proxy.d.ts.map +1 -0
  94. package/dist/proxy.js +54 -0
  95. package/dist/proxy.js.map +1 -0
  96. package/dist/session-marker.d.ts +4 -0
  97. package/dist/session-marker.d.ts.map +1 -0
  98. package/dist/session-marker.js +25 -0
  99. package/dist/session-marker.js.map +1 -0
  100. package/dist/toml-section.d.ts +12 -0
  101. package/dist/toml-section.d.ts.map +1 -0
  102. package/dist/toml-section.js +66 -0
  103. package/dist/toml-section.js.map +1 -0
  104. package/dist/validate.d.ts +11 -0
  105. package/dist/validate.d.ts.map +1 -0
  106. package/dist/validate.js +58 -0
  107. package/dist/validate.js.map +1 -0
  108. package/hooks/hooks.json +15 -2
  109. package/package.json +13 -6
  110. package/bin/jitera-connect.mjs +0 -120
  111. package/hooks/scripts/session-start.mjs +0 -36
  112. package/hooks/scripts/stop.mjs +0 -39
  113. package/src/adapters/cursor.mjs +0 -56
  114. package/src/environments.mjs +0 -46
  115. package/src/mcp-config.mjs +0 -45
@@ -1,16 +1,19 @@
1
1
  {
2
2
  "name": "jitera-connect",
3
- "version": "0.1.1",
3
+ "version": "0.6.0",
4
4
  "description": "Connect this workspace to a Jitera project: read documentation and source, and keep project memory up to date.",
5
5
  "author": {
6
6
  "name": "Jitera"
7
7
  },
8
8
  "mcpServers": {
9
9
  "jitera": {
10
- "type": "http",
11
- "url": "${user_config.jitera_mcp_url}",
12
- "headers": {
13
- "Authorization": "Bearer ${user_config.jitera_api_key}"
10
+ "command": "node",
11
+ "args": [
12
+ "${CLAUDE_PLUGIN_ROOT}/dist/bin/proxy.js"
13
+ ],
14
+ "env": {
15
+ "JITERA_ENVIRONMENT": "${user_config.environment}",
16
+ "JITERA_API_KEY": "${user_config.jitera_api_key}"
14
17
  }
15
18
  }
16
19
  },
@@ -22,11 +25,11 @@
22
25
  "sensitive": true,
23
26
  "required": true
24
27
  },
25
- "jitera_mcp_url": {
28
+ "environment": {
26
29
  "type": "string",
27
- "title": "MCP endpoint",
28
- "description": "Leave as-is for Jitera Cloud. Self-hosted and non-production deployments use a different host.",
29
- "default": "https://gateway-proxy.jitera.app/gateway/boost/mcp",
30
+ "title": "Environment",
31
+ "description": "Leave as studio for Jitera Cloud. Use studio-stage for staging, or studio-NN for a numbered pilot such as studio-04.",
32
+ "default": "studio",
30
33
  "required": true
31
34
  }
32
35
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jitera-connect",
3
- "version": "0.1.1",
3
+ "version": "0.6.0",
4
4
  "description": "Connect this workspace to a Jitera project: read documentation and source, and keep project memory up to date.",
5
5
  "skills": "./skills/"
6
6
  }
package/README.md CHANGED
@@ -16,12 +16,26 @@ codex plugin marketplace add jitera-product/connect
16
16
  ## cursor
17
17
 
18
18
  ```
19
- npx @jitera-product/connect
19
+ npx @jitera/connect
20
20
  ```
21
21
 
22
22
  ## pilot and staging environments
23
23
 
24
+ claude code, at install:
25
+
26
+ ```
27
+ /plugin install jitera-connect --config environment=studio-04
28
+ ```
29
+
30
+ claude code, after installing:
31
+
32
+ ```
33
+ /plugin configure jitera-connect
34
+ ```
35
+
36
+ cursor:
37
+
24
38
  ```
25
- npx @jitera-product/connect --env=studio-stage
26
- npx @jitera-product/connect --env=studio-06
39
+ npx @jitera/connect --env=studio-04
40
+ npx @jitera/connect --env=studio-stage
27
41
  ```
@@ -0,0 +1,4 @@
1
+ import type { Adapter } from "./types.ts";
2
+ export declare const SERVER_TABLE = "mcp_servers.jitera";
3
+ export declare const codex: Adapter;
4
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AAEzE,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAajD,eAAO,MAAM,KAAK,EAAE,OAqCnB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { ensureRootKey, removeTable, upsertTable } from "../toml-section.js";
4
+ export const SERVER_TABLE = "mcp_servers.jitera";
5
+ const RMCP_FLAG = "experimental_use_rmcp_client";
6
+ const API_KEY_ENV = "JITERA_API_KEY";
7
+ function read(path) {
8
+ return existsSync(path) ? readFileSync(path, "utf8") : "";
9
+ }
10
+ function write(path, content) {
11
+ mkdirSync(dirname(path), { recursive: true });
12
+ writeFileSync(path, content, "utf8");
13
+ }
14
+ export const codex = {
15
+ id: "codex",
16
+ label: "Codex",
17
+ secretStrategy: "env",
18
+ detect({ home }) {
19
+ return existsSync(join(home, ".codex"));
20
+ },
21
+ mcpConfigPath({ home }) {
22
+ return join(home, ".codex", "config.toml");
23
+ },
24
+ skillsDirs({ scope, home, cwd }) {
25
+ const root = scope === "user" ? home : cwd;
26
+ return [join(root, ".agents", "skills")];
27
+ },
28
+ install(context) {
29
+ const path = this.mcpConfigPath(context);
30
+ const before = read(path);
31
+ const body = [
32
+ `url = "${context.mcpUrl ?? ""}"`,
33
+ `bearer_token_env_var = "${API_KEY_ENV}"`,
34
+ ].join("\n");
35
+ const after = ensureRootKey(upsertTable(before, SERVER_TABLE, body), RMCP_FLAG, "true");
36
+ if (!context.dryRun)
37
+ write(path, after);
38
+ return { path, config: {}, changed: before !== after };
39
+ },
40
+ uninstall(context) {
41
+ const path = this.mcpConfigPath(context);
42
+ const before = read(path);
43
+ const after = removeTable(before, SERVER_TABLE);
44
+ if (!context.dryRun && before !== after)
45
+ write(path, after);
46
+ return { path, config: {}, changed: before !== after };
47
+ },
48
+ };
49
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG7E,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;AACjD,MAAM,SAAS,GAAG,8BAA8B,CAAC;AACjD,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,OAAe;IAC1C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,OAAO;IACd,cAAc,EAAE,KAAK;IAErB,MAAM,CAAC,EAAE,IAAI,EAAE;QACb,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa,CAAC,EAAE,IAAI,EAAE;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,UAAU,OAAO,CAAC,MAAM,IAAI,EAAE,GAAG;YACjC,2BAA2B,WAAW,GAAG;SAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;YAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;IACzD,CAAC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Adapter } from "./types.ts";
2
+ export declare const SERVER_NAME = "jitera";
3
+ export declare const cursor: Adapter;
4
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,YAAY,CAAC;AASzE,eAAO,MAAM,WAAW,WAAW,CAAC;AAYpC,eAAO,MAAM,MAAM,EAAE,OAmCpB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { mergeServer, readConfig, removeServer, writeConfig, } from "../mcp-config.js";
4
+ export const SERVER_NAME = "jitera";
5
+ const CONFIG_KEY = "mcpServers";
6
+ const API_KEY_ENV = "JITERA_API_KEY";
7
+ function serverEntry(mcpUrl) {
8
+ return {
9
+ type: "http",
10
+ url: mcpUrl,
11
+ headers: { Authorization: `Bearer \${env:${API_KEY_ENV}}` },
12
+ };
13
+ }
14
+ export const cursor = {
15
+ id: "cursor",
16
+ label: "Cursor",
17
+ secretStrategy: "env",
18
+ detect({ home }) {
19
+ return existsSync(join(home, ".cursor"));
20
+ },
21
+ mcpConfigPath({ scope, home, cwd }) {
22
+ return scope === "user"
23
+ ? join(home, ".cursor", "mcp.json")
24
+ : join(cwd, ".cursor", "mcp.json");
25
+ },
26
+ skillsDirs({ scope, home, cwd }) {
27
+ const root = scope === "user" ? home : cwd;
28
+ return [join(root, ".agents", "skills"), join(root, ".claude", "skills")];
29
+ },
30
+ install(context) {
31
+ const path = this.mcpConfigPath(context);
32
+ const before = readConfig(path);
33
+ const after = mergeServer(before, CONFIG_KEY, SERVER_NAME, serverEntry(context.mcpUrl ?? ""));
34
+ if (!context.dryRun)
35
+ writeConfig(path, after);
36
+ return { path, config: after, changed: JSON.stringify(before) !== JSON.stringify(after) };
37
+ },
38
+ uninstall(context) {
39
+ const path = this.mcpConfigPath(context);
40
+ const before = readConfig(path);
41
+ const after = removeServer(before, CONFIG_KEY, SERVER_NAME);
42
+ if (!context.dryRun)
43
+ writeConfig(path, after);
44
+ return { path, config: after, changed: JSON.stringify(before) !== JSON.stringify(after) };
45
+ },
46
+ };
47
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,GAEZ,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AACpC,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,EAAE,aAAa,EAAE,iBAAiB,WAAW,GAAG,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,KAAK;IAErB,MAAM,CAAC,EAAE,IAAI,EAAE;QACb,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;QAChC,OAAO,KAAK,KAAK,MAAM;YACrB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5F,CAAC;IAED,SAAS,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5F,CAAC;CACF,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { ClientConfig } from "../mcp-config.ts";
2
+ export type Scope = "project" | "user";
3
+ export interface AdapterContext {
4
+ readonly scope: Scope;
5
+ readonly home: string;
6
+ readonly cwd: string;
7
+ readonly mcpUrl?: string;
8
+ readonly dryRun?: boolean;
9
+ }
10
+ export interface AdapterResult {
11
+ readonly path: string;
12
+ readonly config: ClientConfig;
13
+ readonly changed: boolean;
14
+ }
15
+ export interface Adapter {
16
+ readonly id: string;
17
+ readonly label: string;
18
+ readonly secretStrategy: "keychain" | "env" | "inline";
19
+ detect(context: Pick<AdapterContext, "home">): boolean;
20
+ mcpConfigPath(context: AdapterContext): string;
21
+ skillsDirs(context: AdapterContext): readonly string[];
22
+ install(context: AdapterContext): AdapterResult;
23
+ uninstall(context: AdapterContext): AdapterResult;
24
+ }
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;IACvD,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/C,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CAAC;IACvD,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;IAChD,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC;CACnD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env node
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { codex } from "../adapters/codex.js";
6
+ import { cursor } from "../adapters/cursor.js";
7
+ import { MalformedConfigError } from "../mcp-config.js";
8
+ import { writeAgentsMd } from "../install/agents-md.js";
9
+ import { DEFAULT_BRAND } from "../install/render.js";
10
+ import { installSkills, uninstallSkills } from "../install/skills.js";
11
+ import { DiscoveryError, discoverDeployment } from "../discovery.js";
12
+ import { UnknownEnvironmentError, resolveStudioUrl } from "../environments.js";
13
+ const ADAPTERS = [cursor, codex];
14
+ const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
15
+ function parseArgs(argv) {
16
+ const args = { scope: "project", dryRun: false, uninstall: false, print: false, skipSkills: false, help: false };
17
+ for (const arg of argv) {
18
+ if (arg.startsWith("--env="))
19
+ args.environment = arg.slice("--env=".length);
20
+ else if (arg === "--dry-run")
21
+ args.dryRun = true;
22
+ else if (arg === "--uninstall")
23
+ args.uninstall = true;
24
+ else if (arg === "--user")
25
+ args.scope = "user";
26
+ else if (arg === "--project")
27
+ args.scope = "project";
28
+ else if (arg === "--print")
29
+ args.print = true;
30
+ else if (arg === "--skip-skills")
31
+ args.skipSkills = true;
32
+ else if (arg.startsWith("--mcp-url="))
33
+ args.mcpUrl = arg.slice("--mcp-url=".length);
34
+ else if (arg === "--help" || arg === "-h")
35
+ args.help = true;
36
+ else
37
+ args.unknown = arg;
38
+ }
39
+ return args;
40
+ }
41
+ const USAGE = [
42
+ "usage: npx @jitera/connect [--env=<environment>] [options]",
43
+ "",
44
+ " --env=studio-stage staging",
45
+ " --env=studio-04 numbered pilot",
46
+ " omit --env for production",
47
+ "",
48
+ " --user write user scoped config instead of project scoped",
49
+ " --dry-run report what would change without writing",
50
+ " --uninstall remove the jitera server",
51
+ " --print print resolved endpoints and exit",
52
+ " --skip-skills write mcp config only, no skills or AGENTS.md",
53
+ " --mcp-url=<url> bypass discovery, for air-gapped or self-hosted setups",
54
+ ].join("\n");
55
+ const args = parseArgs(process.argv.slice(2));
56
+ if (args.help) {
57
+ process.stdout.write(`${USAGE}\n`);
58
+ process.exit(0);
59
+ }
60
+ if (args.unknown) {
61
+ process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
62
+ process.exit(2);
63
+ }
64
+ let studioUrl;
65
+ try {
66
+ studioUrl = resolveStudioUrl(args.environment);
67
+ }
68
+ catch (error) {
69
+ if (error instanceof UnknownEnvironmentError) {
70
+ process.stderr.write(`error: ${error.message}\n`);
71
+ process.exit(2);
72
+ }
73
+ throw error;
74
+ }
75
+ let mcpUrl;
76
+ let apiBaseUrl;
77
+ let brand;
78
+ if (args.mcpUrl) {
79
+ mcpUrl = args.mcpUrl;
80
+ apiBaseUrl = "";
81
+ brand = DEFAULT_BRAND;
82
+ }
83
+ else {
84
+ try {
85
+ const deployment = await discoverDeployment({ environment: args.environment, studioUrl: process.env["JITERA_STUDIO_URL"] });
86
+ mcpUrl = deployment.mcpUrl;
87
+ apiBaseUrl = deployment.apiBaseUrl;
88
+ brand = deployment.brand;
89
+ }
90
+ catch (error) {
91
+ if (error instanceof DiscoveryError) {
92
+ process.stderr.write(`error: ${error.message}\n`);
93
+ process.exit(1);
94
+ }
95
+ throw error;
96
+ }
97
+ }
98
+ if (args.print) {
99
+ process.stdout.write(`${JSON.stringify({ mcpUrl, apiBaseUrl, studioUrl }, undefined, 2)}\n`);
100
+ process.exit(0);
101
+ }
102
+ const context = {
103
+ scope: args.scope,
104
+ home: homedir(),
105
+ cwd: process.cwd(),
106
+ mcpUrl,
107
+ dryRun: args.dryRun,
108
+ };
109
+ const detected = ADAPTERS.filter((adapter) => adapter.detect(context));
110
+ if (detected.length === 0) {
111
+ process.stderr.write(`error: no supported assistant detected. Looked for: ${ADAPTERS.map((a) => a.label).join(", ")}.\n` +
112
+ `Claude Code and Codex install through their own plugin marketplaces, see the readme.\n`);
113
+ process.exit(1);
114
+ }
115
+ const results = [];
116
+ for (const adapter of detected) {
117
+ try {
118
+ results.push({
119
+ adapter,
120
+ result: args.uninstall ? adapter.uninstall(context) : adapter.install(context),
121
+ });
122
+ }
123
+ catch (error) {
124
+ if (error instanceof MalformedConfigError) {
125
+ process.stderr.write(`error: ${error.message}\n`);
126
+ process.exit(1);
127
+ }
128
+ throw error;
129
+ }
130
+ }
131
+ const verb = args.uninstall ? "removed from" : "written to";
132
+ for (const { adapter, result } of results) {
133
+ process.stdout.write(`${adapter.label}: ${result.changed ? verb : "already up to date in"} ${result.path}\n`);
134
+ }
135
+ if (!args.skipSkills) {
136
+ const values = { BRAND: brand };
137
+ const targetDirs = [...new Set(detected.flatMap((adapter) => adapter.skillsDirs(context)))];
138
+ const skills = args.uninstall
139
+ ? uninstallSkills({ packageRoot: PACKAGE_ROOT, targetDirs, dryRun: args.dryRun })
140
+ : installSkills({ packageRoot: PACKAGE_ROOT, targetDirs, values, dryRun: args.dryRun });
141
+ const skillVerb = args.uninstall ? "removed from" : "written to";
142
+ process.stdout.write(skills.changed
143
+ ? `Skills: ${skills.skills.length} ${skillVerb} ${targetDirs.join(", ")}\n`
144
+ : `Skills: already up to date in ${targetDirs.join(", ")}\n`);
145
+ if (!args.uninstall) {
146
+ const agents = writeAgentsMd({
147
+ packageRoot: PACKAGE_ROOT,
148
+ projectRoot: context.cwd,
149
+ values,
150
+ dryRun: args.dryRun,
151
+ });
152
+ process.stdout.write(agents.changed
153
+ ? `Instructions: ${agents.agents.action} block in ${agents.agentsPath}\n`
154
+ : `Instructions: already up to date in ${agents.agentsPath}\n`);
155
+ }
156
+ }
157
+ if (args.dryRun) {
158
+ process.stdout.write("\ndry run, nothing was written\n");
159
+ }
160
+ else if (!args.uninstall) {
161
+ process.stdout.write(`\nendpoint ${mcpUrl}\n`);
162
+ process.stdout.write("export JITERA_API_KEY=<your api key> before starting your assistant\n");
163
+ }
164
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/bin/login.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env node
2
+ import { createInterface } from "node:readline/promises";
3
+ import { DiscoveryError, discoverDeployment } from "../discovery.js";
4
+ import { UnknownEnvironmentError } from "../environments.js";
5
+ import { DeviceFlowError, pollForAccessToken, requestDeviceAuthorization, } from "../device-flow.js";
6
+ import { GraphqlError, createApiKey, listProjects } from "../graphql.js";
7
+ import { installClaudeCodePlugin } from "../install/claude-code.js";
8
+ import { writeAgentsMd } from "../install/agents-md.js";
9
+ import { installSkills } from "../install/skills.js";
10
+ import { codex } from "../adapters/codex.js";
11
+ import { cursor } from "../adapters/cursor.js";
12
+ import { homedir } from "node:os";
13
+ import { dirname, join } from "node:path";
14
+ import { fileURLToPath } from "node:url";
15
+ const USAGE = [
16
+ "usage: npx @jitera/connect login [--env=<environment>] [options]",
17
+ "",
18
+ " --env=studio-04 target a pilot; omit for production",
19
+ " --project=<uuid> skip the project prompt",
20
+ " --read-only create a read-only key (default is read + write)",
21
+ " --name=<name> name for the created key",
22
+ " --json print the result as json",
23
+ " --install configure your assistants with the new key",
24
+ ].join("\n");
25
+ function parseArgs(argv) {
26
+ const args = { access: "read_write", keyName: "Jitera Connect", json: false, install: false, help: false };
27
+ for (const arg of argv) {
28
+ if (arg === "login")
29
+ continue;
30
+ else if (arg.startsWith("--env="))
31
+ args.environment = arg.slice("--env=".length);
32
+ else if (arg.startsWith("--project="))
33
+ args.project = arg.slice("--project=".length);
34
+ else if (arg.startsWith("--name="))
35
+ args.keyName = arg.slice("--name=".length);
36
+ else if (arg === "--read-only")
37
+ args.access = "read";
38
+ else if (arg === "--json")
39
+ args.json = true;
40
+ else if (arg === "--install")
41
+ args.install = true;
42
+ else if (arg === "--help" || arg === "-h")
43
+ args.help = true;
44
+ else
45
+ args.unknown = arg;
46
+ }
47
+ return args;
48
+ }
49
+ function fail(message, code = 1) {
50
+ process.stderr.write(`error: ${message}\n`);
51
+ process.exit(code);
52
+ }
53
+ const args = parseArgs(process.argv.slice(2));
54
+ if (args.help) {
55
+ process.stdout.write(`${USAGE}\n`);
56
+ process.exit(0);
57
+ }
58
+ if (args.unknown) {
59
+ process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
60
+ process.exit(2);
61
+ }
62
+ let automationUrl = process.env["JITERA_AUTOMATION_URL"] ?? "";
63
+ let mcpUrl = process.env["JITERA_MCP_URL"] ?? "";
64
+ let brand = "Jitera";
65
+ if (!automationUrl) {
66
+ try {
67
+ const deployment = await discoverDeployment({
68
+ environment: args.environment,
69
+ studioUrl: process.env["JITERA_STUDIO_URL"],
70
+ });
71
+ automationUrl = deployment.automationUrl;
72
+ mcpUrl = mcpUrl || deployment.mcpUrl;
73
+ brand = deployment.brand;
74
+ }
75
+ catch (error) {
76
+ if (error instanceof UnknownEnvironmentError)
77
+ fail(error.message, 2);
78
+ if (error instanceof DiscoveryError)
79
+ fail(error.message);
80
+ throw error;
81
+ }
82
+ }
83
+ if (!automationUrl) {
84
+ fail("this deployment did not advertise an automation url, so sign-in cannot continue.");
85
+ }
86
+ let authorization;
87
+ try {
88
+ authorization = await requestDeviceAuthorization({ automationUrl });
89
+ }
90
+ catch (error) {
91
+ if (error instanceof DeviceFlowError)
92
+ fail(error.message);
93
+ throw error;
94
+ }
95
+ const openUrl = authorization.verificationUriComplete ?? authorization.verificationUri;
96
+ process.stdout.write(`\nSign in to ${brand} to authorise this device.\n\n`);
97
+ process.stdout.write(` Open: ${openUrl}\n`);
98
+ process.stdout.write(` Code: ${authorization.userCode}\n\n`);
99
+ process.stdout.write("Waiting for approval…\n");
100
+ let accessToken;
101
+ try {
102
+ accessToken = await pollForAccessToken({ automationUrl, authorization });
103
+ }
104
+ catch (error) {
105
+ if (error instanceof DeviceFlowError)
106
+ fail(error.message);
107
+ throw error;
108
+ }
109
+ const transport = { automationUrl, accessToken };
110
+ let projectUuid = args.project;
111
+ if (!projectUuid) {
112
+ let projects;
113
+ try {
114
+ projects = await listProjects(transport);
115
+ }
116
+ catch (error) {
117
+ if (error instanceof GraphqlError)
118
+ fail(error.message);
119
+ throw error;
120
+ }
121
+ if (projects.length === 0)
122
+ fail("this account has no projects to connect to.");
123
+ if (projects.length === 1) {
124
+ projectUuid = projects[0]?.uuid;
125
+ process.stdout.write(`\nProject: ${projects[0]?.name}\n`);
126
+ }
127
+ else {
128
+ process.stdout.write("\nWhich project?\n\n");
129
+ projects.forEach((project, index) => {
130
+ process.stdout.write(` ${index + 1}. ${project.name}\n`);
131
+ });
132
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
133
+ const answer = await rl.question(`\nNumber [1-${projects.length}]: `);
134
+ rl.close();
135
+ const choice = projects[Number(answer.trim()) - 1];
136
+ if (!choice)
137
+ fail(`"${answer.trim()}" is not one of the listed projects.`, 2);
138
+ projectUuid = choice.uuid;
139
+ }
140
+ }
141
+ let created;
142
+ try {
143
+ created = await createApiKey({ projectUuid: projectUuid, name: args.keyName, mcpAccess: args.access }, transport);
144
+ }
145
+ catch (error) {
146
+ if (error instanceof GraphqlError)
147
+ fail(error.message);
148
+ throw error;
149
+ }
150
+ if (args.install) {
151
+ const environment = args.environment ?? "studio";
152
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
153
+ const values = { BRAND: brand };
154
+ const claude = installClaudeCodePlugin({ apiKey: created.rawKey, environment });
155
+ process.stdout.write(claude.installed
156
+ ? "\nClaude Code: installed and configured, key stored in your keychain.\n"
157
+ : `\nClaude Code: skipped (${claude.reason}).\n`);
158
+ const context = { scope: "project", home: homedir(), cwd: process.cwd(), mcpUrl };
159
+ const local = [cursor, codex].filter((adapter) => adapter.detect(context));
160
+ if (local.length) {
161
+ for (const adapter of local) {
162
+ const result = adapter.install(context);
163
+ process.stdout.write(`${adapter.label}: ${result.path}\n`);
164
+ }
165
+ const targetDirs = [...new Set(local.flatMap((adapter) => adapter.skillsDirs(context)))];
166
+ installSkills({ packageRoot, targetDirs, values });
167
+ writeAgentsMd({ packageRoot, projectRoot: context.cwd, values });
168
+ process.stdout.write("Skills and AGENTS.md written.\n");
169
+ process.stdout.write(`\nFor Cursor and Codex, export the key so they can read it:\n`);
170
+ process.stdout.write(` export JITERA_API_KEY=${created.rawKey}\n`);
171
+ }
172
+ }
173
+ if (args.json) {
174
+ process.stdout.write(`${JSON.stringify({ apiKey: created.rawKey, maskedKey: created.maskedKey, projectUuid, mcpAccess: args.access }, undefined, 2)}\n`);
175
+ }
176
+ else if (!args.install) {
177
+ process.stdout.write(`\nCreated a ${args.access === "read" ? "read-only" : "read + write"} key.\n\n`);
178
+ process.stdout.write(` export JITERA_API_KEY=${created.rawKey}\n\n`);
179
+ process.stdout.write("Then run npx @jitera/connect to configure your assistants.\n");
180
+ }
181
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/bin/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/bin/proxy.ts"],"names":[],"mappings":""}