@jitera/connect 1.2.3 → 1.4.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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +50 -0
- package/content/session-start-unconfigured.md +11 -0
- package/content/session-start.md +5 -4
- package/dist/adapters/cursor.js +1 -1
- package/dist/adapters/cursor.js.map +1 -1
- package/dist/bin/cli.js +11 -18
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/connect.js +3 -0
- package/dist/bin/connect.js.map +1 -1
- package/dist/bin/init.d.ts +3 -0
- package/dist/bin/init.d.ts.map +1 -0
- package/dist/bin/init.js +93 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/login.js +97 -31
- package/dist/bin/login.js.map +1 -1
- package/dist/bin/proxy.js +15 -1
- package/dist/bin/proxy.js.map +1 -1
- package/dist/graphql.d.ts +8 -2
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +18 -11
- package/dist/graphql.js.map +1 -1
- package/dist/hooks/session-start.js +27 -2
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/install/claude-code.d.ts +2 -0
- package/dist/install/claude-code.d.ts.map +1 -1
- package/dist/install/claude-code.js +28 -3
- package/dist/install/claude-code.js.map +1 -1
- package/dist/install/project-root.d.ts +2 -0
- package/dist/install/project-root.d.ts.map +1 -0
- package/dist/install/project-root.js +9 -0
- package/dist/install/project-root.js.map +1 -0
- package/dist/project-marker.d.ts +15 -0
- package/dist/project-marker.d.ts.map +1 -0
- package/dist/project-marker.js +59 -0
- package/dist/project-marker.js.map +1 -0
- package/dist/proxy.d.ts +6 -2
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +13 -3
- package/dist/proxy.js.map +1 -1
- package/dist/select.d.ts +25 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +78 -0
- package/dist/select.js.map +1 -0
- package/dist/theme.d.ts +29 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +69 -0
- package/dist/theme.js.map +1 -0
- package/package.json +1 -1
package/dist/bin/proxy.js
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { join, dirname } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
2
5
|
import { DiscoveryError } from "../discovery.js";
|
|
3
6
|
import { UnknownEnvironmentError } from "../environments.js";
|
|
7
|
+
import { render } from "../install/render.js";
|
|
4
8
|
import { configFromEnvironment, runProxy } from "../proxy.js";
|
|
9
|
+
const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
10
|
+
function loadInstructions(brand) {
|
|
11
|
+
try {
|
|
12
|
+
const template = readFileSync(join(PACKAGE_ROOT, "content", "instructions.md"), "utf8");
|
|
13
|
+
return render(template, { BRAND: brand });
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
5
19
|
if (!process.env["JITERA_API_KEY"]) {
|
|
6
20
|
process.stderr.write("jitera-connect proxy: no api key configured. Run /plugin configure jitera-connect.\n");
|
|
7
21
|
process.exit(2);
|
|
@@ -15,5 +29,5 @@ catch (error) {
|
|
|
15
29
|
process.stderr.write(`jitera-connect proxy: ${known ? error.message : String(error)}\n`);
|
|
16
30
|
process.exit(2);
|
|
17
31
|
}
|
|
18
|
-
await runProxy(config, { input: process.stdin, output: process.stdout, log: process.stderr });
|
|
32
|
+
await runProxy({ url: config.url, apiKey: config.apiKey, instructions: loadInstructions(config.brand) }, { input: process.stdin, output: process.stdout, log: process.stderr });
|
|
19
33
|
//# sourceMappingURL=proxy.js.map
|
package/dist/bin/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/bin/proxy.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sFAAsF,CACvF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,MAAM,CAAC;AACX,IAAI,CAAC;IACH,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,MAAM,KAAK,GAAG,KAAK,YAAY,uBAAuB,IAAI,KAAK,YAAY,cAAc,CAAC;IAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,CAAC,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/bin/proxy.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,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE/E,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;QACxF,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sFAAsF,CACvF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,MAAM,CAAC;AACX,IAAI,CAAC;IACH,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,MAAM,KAAK,GAAG,KAAK,YAAY,uBAAuB,IAAI,KAAK,YAAY,cAAc,CAAC;IAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,CAAC,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,QAAQ,CACZ,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACxF,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,CACtE,CAAC"}
|
package/dist/graphql.d.ts
CHANGED
|
@@ -13,9 +13,15 @@ export declare function query<T>(operation: string, document: string, variables:
|
|
|
13
13
|
export interface ProjectSummary {
|
|
14
14
|
readonly uuid: string;
|
|
15
15
|
readonly name: string;
|
|
16
|
+
readonly canManageApiKey: boolean;
|
|
16
17
|
}
|
|
17
|
-
export
|
|
18
|
-
|
|
18
|
+
export interface Organisation {
|
|
19
|
+
readonly slug: string;
|
|
20
|
+
readonly name: string | null;
|
|
21
|
+
readonly personal: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function listOrganisations(transport: GraphqlTransport): Promise<Organisation[]>;
|
|
24
|
+
export declare function listProjects(transport: GraphqlTransport, organisation?: Organisation): Promise<ProjectSummary[]>;
|
|
19
25
|
export type McpAccess = "read" | "read_write";
|
|
20
26
|
export interface CreatedApiKey {
|
|
21
27
|
readonly rawKey: string;
|
package/dist/graphql.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;IACtB,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA+BD,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAW5F;AAqCD,wBAAsB,YAAY,CAChC,SAAS,EAAE,gBAAgB,EAC3B,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,cAAc,EAAE,CAAC,CAiB3B;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"}
|
package/dist/graphql.js
CHANGED
|
@@ -51,6 +51,7 @@ const PROJECTS_DOCUMENT = `query ConnectProjects($project: ProjectParams) {
|
|
|
51
51
|
projects {
|
|
52
52
|
uuid
|
|
53
53
|
name
|
|
54
|
+
canManageApiKey
|
|
54
55
|
}
|
|
55
56
|
errors
|
|
56
57
|
}
|
|
@@ -59,33 +60,39 @@ const TEAMS_DOCUMENT = `query ConnectTeams {
|
|
|
59
60
|
teams {
|
|
60
61
|
slug
|
|
61
62
|
name
|
|
63
|
+
type
|
|
62
64
|
}
|
|
63
65
|
}`;
|
|
64
|
-
export async function
|
|
66
|
+
export async function listOrganisations(transport) {
|
|
65
67
|
try {
|
|
66
68
|
const data = await query("ConnectTeams", TEAMS_DOCUMENT, {}, transport);
|
|
67
69
|
return (data.teams ?? [])
|
|
68
|
-
.
|
|
69
|
-
.
|
|
70
|
+
.filter((team) => Boolean(team.slug))
|
|
71
|
+
.map((team) => ({ slug: team.slug, name: team.name, personal: team.type === "personal" }));
|
|
70
72
|
}
|
|
71
73
|
catch {
|
|
72
74
|
return [];
|
|
73
75
|
}
|
|
74
76
|
}
|
|
77
|
+
const PROJECT_PAGE_SIZE = 100;
|
|
75
78
|
async function projectsForScope(scope, transport) {
|
|
76
|
-
const data = await query("ConnectProjects", PROJECTS_DOCUMENT, { project: scope }, transport);
|
|
79
|
+
const data = await query("ConnectProjects", PROJECTS_DOCUMENT, { project: { ...scope, per: PROJECT_PAGE_SIZE } }, transport);
|
|
77
80
|
const messages = toErrorMessages(data.projects?.errors);
|
|
78
81
|
if (messages.length)
|
|
79
82
|
throw new GraphqlError("ConnectProjects", messages);
|
|
80
83
|
return [...(data.projects?.projects ?? [])];
|
|
81
84
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
function scopesFor(organisation) {
|
|
86
|
+
if (organisation && !organisation.personal) {
|
|
87
|
+
return [{ organisationSlug: organisation.slug }];
|
|
88
|
+
}
|
|
89
|
+
const scopes = [{}, { onlySharedProjects: true }];
|
|
90
|
+
if (organisation)
|
|
91
|
+
scopes.push({ organisationSlug: organisation.slug });
|
|
92
|
+
return scopes;
|
|
93
|
+
}
|
|
94
|
+
export async function listProjects(transport, organisation) {
|
|
95
|
+
const scopes = scopesFor(organisation);
|
|
89
96
|
const results = await Promise.all(scopes.map((scope, index) => projectsForScope(scope, transport).catch((error) => {
|
|
90
97
|
if (index === 0)
|
|
91
98
|
throw error;
|
package/dist/graphql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACnB,IAAI,GAAG,cAAc,CAAC;IAC/B,MAAM,CAAoB;IAEnC,YAAY,SAAiB,EAAE,MAAyB;QACtD,KAAK,CACH,MAAM,CAAC,MAAM;YACX,CAAC,CAAC,GAAG,SAAS,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC7C,CAAC,CAAC,GAAG,SAAS,gCAAgC,CACjD,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAcD,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,SAAiB,EACjB,QAAgB,EAChB,SAAkC,EAClC,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG,MAAM,EAAoB;IAEvF,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC;IAE1D,IAAI,QAAkB,CAAC;IACvB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAC9B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;SAC/E,CAAC,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,mBAAmB,GAAG,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,QAAQ,CAAC,MAAM,0BAA0B,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,YAAY,CACpB,SAAS,EACT,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,CACxD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,39 @@ import { readFileSync } from "node:fs";
|
|
|
3
3
|
import { join, dirname } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { emitContext, readHookInput } from "../hook-io.js";
|
|
6
|
+
import { readProjectMarker } from "../project-marker.js";
|
|
6
7
|
const CONTENT_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "content");
|
|
7
|
-
readHookInput();
|
|
8
|
+
const input = readHookInput();
|
|
9
|
+
// Claude Code exports plugin userConfig to hooks as CLAUDE_PLUGIN_OPTION_<KEY>.
|
|
10
|
+
// Without a key the mcp server cannot start, so claiming the tools exist would
|
|
11
|
+
// teach the model to call tools that are not there.
|
|
12
|
+
const apiKey = (process.env["CLAUDE_PLUGIN_OPTION_JITERA_API_KEY"] ?? "").trim();
|
|
13
|
+
const configuredEnvironment = (process.env["CLAUDE_PLUGIN_OPTION_ENVIRONMENT"] ?? "").trim();
|
|
14
|
+
const file = apiKey ? "session-start.md" : "session-start-unconfigured.md";
|
|
8
15
|
let directive;
|
|
9
16
|
try {
|
|
10
|
-
directive = readFileSync(join(CONTENT_ROOT,
|
|
17
|
+
directive = readFileSync(join(CONTENT_ROOT, file), "utf8").trim();
|
|
11
18
|
}
|
|
12
19
|
catch {
|
|
13
20
|
process.exit(0);
|
|
14
21
|
}
|
|
22
|
+
// A committed .jitera.json binds the repository to a deployment, so teammates
|
|
23
|
+
// who have not connected yet get the exact command, and a mismatched plugin
|
|
24
|
+
// configuration is called out instead of silently reading the wrong project.
|
|
25
|
+
const marker = readProjectMarker(input.cwd ?? process.cwd());
|
|
26
|
+
if (marker?.environment) {
|
|
27
|
+
const login = `npx @jitera/connect login --env=${marker.environment} --install`;
|
|
28
|
+
if (!apiKey) {
|
|
29
|
+
directive +=
|
|
30
|
+
`\n\nThis repository declares its connection in .jitera.json ` +
|
|
31
|
+
`(environment "${marker.environment}"). Suggest the user connects with:\n\n ${login}`;
|
|
32
|
+
}
|
|
33
|
+
else if (configuredEnvironment && configuredEnvironment !== marker.environment) {
|
|
34
|
+
directive +=
|
|
35
|
+
`\n\nNote: this repository's .jitera.json declares environment ` +
|
|
36
|
+
`"${marker.environment}", but the plugin is configured for "${configuredEnvironment}". ` +
|
|
37
|
+
`Project context may come from the wrong deployment. Suggest rebinding with:\n\n ${login}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
15
40
|
emitContext("SessionStart", directive);
|
|
16
41
|
//# sourceMappingURL=session-start.js.map
|
|
@@ -1 +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;
|
|
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;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAE1F,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;AAE9B,gFAAgF;AAChF,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACjF,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAE3E,IAAI,SAAiB,CAAC;AACtB,IAAI,CAAC;IACH,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACpE,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7D,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,mCAAmC,MAAM,CAAC,WAAW,YAAY,CAAC;IAChF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS;YACP,8DAA8D;gBAC9D,iBAAiB,MAAM,CAAC,WAAW,8CAA8C,KAAK,EAAE,CAAC;IAC7F,CAAC;SAAM,IAAI,qBAAqB,IAAI,qBAAqB,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;QACjF,SAAS;YACP,gEAAgE;gBAChE,IAAI,MAAM,CAAC,WAAW,wCAAwC,qBAAqB,KAAK;gBACxF,sFAAsF,KAAK,EAAE,CAAC;IAClG,CAAC;AACH,CAAC;AAED,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare const MARKETPLACE = "jitera-product/connect";
|
|
2
|
+
export declare const MARKETPLACE_NAME = "jitera";
|
|
2
3
|
export declare const PLUGIN_NAME = "jitera-connect";
|
|
3
4
|
export interface CommandRunner {
|
|
4
5
|
(command: string, args: readonly string[]): {
|
|
5
6
|
status: number;
|
|
7
|
+
stdout: string;
|
|
6
8
|
stderr: string;
|
|
7
9
|
};
|
|
8
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/install/claude-code.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,2BAA2B,CAAC;AACpD,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/install/claude-code.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,2BAA2B,CAAC;AACpD,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAWD,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,aAA6B,GAAG,OAAO,CAEjF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,WAAW,EACX,GAAmB,GACpB,EAAE,oBAAoB,GAAG,mBAAmB,CAgD5C"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
export const MARKETPLACE = "jitera-product/connect";
|
|
3
|
+
export const MARKETPLACE_NAME = "jitera";
|
|
3
4
|
export const PLUGIN_NAME = "jitera-connect";
|
|
4
5
|
const defaultRunner = (command, args) => {
|
|
5
6
|
const result = spawnSync(command, [...args], { encoding: "utf8" });
|
|
6
|
-
return {
|
|
7
|
+
return {
|
|
8
|
+
status: result.status ?? 1,
|
|
9
|
+
stdout: result.stdout ?? "",
|
|
10
|
+
stderr: result.stderr ?? "",
|
|
11
|
+
};
|
|
7
12
|
};
|
|
8
13
|
export function isClaudeCodeAvailable(run = defaultRunner) {
|
|
9
14
|
return run("claude", ["--version"]).status === 0;
|
|
@@ -16,17 +21,37 @@ export function installClaudeCodePlugin({ apiKey, environment, run = defaultRunn
|
|
|
16
21
|
if (marketplace.status !== 0 && !/already/i.test(marketplace.stderr)) {
|
|
17
22
|
return { installed: false, reason: marketplace.stderr.trim() || "could not add the marketplace" };
|
|
18
23
|
}
|
|
24
|
+
// A stale clone serves an old manifest whose userConfig schema no longer
|
|
25
|
+
// matches this cli, so the install below would reject --config. Best-effort:
|
|
26
|
+
// the "not applied" check still catches a refresh that failed.
|
|
27
|
+
run("claude", ["plugin", "marketplace", "update", MARKETPLACE_NAME]);
|
|
28
|
+
// `plugin install` no-ops on an existing install without re-resolving the
|
|
29
|
+
// version or re-applying --config. Removing first makes install idempotent.
|
|
30
|
+
run("claude", ["plugin", "uninstall", `${PLUGIN_NAME}@${MARKETPLACE_NAME}`]);
|
|
19
31
|
const install = run("claude", [
|
|
20
32
|
"plugin",
|
|
21
33
|
"install",
|
|
22
|
-
PLUGIN_NAME
|
|
34
|
+
`${PLUGIN_NAME}@${MARKETPLACE_NAME}`,
|
|
23
35
|
"--config",
|
|
24
36
|
`environment=${environment}`,
|
|
25
37
|
"--config",
|
|
26
38
|
`jitera_api_key=${apiKey}`,
|
|
27
39
|
]);
|
|
28
40
|
if (install.status !== 0) {
|
|
29
|
-
return {
|
|
41
|
+
return {
|
|
42
|
+
installed: false,
|
|
43
|
+
reason: install.stderr.trim() || install.stdout.trim() || "the plugin install failed",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// The cli exits 0 while rejecting --config with only a warning, which would
|
|
47
|
+
// leave the mcp server unconfigurable and silently absent from sessions.
|
|
48
|
+
const output = `${install.stdout}\n${install.stderr}`;
|
|
49
|
+
if (/not applied/i.test(output)) {
|
|
50
|
+
const warning = output
|
|
51
|
+
.split("\n")
|
|
52
|
+
.find((line) => /not applied/i.test(line))
|
|
53
|
+
?.trim();
|
|
54
|
+
return { installed: false, reason: warning ?? "the plugin config was not applied" };
|
|
30
55
|
}
|
|
31
56
|
return { installed: true };
|
|
32
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/install/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAM5C,MAAM,aAAa,GAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/install/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/install/project-root.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK9D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
export function resolveGitRoot(cwd) {
|
|
3
|
+
const result = spawnSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8" });
|
|
4
|
+
if (result.status !== 0)
|
|
5
|
+
return undefined;
|
|
6
|
+
const root = result.stdout.trim();
|
|
7
|
+
return root || undefined;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=project-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/install/project-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const MARKER_FILENAME = ".jitera.json";
|
|
2
|
+
export interface ProjectMarker {
|
|
3
|
+
readonly environment?: string | undefined;
|
|
4
|
+
readonly project?: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
export interface FoundProjectMarker extends ProjectMarker {
|
|
7
|
+
readonly path: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function readProjectMarker(startDir: string): FoundProjectMarker | undefined;
|
|
10
|
+
export interface MarkerWriteResult {
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly changed: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function writeProjectMarker(root: string, marker: ProjectMarker, dryRun?: boolean): MarkerWriteResult;
|
|
15
|
+
//# sourceMappingURL=project-marker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-marker.d.ts","sourceRoot":"","sources":["../src/project-marker.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAM9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAyBlF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,MAAM,UAAQ,GACb,iBAAiB,CAuBnB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
export const MARKER_FILENAME = ".jitera.json";
|
|
4
|
+
// Environments are studio, studio-stage, studio-NN. Anything else in the file
|
|
5
|
+
// is not echoed back into session context.
|
|
6
|
+
const SAFE_ENVIRONMENT = /^[A-Za-z0-9-]{1,64}$/;
|
|
7
|
+
export function readProjectMarker(startDir) {
|
|
8
|
+
let dir = startDir;
|
|
9
|
+
for (;;) {
|
|
10
|
+
const path = join(dir, MARKER_FILENAME);
|
|
11
|
+
if (existsSync(path)) {
|
|
12
|
+
let parsed;
|
|
13
|
+
try {
|
|
14
|
+
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const environment = parsed["environment"];
|
|
20
|
+
const project = parsed["project"];
|
|
21
|
+
return {
|
|
22
|
+
path,
|
|
23
|
+
...(typeof environment === "string" && SAFE_ENVIRONMENT.test(environment)
|
|
24
|
+
? { environment }
|
|
25
|
+
: {}),
|
|
26
|
+
...(typeof project === "string" ? { project } : {}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const parent = dirname(dir);
|
|
30
|
+
if (parent === dir)
|
|
31
|
+
return undefined;
|
|
32
|
+
dir = parent;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function writeProjectMarker(root, marker, dryRun = false) {
|
|
36
|
+
const path = join(root, MARKER_FILENAME);
|
|
37
|
+
let existing = {};
|
|
38
|
+
let before;
|
|
39
|
+
if (existsSync(path)) {
|
|
40
|
+
before = readFileSync(path, "utf8");
|
|
41
|
+
try {
|
|
42
|
+
existing = JSON.parse(before);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
existing = {};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const next = {
|
|
49
|
+
...existing,
|
|
50
|
+
...(marker.environment ? { environment: marker.environment } : {}),
|
|
51
|
+
...(marker.project ? { project: marker.project } : {}),
|
|
52
|
+
};
|
|
53
|
+
const serialized = `${JSON.stringify(next, undefined, 2)}\n`;
|
|
54
|
+
const changed = before !== serialized;
|
|
55
|
+
if (changed && !dryRun)
|
|
56
|
+
writeFileSync(path, serialized, "utf8");
|
|
57
|
+
return { path, changed };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=project-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-marker.js","sourceRoot":"","sources":["../src/project-marker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAE9C,8EAA8E;AAC9E,2CAA2C;AAC3C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAWhD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,MAA+B,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;YAC7E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,OAAO;gBACL,IAAI;gBACJ,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;oBACvE,CAAC,CAAC,EAAE,WAAW,EAAE;oBACjB,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACrC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,MAAqB,EACrB,MAAM,GAAG,KAAK;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAEzC,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,MAA0B,CAAC;IAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,QAAQ;QACX,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,KAAK,UAAU,CAAC;IACtC,IAAI,OAAO,IAAI,CAAC,MAAM;QAAE,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -6,7 +6,11 @@ export interface ProxyStreams {
|
|
|
6
6
|
export interface ProxyConfig {
|
|
7
7
|
readonly url: string;
|
|
8
8
|
readonly apiKey: string;
|
|
9
|
+
readonly instructions?: string | undefined;
|
|
9
10
|
}
|
|
10
|
-
export declare function runProxy({ url, apiKey }: ProxyConfig, { input, output, log }: ProxyStreams): Promise<void>;
|
|
11
|
-
export
|
|
11
|
+
export declare function runProxy({ url, apiKey, instructions }: ProxyConfig, { input, output, log }: ProxyStreams): Promise<void>;
|
|
12
|
+
export interface ProxyEnvironment extends ProxyConfig {
|
|
13
|
+
readonly brand: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function configFromEnvironment(env: NodeJS.ProcessEnv): Promise<ProxyEnvironment>;
|
|
12
16
|
//# sourceMappingURL=proxy.d.ts.map
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAiBD,wBAAsB,QAAQ,CAC5B,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,WAAW,EAC1C,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,YAAY,GACnC,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAW7F"}
|
package/dist/proxy.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createInterface } from "node:readline";
|
|
2
2
|
import { discoverDeployment } from "./discovery.js";
|
|
3
|
+
import { DEFAULT_BRAND } from "./install/render.js";
|
|
3
4
|
import { McpCallError, postRpc } from "./mcp-client.js";
|
|
4
5
|
const REQUEST_TIMEOUT_MS = 30_000;
|
|
5
6
|
function isNotification(request) {
|
|
@@ -8,7 +9,13 @@ function isNotification(request) {
|
|
|
8
9
|
function errorResponse(id, code, message) {
|
|
9
10
|
return JSON.stringify({ jsonrpc: "2.0", id, error: { code, message } });
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
+
function injectInstructions(response, instructions) {
|
|
13
|
+
const result = response?.result;
|
|
14
|
+
if (result && typeof result === "object" && !result["instructions"]) {
|
|
15
|
+
result["instructions"] = instructions;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function runProxy({ url, apiKey, instructions }, { input, output, log }) {
|
|
12
19
|
const lines = createInterface({ input, crlfDelay: Infinity });
|
|
13
20
|
for await (const line of lines) {
|
|
14
21
|
const trimmed = line.trim();
|
|
@@ -34,6 +41,9 @@ export async function runProxy({ url, apiKey }, { input, output, log }) {
|
|
|
34
41
|
}
|
|
35
42
|
continue;
|
|
36
43
|
}
|
|
44
|
+
if (request.method === "initialize" && instructions) {
|
|
45
|
+
injectInstructions(response, instructions);
|
|
46
|
+
}
|
|
37
47
|
if (!isNotification(request) && response) {
|
|
38
48
|
output.write(`${JSON.stringify(response)}\n`);
|
|
39
49
|
}
|
|
@@ -43,12 +53,12 @@ export async function configFromEnvironment(env) {
|
|
|
43
53
|
const apiKey = env["JITERA_API_KEY"] ?? "";
|
|
44
54
|
const override = env["JITERA_MCP_URL"] ?? "";
|
|
45
55
|
if (override)
|
|
46
|
-
return { url: override, apiKey };
|
|
56
|
+
return { url: override, apiKey, brand: DEFAULT_BRAND };
|
|
47
57
|
const environment = env["JITERA_ENVIRONMENT"] ?? "";
|
|
48
58
|
const deployment = await discoverDeployment({
|
|
49
59
|
environment,
|
|
50
60
|
studioUrl: env["JITERA_STUDIO_URL"],
|
|
51
61
|
});
|
|
52
|
-
return { url: deployment.mcpUrl, apiKey };
|
|
62
|
+
return { url: deployment.mcpUrl, apiKey, brand: deployment.brand };
|
|
53
63
|
}
|
|
54
64
|
//# sourceMappingURL=proxy.js.map
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAuB,MAAM,iBAAiB,CAAC;AAE7E,MAAM,kBAAkB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/select.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Theme } from "./theme.ts";
|
|
2
|
+
export declare class SelectCancelledError extends Error {
|
|
3
|
+
readonly name = "SelectCancelledError";
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
6
|
+
export interface SelectInput {
|
|
7
|
+
setRawMode?(mode: boolean): unknown;
|
|
8
|
+
resume?(): unknown;
|
|
9
|
+
pause?(): unknown;
|
|
10
|
+
on(event: "data", listener: (chunk: Buffer | string) => void): unknown;
|
|
11
|
+
off(event: "data", listener: (chunk: Buffer | string) => void): unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface SelectOutput {
|
|
14
|
+
write(chunk: string): unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface SelectOptions<T> {
|
|
17
|
+
readonly items: readonly T[];
|
|
18
|
+
readonly prompt: string;
|
|
19
|
+
readonly label: (item: T) => string;
|
|
20
|
+
readonly theme: Theme;
|
|
21
|
+
readonly input: SelectInput;
|
|
22
|
+
readonly output: SelectOutput;
|
|
23
|
+
}
|
|
24
|
+
export declare function interactiveSelect<T>({ items, prompt, label, theme, input, output }: SelectOptions<T>): Promise<T>;
|
|
25
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAkB,IAAI,0BAA0B;IAEhD,cAEC;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,IAAI,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,OAAO,CAAC;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IACvE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;CACzE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC/B;AAqBD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA2DjH"}
|
package/dist/select.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export class SelectCancelledError extends Error {
|
|
2
|
+
name = "SelectCancelledError";
|
|
3
|
+
constructor() {
|
|
4
|
+
super("selection cancelled");
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
function parseKey(sequence, count) {
|
|
8
|
+
if (sequence === "" || sequence === "")
|
|
9
|
+
return { kind: "cancel" };
|
|
10
|
+
if (sequence === "\r" || sequence === "\n" || sequence === "\r\n")
|
|
11
|
+
return { kind: "confirm" };
|
|
12
|
+
if (sequence === "[A" || sequence === "OA" || sequence === "k")
|
|
13
|
+
return { kind: "move", delta: -1 };
|
|
14
|
+
if (sequence === "[B" || sequence === "OB" || sequence === "j")
|
|
15
|
+
return { kind: "move", delta: 1 };
|
|
16
|
+
if (/^[1-9]$/.test(sequence)) {
|
|
17
|
+
const index = Number(sequence) - 1;
|
|
18
|
+
if (index < count)
|
|
19
|
+
return { kind: "jump", index };
|
|
20
|
+
}
|
|
21
|
+
return { kind: "none" };
|
|
22
|
+
}
|
|
23
|
+
export function interactiveSelect({ items, prompt, label, theme, input, output }) {
|
|
24
|
+
if (items.length === 0) {
|
|
25
|
+
return Promise.reject(new Error("there is nothing to select from"));
|
|
26
|
+
}
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
let highlighted = 0;
|
|
29
|
+
const row = (index) => {
|
|
30
|
+
const text = label(items[index]);
|
|
31
|
+
return index === highlighted ? ` ${theme.accent("❯")} ${theme.bold(text)}` : ` ${text}`;
|
|
32
|
+
};
|
|
33
|
+
const paintItems = () => {
|
|
34
|
+
for (let index = 0; index < items.length; index += 1) {
|
|
35
|
+
output.write(`\r[2K${row(index)}\n`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const repaint = () => {
|
|
39
|
+
output.write(`[${items.length}A`);
|
|
40
|
+
paintItems();
|
|
41
|
+
};
|
|
42
|
+
// Everything drawn (blank line, prompt, blank line, one line per item) is
|
|
43
|
+
// erased again on the way out, so the caller decides what remains on screen.
|
|
44
|
+
const finish = () => {
|
|
45
|
+
input.off("data", onData);
|
|
46
|
+
input.setRawMode?.(false);
|
|
47
|
+
input.pause?.();
|
|
48
|
+
output.write(`[${items.length + 3}A\r[J`);
|
|
49
|
+
output.write("[?25h");
|
|
50
|
+
};
|
|
51
|
+
const onData = (chunk) => {
|
|
52
|
+
const action = parseKey(chunk.toString(), items.length);
|
|
53
|
+
if (action.kind === "move") {
|
|
54
|
+
highlighted = (highlighted + action.delta + items.length) % items.length;
|
|
55
|
+
repaint();
|
|
56
|
+
}
|
|
57
|
+
else if (action.kind === "jump") {
|
|
58
|
+
highlighted = action.index;
|
|
59
|
+
repaint();
|
|
60
|
+
}
|
|
61
|
+
else if (action.kind === "confirm") {
|
|
62
|
+
finish();
|
|
63
|
+
resolve(items[highlighted]);
|
|
64
|
+
}
|
|
65
|
+
else if (action.kind === "cancel") {
|
|
66
|
+
finish();
|
|
67
|
+
reject(new SelectCancelledError());
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
output.write("[?25l");
|
|
71
|
+
output.write(`\n ${theme.bold(prompt)} ${theme.dim("↑/↓ then enter")}\n\n`);
|
|
72
|
+
paintItems();
|
|
73
|
+
input.setRawMode?.(true);
|
|
74
|
+
input.resume?.();
|
|
75
|
+
input.on("data", onData);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"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"}
|