@jitera/connect 1.5.0 → 2.1.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 +51 -13
- package/content/instructions.md +7 -4
- package/content/session-start-unbound.md +12 -0
- package/content/session-start.md +14 -5
- package/dist/bin/cli.js +101 -93
- 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.js +122 -119
- package/dist/bin/init.js.map +1 -1
- package/dist/bin/login.js +221 -211
- package/dist/bin/login.js.map +1 -1
- package/dist/bin/proxy.js +2 -1
- package/dist/bin/proxy.js.map +1 -1
- package/dist/bin/set-agent.d.ts +3 -0
- package/dist/bin/set-agent.d.ts.map +1 -0
- package/dist/bin/set-agent.js +165 -0
- package/dist/bin/set-agent.js.map +1 -0
- package/dist/bin/statusline.js +6 -1
- package/dist/bin/statusline.js.map +1 -1
- package/dist/cli-session.d.ts +12 -0
- package/dist/cli-session.d.ts.map +1 -1
- package/dist/cli-session.js +25 -0
- package/dist/cli-session.js.map +1 -1
- package/dist/exit.d.ts +8 -0
- package/dist/exit.d.ts.map +1 -0
- package/dist/exit.js +32 -0
- package/dist/exit.js.map +1 -0
- package/dist/graphql.d.ts +6 -0
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +24 -0
- package/dist/graphql.js.map +1 -1
- package/dist/hook-io.d.ts +2 -0
- package/dist/hook-io.d.ts.map +1 -1
- package/dist/hook-io.js +3 -0
- package/dist/hook-io.js.map +1 -1
- package/dist/hooks/session-start.js +19 -5
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop.js +7 -1
- package/dist/hooks/stop.js.map +1 -1
- package/dist/hooks/user-prompt-submit.js +78 -20
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/project-marker.d.ts +1 -0
- package/dist/project-marker.d.ts.map +1 -1
- package/dist/project-marker.js +40 -2
- package/dist/project-marker.js.map +1 -1
- package/dist/proxy.d.ts +5 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +42 -2
- package/dist/proxy.js.map +1 -1
- package/dist/select.d.ts +17 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +164 -3
- package/dist/select.js.map +1 -1
- package/dist/statusline.d.ts +2 -1
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +6 -1
- package/dist/statusline.js.map +1 -1
- package/package.json +1 -1
- package/skills/jitera-context/SKILL.md +22 -0
- package/skills/jitera-memory/SKILL.md +20 -2
- package/templates/AGENTS.md.tmpl +10 -4
package/dist/bin/init.js
CHANGED
|
@@ -12,6 +12,7 @@ import { resolveGitRoot } from "../install/project-root.js";
|
|
|
12
12
|
import { writeProjectMarker } from "../project-marker.js";
|
|
13
13
|
import { InvalidChoiceError, SelectCancelledError, chooseFrom } from "../select.js";
|
|
14
14
|
import { createTheme } from "../theme.js";
|
|
15
|
+
import { endWith, runCommand } from "../exit.js";
|
|
15
16
|
const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
16
17
|
const USAGE = [
|
|
17
18
|
"usage: npx @jitera/connect init [--env=<environment>] [--project=<uuid>] [--dry-run]",
|
|
@@ -41,134 +42,136 @@ function parseArgs(argv) {
|
|
|
41
42
|
return args;
|
|
42
43
|
}
|
|
43
44
|
const theme = createTheme({ env: process.env, isTty: Boolean(process.stdout.isTTY) });
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (args.unknown) {
|
|
50
|
-
process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
|
|
51
|
-
process.exit(2);
|
|
52
|
-
}
|
|
53
|
-
const projectRoot = resolveGitRoot(process.cwd());
|
|
54
|
-
if (!projectRoot) {
|
|
55
|
-
process.stderr.write("error: not inside a git repository. Instructions written outside a repository " +
|
|
56
|
-
"are invisible to assistants that read AGENTS.md from the repository root, and " +
|
|
57
|
-
"an out-of-repo CLAUDE.md leaks into every project below it. Run this from " +
|
|
58
|
-
"inside the repository you want to connect.\n");
|
|
59
|
-
process.exit(2);
|
|
60
|
-
}
|
|
61
|
-
let brand = DEFAULT_BRAND;
|
|
62
|
-
try {
|
|
63
|
-
const deployment = await discoverDeployment({
|
|
64
|
-
environment: args.environment,
|
|
65
|
-
studioUrl: process.env["JITERA_STUDIO_URL"],
|
|
66
|
-
});
|
|
67
|
-
brand = deployment.brand;
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
if (error instanceof UnknownEnvironmentError) {
|
|
71
|
-
process.stderr.write(`error: ${error.message}\n`);
|
|
72
|
-
process.exit(2);
|
|
45
|
+
await runCommand(async () => {
|
|
46
|
+
const args = parseArgs(process.argv.slice(2));
|
|
47
|
+
if (args.help) {
|
|
48
|
+
process.stdout.write(`${USAGE}\n`);
|
|
49
|
+
endWith(0);
|
|
73
50
|
}
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
51
|
+
if (args.unknown) {
|
|
52
|
+
process.stderr.write(`error: unrecognised argument "${args.unknown}"\n${USAGE}\n`);
|
|
53
|
+
endWith(2);
|
|
54
|
+
}
|
|
55
|
+
const projectRoot = resolveGitRoot(process.cwd());
|
|
56
|
+
if (!projectRoot) {
|
|
57
|
+
process.stderr.write("error: not inside a git repository. Instructions written outside a repository " +
|
|
58
|
+
"are invisible to assistants that read AGENTS.md from the repository root, and " +
|
|
59
|
+
"an out-of-repo CLAUDE.md leaks into every project below it. Run this from " +
|
|
60
|
+
"inside the repository you want to connect.\n");
|
|
61
|
+
endWith(2);
|
|
62
|
+
}
|
|
63
|
+
let brand = DEFAULT_BRAND;
|
|
85
64
|
try {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
...session,
|
|
97
|
-
accessToken,
|
|
98
|
-
refreshToken: refreshed.refreshToken ?? session.refreshToken,
|
|
99
|
-
expiresAt: refreshed.expiresInSeconds
|
|
100
|
-
? Date.now() + refreshed.expiresInSeconds * 1000
|
|
101
|
-
: undefined,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
const transport = { automationUrl: session.automationUrl, accessToken };
|
|
105
|
-
const organisations = await listOrganisations(transport);
|
|
106
|
-
const organisation = organisations.length > 1
|
|
107
|
-
? await chooseFrom({
|
|
108
|
-
items: organisations,
|
|
109
|
-
prompt: "Which organisation?",
|
|
110
|
-
label: (org) => `${org.name ?? org.slug}${org.personal ? " (personal)" : ""}`,
|
|
111
|
-
theme,
|
|
112
|
-
})
|
|
113
|
-
: organisations[0];
|
|
114
|
-
const projects = await listProjects(transport, organisation);
|
|
115
|
-
if (projects.length === 0) {
|
|
116
|
-
process.stdout.write(` ${theme.dim("this account has no projects here; pass --project=<uuid> to bind one")}\n`);
|
|
65
|
+
const deployment = await discoverDeployment({
|
|
66
|
+
environment: args.environment,
|
|
67
|
+
studioUrl: process.env["JITERA_STUDIO_URL"],
|
|
68
|
+
});
|
|
69
|
+
brand = deployment.brand;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof UnknownEnvironmentError) {
|
|
73
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
74
|
+
endWith(2);
|
|
117
75
|
}
|
|
118
|
-
|
|
119
|
-
|
|
76
|
+
if (!(error instanceof DiscoveryError))
|
|
77
|
+
throw error;
|
|
78
|
+
process.stdout.write(` ${theme.dim(`offline, using the default brand "${brand}"`)}\n`);
|
|
79
|
+
}
|
|
80
|
+
// A stored login session ("login once") lets init pick the project here, so
|
|
81
|
+
// the binding lands in .jitera.json without another browser round-trip.
|
|
82
|
+
const session = loadCliSession();
|
|
83
|
+
let projectUuid = args.project;
|
|
84
|
+
let projectName;
|
|
85
|
+
if (!projectUuid && session) {
|
|
86
|
+
let accessToken = session.accessToken;
|
|
87
|
+
try {
|
|
88
|
+
if (isExpired(session)) {
|
|
89
|
+
if (!session.refreshToken) {
|
|
90
|
+
throw new DeviceFlowError("expired_token", "the stored sign-in expired. Run login again.");
|
|
91
|
+
}
|
|
92
|
+
const refreshed = await refreshAccessToken({
|
|
93
|
+
automationUrl: session.automationUrl,
|
|
94
|
+
refreshToken: session.refreshToken,
|
|
95
|
+
});
|
|
96
|
+
accessToken = refreshed.accessToken;
|
|
97
|
+
saveCliSession({
|
|
98
|
+
...session,
|
|
99
|
+
accessToken,
|
|
100
|
+
refreshToken: refreshed.refreshToken ?? session.refreshToken,
|
|
101
|
+
expiresAt: refreshed.expiresInSeconds
|
|
102
|
+
? Date.now() + refreshed.expiresInSeconds * 1000
|
|
103
|
+
: undefined,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
const transport = { automationUrl: session.automationUrl, accessToken };
|
|
107
|
+
const organisations = await listOrganisations(transport);
|
|
108
|
+
const organisation = organisations.length > 1
|
|
120
109
|
? await chooseFrom({
|
|
121
|
-
items:
|
|
122
|
-
prompt: "Which
|
|
123
|
-
label: (
|
|
110
|
+
items: organisations,
|
|
111
|
+
prompt: "Which organisation?",
|
|
112
|
+
label: (org) => `${org.name ?? org.slug}${org.personal ? " (personal)" : ""}`,
|
|
124
113
|
theme,
|
|
125
114
|
})
|
|
126
|
-
:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
115
|
+
: organisations[0];
|
|
116
|
+
const projects = await listProjects(transport, organisation);
|
|
117
|
+
if (projects.length === 0) {
|
|
118
|
+
process.stdout.write(` ${theme.dim("this account has no projects here; pass --project=<uuid> to bind one")}\n`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const choice = projects.length > 1
|
|
122
|
+
? await chooseFrom({
|
|
123
|
+
items: projects,
|
|
124
|
+
prompt: "Which project does this repository belong to?",
|
|
125
|
+
label: (project) => project.name,
|
|
126
|
+
theme,
|
|
127
|
+
})
|
|
128
|
+
: projects[0];
|
|
129
|
+
projectUuid = choice?.uuid;
|
|
130
|
+
projectName = choice?.name;
|
|
131
|
+
if (projectName) {
|
|
132
|
+
process.stdout.write(` ${theme.dim("Project")} ${projectName}\n`);
|
|
133
|
+
}
|
|
131
134
|
}
|
|
132
135
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error instanceof SelectCancelledError) {
|
|
138
|
+
process.stderr.write(`\n error: cancelled.\n`);
|
|
139
|
+
endWith(130);
|
|
140
|
+
}
|
|
141
|
+
if (error instanceof InvalidChoiceError) {
|
|
142
|
+
process.stderr.write(`error: ${error.message}\n`);
|
|
143
|
+
endWith(2);
|
|
144
|
+
}
|
|
145
|
+
if (error instanceof DeviceFlowError || error instanceof GraphqlError) {
|
|
146
|
+
process.stdout.write(` ${theme.dim(`could not list projects (${error.message}); pass --project=<uuid>`)}\n`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
148
151
|
}
|
|
149
152
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
else if (!projectUuid) {
|
|
154
|
+
process.stdout.write(` ${theme.dim("sign in once with the login command to pick a project here, or pass --project=<uuid>")}\n`);
|
|
155
|
+
}
|
|
156
|
+
const result = writeAgentsMd({
|
|
157
|
+
packageRoot: PACKAGE_ROOT,
|
|
158
|
+
projectRoot,
|
|
159
|
+
values: { BRAND: brand },
|
|
160
|
+
dryRun: args.dryRun,
|
|
161
|
+
});
|
|
162
|
+
process.stdout.write(` ${result.agents.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold("AGENTS.md")} ${theme.dim(`${result.agents.action} in ${result.agentsPath}`)}\n`);
|
|
163
|
+
process.stdout.write(` ${result.claude.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold("CLAUDE.md")} ${theme.dim(`${result.claude.action} in ${result.claudePath}`)}\n`);
|
|
164
|
+
const environment = args.environment ?? session?.environment ?? "studio";
|
|
165
|
+
const marker = writeProjectMarker(projectRoot, {
|
|
166
|
+
environment,
|
|
167
|
+
...(projectUuid ? { project: projectUuid } : {}),
|
|
168
|
+
}, args.dryRun);
|
|
169
|
+
process.stdout.write(` ${marker.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold(".jitera.json")} ${theme.dim(`environment "${environment}"${projectUuid ? `, project ${projectUuid}` : ""}`)}\n`);
|
|
170
|
+
if (args.dryRun) {
|
|
171
|
+
process.stdout.write(`\n ${theme.dim("dry run, nothing was written")}\n`);
|
|
172
|
+
}
|
|
173
|
+
else if (result.changed || marker.changed) {
|
|
174
|
+
process.stdout.write(`\n ${theme.dim("Commit these files so the whole team's assistants read them.")}\n`);
|
|
175
|
+
}
|
|
159
176
|
});
|
|
160
|
-
process.stdout.write(` ${result.agents.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold("AGENTS.md")} ${theme.dim(`${result.agents.action} in ${result.agentsPath}`)}\n`);
|
|
161
|
-
process.stdout.write(` ${result.claude.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold("CLAUDE.md")} ${theme.dim(`${result.claude.action} in ${result.claudePath}`)}\n`);
|
|
162
|
-
const environment = args.environment ?? session?.environment ?? "studio";
|
|
163
|
-
const marker = writeProjectMarker(projectRoot, {
|
|
164
|
-
environment,
|
|
165
|
-
...(projectUuid ? { project: projectUuid } : {}),
|
|
166
|
-
}, args.dryRun);
|
|
167
|
-
process.stdout.write(` ${marker.changed ? theme.ok("✓") : theme.dim("–")} ${theme.bold(".jitera.json")} ${theme.dim(`environment "${environment}"${projectUuid ? `, project ${projectUuid}` : ""}`)}\n`);
|
|
168
|
-
if (args.dryRun) {
|
|
169
|
-
process.stdout.write(`\n ${theme.dim("dry run, nothing was written")}\n`);
|
|
170
|
-
}
|
|
171
|
-
else if (result.changed || marker.changed) {
|
|
172
|
-
process.stdout.write(`\n ${theme.dim("Commit these files so the whole team's assistants read them.")}\n`);
|
|
173
|
-
}
|
|
174
177
|
//# sourceMappingURL=init.js.map
|
package/dist/bin/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
|