epismo 1.2.1 → 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.
Files changed (49) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +84 -75
  3. package/npm/bin/epismo.exe +1 -0
  4. package/npm/install.js +82 -0
  5. package/package.json +30 -38
  6. package/dist/analytics.js +0 -44
  7. package/dist/analytics.js.map +0 -1
  8. package/dist/api.js +0 -111
  9. package/dist/api.js.map +0 -1
  10. package/dist/auth.js +0 -658
  11. package/dist/auth.js.map +0 -1
  12. package/dist/bin.js +0 -3
  13. package/dist/bin.js.map +0 -1
  14. package/dist/cases.js +0 -25
  15. package/dist/cases.js.map +0 -1
  16. package/dist/config.js +0 -109
  17. package/dist/config.js.map +0 -1
  18. package/dist/context.js +0 -16
  19. package/dist/context.js.map +0 -1
  20. package/dist/credits.js +0 -31
  21. package/dist/credits.js.map +0 -1
  22. package/dist/errors.js +0 -111
  23. package/dist/errors.js.map +0 -1
  24. package/dist/index.js +0 -36
  25. package/dist/index.js.map +0 -1
  26. package/dist/input.js +0 -211
  27. package/dist/input.js.map +0 -1
  28. package/dist/output.js +0 -10
  29. package/dist/output.js.map +0 -1
  30. package/dist/playbook-program.js +0 -466
  31. package/dist/playbook-program.js.map +0 -1
  32. package/dist/playbooks.js +0 -61
  33. package/dist/playbooks.js.map +0 -1
  34. package/dist/program.js +0 -368
  35. package/dist/program.js.map +0 -1
  36. package/dist/projects.js +0 -54
  37. package/dist/projects.js.map +0 -1
  38. package/dist/records.js +0 -12
  39. package/dist/records.js.map +0 -1
  40. package/dist/suggestions.js +0 -15
  41. package/dist/suggestions.js.map +0 -1
  42. package/dist/token.js +0 -10
  43. package/dist/token.js.map +0 -1
  44. package/dist/update-check.js +0 -121
  45. package/dist/update-check.js.map +0 -1
  46. package/dist/workspace.js +0 -19
  47. package/dist/workspace.js.map +0 -1
  48. package/dist/workspaces.js +0 -61
  49. package/dist/workspaces.js.map +0 -1
package/dist/program.js DELETED
@@ -1,368 +0,0 @@
1
- import { Command, Option } from "commander";
2
- import { clearWorkspace, getCurrentWorkspace, listAvailableWorkspaces, login, logout, useWorkspace, whoami } from "./auth.js";
3
- import { resolveExecutionContext } from "./context.js";
4
- import { mergeDefined, parseStringArrayInput, readJsonObjectInput } from "./input.js";
5
- import { printJson, printWarning } from "./output.js";
6
- import { creditBalance, creditCheckout } from "./credits.js";
7
- import { CliError, toErrorPayload } from "./errors.js";
8
- import { createWorkspace, deleteWorkspaceMembers, getWorkspaceCheckout, listWorkspaceMembers, updateWorkspace, upsertWorkspaceMembers } from "./workspaces.js";
9
- import { addProjectMembers, createProject, deleteProjectMembers, listProjectMembers, listProjects, updateProject } from "./projects.js";
10
- import { createToken } from "./token.js";
11
- import { registerPlaybookProgram } from "./playbook-program.js";
12
- // centralize warning codes so wording is consistent everywhere
13
- const WARNING_ENV_TOKEN_WORKSPACE_IGNORED = "EPISMO_TOKEN_WORKSPACE_IGNORED";
14
- async function resolveInput(options, overrides) {
15
- const base = await readJsonObjectInput(options.input);
16
- return mergeDefined(base, overrides);
17
- }
18
- async function resolveContext() {
19
- const context = await resolveExecutionContext();
20
- if (context.warning) {
21
- printWarning({
22
- warning: { code: WARNING_ENV_TOKEN_WORKSPACE_IGNORED, message: context.warning }
23
- });
24
- }
25
- return context;
26
- }
27
- export function buildProgram(version) {
28
- const program = new Command();
29
- program
30
- .name("epismo")
31
- .description("Agent-first CLI for discovering, authoring, and coordinating reusable AI Playbooks.")
32
- .version(version)
33
- .showHelpAfterError(false)
34
- .showSuggestionAfterError(false)
35
- .configureOutput({ writeErr: () => { } })
36
- .exitOverride();
37
- program.addHelpText("after", `
38
- Workspace resolution:
39
- All commands resolve workspace in this order:
40
- 1. Saved default (epismo workspace use)
41
- 2. Personal space (fallback)
42
- When EPISMO_TOKEN is set, the saved default is skipped — the workspace is
43
- resolved from the token itself. Use epismo token create --workspace-id to
44
- issue a workspace-scoped token for CI/CD.
45
-
46
- Examples:
47
- epismo login
48
- epismo whoami
49
- epismo workspace list`);
50
- program
51
- .command("login")
52
- .description("log in through a browser, or use email with automatic SSO discovery")
53
- .option("--input <input>", "JSON object, @file, or - for stdin")
54
- .option("--email <email>", "use company SSO when configured, otherwise enter a code here")
55
- .action(async (options) => {
56
- const payload = await resolveInput({ input: options.input }, {
57
- email: options.email
58
- });
59
- const result = await login({
60
- email: typeof payload.email === "string" ? payload.email : undefined
61
- });
62
- const base = {
63
- userId: result.userId,
64
- expiresAt: result.expiresAt,
65
- lastLoginEmail: result.lastLoginEmail
66
- };
67
- if (result.alreadyLoggedIn) {
68
- printJson({
69
- alreadyLoggedIn: true,
70
- ...base,
71
- hint: "Already logged in. Run `epismo logout` first to switch accounts, or pass --email <other> to sign in as someone else."
72
- });
73
- return;
74
- }
75
- printJson({
76
- loggedIn: true,
77
- ...base,
78
- ...(result.hint ? { hint: result.hint } : {})
79
- });
80
- });
81
- program.commands.at(-1)?.addHelpText("after", `
82
- Examples:
83
- epismo login open a browser and choose a sign-in method
84
- epismo login --email you@example.com use SSO or finish email-code login in this terminal`);
85
- program
86
- .command("logout")
87
- .description("revoke credentials and clear ~/.epismo/credentials")
88
- .action(async () => {
89
- const result = await logout();
90
- printJson(result);
91
- });
92
- program
93
- .command("whoami")
94
- .description("show the currently authenticated user")
95
- .action(async () => {
96
- const context = await resolveContext();
97
- printJson(await whoami({ workspaceId: context.workspaceId, auth: context.auth }));
98
- });
99
- program.commands.at(-1)?.addHelpText("after", `
100
- Examples:
101
- epismo whoami
102
- EPISMO_TOKEN=<access-token> epismo whoami`);
103
- const workspace = program
104
- .command("workspace")
105
- .description("manage workspaces and the saved default workspace");
106
- workspace
107
- .command("list")
108
- .description("list accessible workspaces")
109
- .action(async () => {
110
- printJson(await listAvailableWorkspaces());
111
- });
112
- workspace.commands.at(-1)?.addHelpText("after", `
113
- Example:
114
- epismo workspace list`);
115
- workspace
116
- .command("current")
117
- .description("show the saved default workspace")
118
- .action(async () => {
119
- printJson(await getCurrentWorkspace());
120
- });
121
- workspace.commands.at(-1)?.addHelpText("after", `
122
- Example:
123
- epismo workspace current`);
124
- workspace
125
- .command("use")
126
- .description("set the default workspace")
127
- .argument("<workspace-id>", "workspace id to set as default")
128
- .action(async (workspaceId) => {
129
- printJson(await useWorkspace({ workspaceId }));
130
- });
131
- workspace.commands.at(-1)?.addHelpText("after", `
132
- Example:
133
- epismo workspace use <workspace-id>`);
134
- workspace
135
- .command("clear")
136
- .description("clear the saved workspace (reverts to personal space)")
137
- .action(async () => {
138
- printJson(await clearWorkspace());
139
- });
140
- workspace.commands.at(-1)?.addHelpText("after", `
141
- Example:
142
- epismo workspace clear`);
143
- workspace
144
- .command("create")
145
- .description("create a new workspace")
146
- .option("--input <input>", "JSON object, @file, or - for stdin")
147
- .option("--handle <handle>", "workspace handle (URL-safe slug)")
148
- .action(async (options) => {
149
- const payload = await resolveInput({ input: options.input }, { handle: options.handle });
150
- const context = await resolveContext();
151
- const created = await createWorkspace(context, payload);
152
- const workspaceId = created.workspace?.id;
153
- if (workspaceId) {
154
- try {
155
- const checkout = await getWorkspaceCheckout(context, workspaceId);
156
- printJson({ ...created, ...checkout });
157
- }
158
- catch (error) {
159
- printJson({
160
- ...created,
161
- checkoutError: toErrorPayload(error).payload.error,
162
- hint: `Workspace creation succeeded. Retry checkout with \`epismo workspace checkout ${workspaceId}\`.`
163
- });
164
- }
165
- }
166
- else {
167
- printJson(created);
168
- }
169
- });
170
- workspace.commands.at(-1)?.addHelpText("after", `
171
- Examples:
172
- epismo workspace create --handle my-team
173
- epismo workspace create --input @workspace.json`);
174
- workspace
175
- .command("checkout")
176
- .description("get the billing URL for a workspace (to complete or retry payment)")
177
- .argument("<workspace-id>", "workspace id")
178
- .action(async (workspaceId) => {
179
- const context = await resolveContext();
180
- printJson(await getWorkspaceCheckout(context, workspaceId));
181
- });
182
- workspace.commands.at(-1)?.addHelpText("after", `
183
- Examples:
184
- epismo workspace checkout <workspace-id>`);
185
- workspace
186
- .command("update")
187
- .description("update a workspace you own (PATCH — omitted fields are unchanged)")
188
- .argument("<workspace-id>", "workspace id to update")
189
- .option("--input <input>", "JSON object, @file, or - for stdin")
190
- .option("--handle <handle>", "updated workspace handle (URL-safe slug)")
191
- .action(async (workspaceId, options) => {
192
- const payload = await resolveInput(options, { handle: options.handle });
193
- const context = await resolveContext();
194
- printJson(await updateWorkspace(context, workspaceId, payload));
195
- });
196
- const workspaceMember = workspace.command("member").description("manage workspace members");
197
- workspaceMember
198
- .command("list")
199
- .description("list members in a workspace")
200
- .action(async () => {
201
- const context = await resolveContext();
202
- printJson(await listWorkspaceMembers(context, { workspaceId: context.workspaceId }));
203
- });
204
- workspaceMember
205
- .command("upsert")
206
- .description("add a workspace member or update the member role")
207
- .argument("<user-ids>", "user id(s); comma-separated for multiple")
208
- .addOption(new Option("--role <role>", "owner | admin | member")
209
- .choices(["owner", "admin", "member"])
210
- .makeOptionMandatory())
211
- .action(async (userIdsArg, options) => {
212
- const userIds = parseStringArrayInput(userIdsArg, "<user-ids>") ?? [];
213
- if (userIds.length === 0) {
214
- throw new CliError({
215
- code: "INVALID_INPUT",
216
- message: "At least one user id is required."
217
- });
218
- }
219
- const context = await resolveContext();
220
- printJson(await upsertWorkspaceMembers(context, userIds, options.role));
221
- });
222
- workspaceMember
223
- .command("delete")
224
- .description("remove a workspace member")
225
- .argument("<user-ids>", "user id(s); comma-separated for multiple")
226
- .action(async (userIdsArg) => {
227
- const userIds = parseStringArrayInput(userIdsArg, "<user-ids>") ?? [];
228
- if (userIds.length === 0) {
229
- throw new CliError({
230
- code: "INVALID_INPUT",
231
- message: "At least one user id is required."
232
- });
233
- }
234
- const context = await resolveContext();
235
- printJson(await deleteWorkspaceMembers(context, userIds));
236
- });
237
- const project = program.command("project").description("manage workspace projects");
238
- project
239
- .command("list")
240
- .description("list projects visible in the selected workspace")
241
- .action(async () => {
242
- const context = await resolveContext();
243
- printJson(await listProjects(context));
244
- });
245
- project
246
- .command("create")
247
- .description("create a project in the selected workspace")
248
- .option("--input <input>", "JSON object, @file, or - for stdin")
249
- .option("--name <name>", "project name")
250
- .option("--description <description>", "project description")
251
- .action(async (options) => {
252
- const payload = await resolveInput(options, {
253
- name: options.name,
254
- description: options.description
255
- });
256
- const context = await resolveContext();
257
- printJson(await createProject(context, payload));
258
- });
259
- project
260
- .command("update")
261
- .description("update a project you can access (PATCH — omitted fields are unchanged)")
262
- .argument("<project-id>", "project id to update")
263
- .option("--input <input>", "JSON object, @file, or - for stdin")
264
- .option("--name <name>", "updated project name")
265
- .option("--description <description>", "updated project description")
266
- .action(async (projectId, options) => {
267
- const payload = await resolveInput(options, {
268
- name: options.name,
269
- description: options.description
270
- });
271
- const context = await resolveContext();
272
- printJson(await updateProject(context, projectId, payload));
273
- });
274
- const projectMember = project.command("member").description("manage project members");
275
- projectMember
276
- .command("list")
277
- .description("list members across one or more projects")
278
- .option("--input <input>", "JSON object, @file, or - for stdin")
279
- .option("--project-ids <projectIds>", "JSON array or comma-separated project ids")
280
- .action(async (options) => {
281
- const payload = await resolveInput(options, {
282
- projectIds: parseStringArrayInput(options.projectIds, "--project-ids")
283
- });
284
- const context = await resolveContext();
285
- printJson(await listProjectMembers(context, payload));
286
- });
287
- projectMember
288
- .command("add")
289
- .description("add member(s) to a project")
290
- .argument("<user-ids>", "user id(s); comma-separated for multiple")
291
- .requiredOption("--project-id <projectId>", "project id")
292
- .action(async (userIdsArg, options) => {
293
- const userIds = parseStringArrayInput(userIdsArg, "<user-ids>") ?? [];
294
- if (userIds.length === 0) {
295
- throw new CliError({
296
- code: "INVALID_INPUT",
297
- message: "At least one user id is required."
298
- });
299
- }
300
- const context = await resolveContext();
301
- printJson(await addProjectMembers(context, options.projectId, userIds));
302
- });
303
- projectMember
304
- .command("delete")
305
- .description("remove user(s) from a project")
306
- .argument("<user-ids>", "user id(s); comma-separated for multiple")
307
- .requiredOption("--project-id <projectId>", "project id")
308
- .action(async (userIdsArg, options) => {
309
- const userIds = parseStringArrayInput(userIdsArg, "<user-ids>") ?? [];
310
- if (userIds.length === 0) {
311
- throw new CliError({
312
- code: "INVALID_INPUT",
313
- message: "At least one user id is required."
314
- });
315
- }
316
- const context = await resolveContext();
317
- printJson(await deleteProjectMembers(context, options.projectId, userIds));
318
- });
319
- const credit = program.command("credit").description("view balance and purchase credits");
320
- credit
321
- .command("balance")
322
- .description("show current credit balance")
323
- .action(async () => {
324
- const context = await resolveContext();
325
- printJson(await creditBalance(context));
326
- });
327
- credit.commands.at(-1)?.addHelpText("after", `
328
- Examples:
329
- epismo credit balance`);
330
- credit
331
- .command("checkout")
332
- .description("start a credit purchase and get a checkout URL")
333
- .option("--input <input>", "JSON object, @file, or - for stdin")
334
- .option("--quantity <quantity>", "Number of credits to add to the active balance", (value) => Number(value))
335
- .action(async (options) => {
336
- const payload = await resolveInput(options, {
337
- quantity: options.quantity
338
- });
339
- const context = await resolveContext();
340
- printJson(await creditCheckout(context, payload));
341
- });
342
- credit.commands.at(-1)?.addHelpText("after", `
343
- Example:
344
- epismo credit checkout --quantity 500`);
345
- const token = program.command("token").description("manage CLI tokens for CI/CD");
346
- token
347
- .command("create")
348
- .description("issue a workspace-scoped CLI token for use in CI/CD pipelines")
349
- .option("--workspace-id <workspaceId>", "workspace to scope the token to (omit for personal space)")
350
- .action(async (options) => {
351
- const context = await resolveContext();
352
- printJson(await createToken(context, options.workspaceId ?? context.workspaceId));
353
- });
354
- token.commands.at(-1)?.addHelpText("after", `
355
- Notes:
356
- The issued token has the same scopes as a normal CLI token (read, write, offline_access)
357
- but carries the workspace ID embedded. Use it via the EPISMO_TOKEN environment variable
358
- in CI/CD so no --workspace-id flag is needed at runtime.
359
- If --workspace-id is omitted, the saved default workspace is used (epismo workspace use),
360
- falling back to personal space when no default is set.
361
-
362
- Examples:
363
- epismo token create --workspace-id <workspace-id>
364
- epismo token create # uses saved default workspace, or personal space if none`);
365
- registerPlaybookProgram(program, { resolveInput, resolveContext });
366
- return program;
367
- }
368
- //# sourceMappingURL=program.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
package/dist/projects.js DELETED
@@ -1,54 +0,0 @@
1
- import { requestJson, withWorkspaceQuery } from "./api.js";
2
- import { resolveApiUrl } from "./config.js";
3
- import { CliError } from "./errors.js";
4
- import { parseStringArrayInput, toObjectInput } from "./input.js";
5
- export async function listProjects(context) {
6
- return requestJson(resolveApiUrl(), withWorkspaceQuery("/v1/projects", context.workspaceId), {
7
- authToken: context.auth.accessToken
8
- });
9
- }
10
- export async function createProject(context, input) {
11
- return requestJson(resolveApiUrl(), withWorkspaceQuery("/v1/projects", context.workspaceId), {
12
- method: "POST",
13
- authToken: context.auth.accessToken,
14
- body: toObjectInput(input)
15
- });
16
- }
17
- export async function updateProject(context, id, input) {
18
- return requestJson(resolveApiUrl(), withWorkspaceQuery(`/v1/projects/${encodeURIComponent(id)}`, context.workspaceId), {
19
- method: "PATCH",
20
- authToken: context.auth.accessToken,
21
- body: toObjectInput(input)
22
- });
23
- }
24
- export async function listProjectMembers(context, input) {
25
- const payload = toObjectInput(input);
26
- const projectIds = parseStringArrayInput(payload.projectIds, "projectIds");
27
- if (!projectIds || projectIds.length === 0) {
28
- throw new CliError({
29
- code: "INVALID_INPUT",
30
- message: '"projectIds" is required.',
31
- hint: "Pass --project-ids <id1,id2>."
32
- });
33
- }
34
- return requestJson(resolveApiUrl(), withWorkspaceQuery("/v1/projects/members/list", context.workspaceId), {
35
- method: "POST",
36
- authToken: context.auth.accessToken,
37
- body: { projectIds }
38
- });
39
- }
40
- export async function addProjectMembers(context, projectId, userIds) {
41
- return requestJson(resolveApiUrl(), withWorkspaceQuery(`/v1/projects/${encodeURIComponent(projectId)}/members`, context.workspaceId), {
42
- method: "PUT",
43
- authToken: context.auth.accessToken,
44
- body: { userIds }
45
- });
46
- }
47
- export async function deleteProjectMembers(context, projectId, userIds) {
48
- const query = `userIds=${encodeURIComponent(userIds.join(","))}`;
49
- return requestJson(resolveApiUrl(), withWorkspaceQuery(`/v1/projects/${encodeURIComponent(projectId)}/members?${query}`, context.workspaceId), {
50
- method: "DELETE",
51
- authToken: context.auth.accessToken
52
- });
53
- }
54
- //# sourceMappingURL=projects.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"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"}
package/dist/records.js DELETED
@@ -1,12 +0,0 @@
1
- import { requestJson, withWorkspaceQuery } from "./api.js";
2
- import { resolveApiUrl } from "./config.js";
3
- import { toObjectInput } from "./input.js";
4
- import { withIdempotency, withQuery } from "./playbooks.js";
5
- async function call(context, pathname, method = "GET", body) {
6
- return requestJson(resolveApiUrl(), withWorkspaceQuery(pathname, context.workspaceId), { method, authToken: context.auth.accessToken, ...(body === undefined ? {} : { body }) });
7
- }
8
- export const recordApi = {
9
- append: (context, caseId, input) => call(context, "/v1/records", "POST", withIdempotency({ ...toObjectInput(input), caseId })),
10
- list: (context, input) => call(context, withQuery("/v1/records", input))
11
- };
12
- //# sourceMappingURL=records.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,KAAK,UAAU,IAAI,CAClB,OAAyB,EACzB,QAAgB,EAChB,SAAyB,KAAK,EAC9B,IAAc;IAEd,OAAO,WAAW,CACjB,aAAa,EAAE,EACf,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,EACjD,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CACxF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,MAAM,EAAE,CAAC,OAAyB,EAAE,MAAc,EAAE,KAAc,EAAE,EAAE,CACrE,IAAI,CACH,OAAO,EACP,aAAa,EACb,MAAM,EACN,eAAe,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CACpD;IACF,IAAI,EAAE,CAAC,OAAyB,EAAE,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;CACnG,CAAC"}
@@ -1,15 +0,0 @@
1
- import { requestJson, withWorkspaceQuery } from "./api.js";
2
- import { resolveApiUrl } from "./config.js";
3
- import { withIdempotency, withQuery } from "./playbooks.js";
4
- const part = (value) => encodeURIComponent(value);
5
- async function call(context, pathname, method = "GET", body) {
6
- return requestJson(resolveApiUrl(), withWorkspaceQuery(pathname, context.workspaceId), { method, authToken: context.auth.accessToken, ...(body === undefined ? {} : { body }) });
7
- }
8
- export const suggestionApi = {
9
- create: (c, input) => call(c, "/v1/suggestions", "POST", withIdempotency(input)),
10
- get: (c, id) => call(c, `/v1/suggestions/${part(id)}`),
11
- list: (c, input) => call(c, withQuery("/v1/suggestions", input)),
12
- update: (c, id, input) => call(c, `/v1/suggestions/${part(id)}`, "PATCH", withIdempotency(input)),
13
- resolve: (c, id, input) => call(c, `/v1/suggestions/${part(id)}/resolve`, "POST", withIdempotency(input))
14
- };
15
- //# sourceMappingURL=suggestions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../src/suggestions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE1D,KAAK,UAAU,IAAI,CAClB,OAAyB,EACzB,QAAgB,EAChB,SAAmC,KAAK,EACxC,IAAc;IAEd,OAAO,WAAW,CACjB,aAAa,EAAE,EACf,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,EACjD,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CACxF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,MAAM,EAAE,CAAC,CAAmB,EAAE,KAAc,EAAE,EAAE,CAC/C,IAAI,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,GAAG,EAAE,CAAC,CAAmB,EAAE,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,IAAI,EAAE,CAAC,CAAmB,EAAE,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAmB,EAAE,EAAU,EAAE,KAAc,EAAE,EAAE,CAC3D,IAAI,CAAC,CAAC,EAAE,mBAAmB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,EAAE,CAAC,CAAmB,EAAE,EAAU,EAAE,KAAc,EAAE,EAAE,CAC5D,IAAI,CAAC,CAAC,EAAE,mBAAmB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CAC/E,CAAC"}
package/dist/token.js DELETED
@@ -1,10 +0,0 @@
1
- import { requestJson } from "./api.js";
2
- import { resolveApiUrl } from "./config.js";
3
- export async function createToken(context, workspaceId) {
4
- return requestJson(resolveApiUrl(), "/v1/cli/tokens", {
5
- method: "POST",
6
- authToken: context.auth.accessToken,
7
- body: workspaceId ? { workspaceId } : {}
8
- });
9
- }
10
- //# sourceMappingURL=token.js.map
package/dist/token.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,OAAyB,EACzB,WAAoB;IAEpB,OAAO,WAAW,CAAmB,aAAa,EAAE,EAAE,gBAAgB,EAAE;QACvE,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;QACnC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;KACxC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,121 +0,0 @@
1
- import { get } from "node:https";
2
- import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
- import { dirname } from "node:path";
4
- import { getUpdateCachePath } from "./config.js";
5
- import { printWarning } from "./output.js";
6
- const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 1 day
7
- function parseVersion(v) {
8
- // Strip a leading "v" and any prerelease/build suffix (e.g. "1.2.3-beta+build")
9
- // so the core x.y.z compares numerically instead of yielding NaN.
10
- const core = v.replace(/^v/, "").split(/[-+]/, 1)[0] ?? "";
11
- const [major = 0, minor = 0, patch = 0] = core
12
- .split(".")
13
- .map((part) => Number.parseInt(part, 10) || 0);
14
- return [major, minor, patch];
15
- }
16
- function isNewer(latest, current) {
17
- const [lMaj, lMin, lPat] = parseVersion(latest);
18
- const [cMaj, cMin, cPat] = parseVersion(current);
19
- if (lMaj !== cMaj)
20
- return lMaj > cMaj;
21
- if (lMin !== cMin)
22
- return lMin > cMin;
23
- return lPat > cPat;
24
- }
25
- function fetchLatestVersion(packageName) {
26
- return new Promise((resolve) => {
27
- const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`;
28
- const req = get(url, { timeout: 5000 }, (res) => {
29
- // unref so this doesn't block process exit
30
- res.socket?.unref();
31
- let data = "";
32
- res.on("data", (chunk) => (data += chunk.toString()));
33
- res.on("end", () => {
34
- try {
35
- const json = JSON.parse(data);
36
- resolve(json.version ?? null);
37
- }
38
- catch {
39
- resolve(null);
40
- }
41
- });
42
- });
43
- req.on("error", () => resolve(null));
44
- req.on("timeout", () => {
45
- req.destroy();
46
- resolve(null);
47
- });
48
- req.socket?.unref(); // run in background: don't block process exit
49
- });
50
- }
51
- function getCacheFilePath() {
52
- const cacheFile = getUpdateCachePath();
53
- const cacheDir = dirname(cacheFile);
54
- mkdirSync(cacheDir, { recursive: true });
55
- return cacheFile;
56
- }
57
- function readCache(cacheFile) {
58
- try {
59
- const raw = readFileSync(cacheFile, "utf8");
60
- return JSON.parse(raw);
61
- }
62
- catch {
63
- return null;
64
- }
65
- }
66
- function writeCache(cacheFile, data) {
67
- try {
68
- writeFileSync(cacheFile, JSON.stringify(data), "utf8");
69
- }
70
- catch {
71
- // ignore cache write failures
72
- }
73
- }
74
- /**
75
- * Starts a background version check and shows a notification if a newer version
76
- * is found in the cache from a previous check.
77
- *
78
- * Timing:
79
- * - On call: reads cache and shows notification immediately if an update is available
80
- * - Background: queries npm registry and updates cache for future runs
81
- * - Check interval: once per day (network request only when cache is stale)
82
- */
83
- export async function checkForUpdate(packageName, currentVersion) {
84
- if (!shouldCheckForUpdates()) {
85
- return;
86
- }
87
- const cacheFile = getCacheFilePath();
88
- const cache = readCache(cacheFile);
89
- const now = Date.now();
90
- // show notification immediately if cache has a newer version
91
- if (cache && isNewer(cache.latestVersion, currentVersion) && shouldDisplayUpdateNotification()) {
92
- printWarning({
93
- warning: {
94
- code: "UPDATE_AVAILABLE",
95
- message: `Update available: ${currentVersion} → ${cache.latestVersion}. Run: npm install -g ${packageName}`
96
- }
97
- });
98
- }
99
- // only check if cache is missing or stale
100
- if (!cache || now - cache.lastChecked > CHECK_INTERVAL_MS) {
101
- // use setImmediate to avoid blocking the main command
102
- setImmediate(() => {
103
- fetchLatestVersion(packageName)
104
- .then((latestVersion) => {
105
- if (latestVersion) {
106
- writeCache(cacheFile, { lastChecked: now, latestVersion });
107
- }
108
- })
109
- .catch(() => {
110
- // ignore background update check failures
111
- });
112
- });
113
- }
114
- }
115
- function shouldCheckForUpdates() {
116
- return process.env.EPISMO_UPDATE_CHECK?.trim() !== "0";
117
- }
118
- function shouldDisplayUpdateNotification() {
119
- return process.stderr.isTTY === true && process.stdout.isTTY === true;
120
- }
121
- //# sourceMappingURL=update-check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}