terse-cli 0.1.28 → 0.1.30

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 (86) hide show
  1. package/dist/api.d.ts +10 -1
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +23 -3
  4. package/dist/api.js.map +1 -1
  5. package/dist/commands/attach.d.ts.map +1 -1
  6. package/dist/commands/attach.js +20 -1
  7. package/dist/commands/attach.js.map +1 -1
  8. package/dist/commands/deploy.d.ts +1 -1
  9. package/dist/commands/deploy.d.ts.map +1 -1
  10. package/dist/commands/deploy.js +107 -34
  11. package/dist/commands/deploy.js.map +1 -1
  12. package/dist/commands/deployTheme.d.ts +28 -0
  13. package/dist/commands/deployTheme.d.ts.map +1 -0
  14. package/dist/commands/deployTheme.js +68 -0
  15. package/dist/commands/deployTheme.js.map +1 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +15 -0
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/integrate.js +1 -1
  20. package/dist/commands/integrate.js.map +1 -1
  21. package/dist/commands/serve.d.ts +1 -0
  22. package/dist/commands/serve.d.ts.map +1 -0
  23. package/dist/commands/serve.js +2 -0
  24. package/dist/commands/serve.js.map +1 -0
  25. package/dist/commands/terseCliTheme.d.ts +28 -0
  26. package/dist/commands/terseCliTheme.d.ts.map +1 -0
  27. package/dist/commands/terseCliTheme.js +68 -0
  28. package/dist/commands/terseCliTheme.js.map +1 -0
  29. package/dist/commands/test.d.ts.map +1 -1
  30. package/dist/commands/test.js +1 -0
  31. package/dist/commands/test.js.map +1 -1
  32. package/dist/deploy.d.ts.map +1 -1
  33. package/dist/deploy.js +3 -1
  34. package/dist/deploy.js.map +1 -1
  35. package/dist/index.js +3 -3
  36. package/dist/index.js.map +1 -1
  37. package/dist/perf.d.ts +9 -0
  38. package/dist/perf.d.ts.map +1 -0
  39. package/dist/perf.js +59 -0
  40. package/dist/perf.js.map +1 -0
  41. package/dist/projectConfig.d.ts +8 -0
  42. package/dist/projectConfig.d.ts.map +1 -0
  43. package/dist/projectConfig.js +43 -0
  44. package/dist/projectConfig.js.map +1 -0
  45. package/dist/providers/codegen.test.d.ts +2 -0
  46. package/dist/providers/codegen.test.d.ts.map +1 -0
  47. package/dist/providers/codegen.test.js +45 -0
  48. package/dist/providers/codegen.test.js.map +1 -0
  49. package/dist/providers/python/PythonProvider.test.d.ts +2 -0
  50. package/dist/providers/python/PythonProvider.test.d.ts.map +1 -0
  51. package/dist/providers/python/PythonProvider.test.js +169 -0
  52. package/dist/providers/python/PythonProvider.test.js.map +1 -0
  53. package/dist/providers/resolveProvider.d.ts.map +1 -1
  54. package/dist/providers/resolveProvider.js +4 -6
  55. package/dist/providers/resolveProvider.js.map +1 -1
  56. package/dist/providers/typescript/TypeScriptProvider.d.ts.map +1 -1
  57. package/dist/providers/typescript/TypeScriptProvider.js +6 -1
  58. package/dist/providers/typescript/TypeScriptProvider.js.map +1 -1
  59. package/dist/providers/typescript/prepareCodegenData.d.ts.map +1 -1
  60. package/dist/providers/typescript/prepareCodegenData.js +13 -1
  61. package/dist/providers/typescript/prepareCodegenData.js.map +1 -1
  62. package/dist/providers/typescript/prepareCodegenData.test.d.ts +2 -0
  63. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +1 -0
  64. package/dist/providers/typescript/prepareCodegenData.test.js +54 -0
  65. package/dist/providers/typescript/prepareCodegenData.test.js.map +1 -0
  66. package/dist/run.d.ts.map +1 -1
  67. package/dist/run.js +25 -9
  68. package/dist/run.js.map +1 -1
  69. package/dist/shared/ToolDisplayUtils.js +1 -1
  70. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  71. package/dist/test.js +1 -1
  72. package/dist/test.js.map +1 -1
  73. package/package.json +4 -3
  74. package/templates/typescript/codegen/partials/system-section.hbs +13 -2
  75. package/dist/jsonOutput.d.ts +0 -19
  76. package/dist/jsonOutput.d.ts.map +0 -1
  77. package/dist/jsonOutput.js +0 -25
  78. package/dist/jsonOutput.js.map +0 -1
  79. package/dist/replay.d.ts +0 -3
  80. package/dist/replay.d.ts.map +0 -1
  81. package/dist/replay.js +0 -20
  82. package/dist/replay.js.map +0 -1
  83. package/dist/urls.d.ts +0 -3
  84. package/dist/urls.d.ts.map +0 -1
  85. package/dist/urls.js +0 -27
  86. package/dist/urls.js.map +0 -1
package/dist/api.d.ts CHANGED
@@ -1,4 +1,10 @@
1
1
  import type { GetRunHistoryParams, GetRunHistoryResponse, RunHistoryModelEvent, SdkRunTriggerEventResponse } from "terse-types";
2
+ /** Thrown by `fetchWithAuth` on any non-2xx. Exposes `status` and the parsed body so callers can branch on specific failures. */
3
+ export declare class ApiError extends Error {
4
+ readonly status: number;
5
+ readonly body: Record<string, unknown>;
6
+ constructor(status: number, body: Record<string, unknown>);
7
+ }
2
8
  export declare function readEnvVar(name: string): string | null;
3
9
  export declare function readEnvVarFromDir(dir: string, name: string): string | null;
4
10
  export declare function readApiKey(): string | null;
@@ -8,7 +14,9 @@ export declare function readApiKeyOrBail(options?: {
8
14
  detail?: string;
9
15
  }): string;
10
16
  export declare function readRunId(): string | null;
11
- export declare function fetchWithAuth<T>(urlPath: string, apiKey: string, params?: Record<string, unknown>, type?: "GET" | "POST"): Promise<T>;
17
+ type AuthenticatedRequestMethod = "GET" | "POST";
18
+ export declare function fetchWithAuthAndSession<T>(urlPath: string, apiKey: string, sessionId: string, params?: Record<string, unknown>, type?: AuthenticatedRequestMethod): Promise<T>;
19
+ export declare function fetchWithAuth<T>(urlPath: string, apiKey: string, params?: Record<string, unknown>, type?: AuthenticatedRequestMethod): Promise<T>;
12
20
  export declare function resolveAgentIdByJobName(jobName: string, apiKey: string): Promise<string | null>;
13
21
  export declare function fetchRunHistory(agentId: string, apiKey: string, params?: GetRunHistoryParams): Promise<GetRunHistoryResponse>;
14
22
  export type RunChatHistory = {
@@ -22,4 +30,5 @@ export type RunChatHistory = {
22
30
  };
23
31
  export declare function fetchRunChatHistory(runId: string, apiKey: string): Promise<RunChatHistory>;
24
32
  export declare function resolveEventFromRunId(runId: string | null, apiKey: string): Promise<SdkRunTriggerEventResponse | undefined>;
33
+ export {};
25
34
  //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,0BAA0B,EAAmB,MAAM,aAAa,CAAA;AAgBhK,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1E;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAa1C;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAWtF;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,IAAI,GAAE,KAAK,GAAG,MAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CA0BtJ;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKrG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAavI;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,EAAE,oBAAoB,EAAE,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,uBAAuB,EAAE,OAAO,CAAA;CACnC,CAAA;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAEhG;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAajI"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,0BAA0B,EAAmB,MAAM,aAAa,CAAA;AAKhK,iIAAiI;AACjI,qBAAa,QAAS,SAAQ,KAAK;IAE3B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAD7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAK7C;AAaD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1E;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAa1C;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAWtF;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;AAED,KAAK,0BAA0B,GAAG,KAAK,GAAG,MAAM,CAAA;AA+BhD,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,IAAI,GAAE,0BAAkC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE/L;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,IAAI,GAAE,0BAAkC,GAAG,OAAO,CAAC,CAAC,CAAC,CAclK;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKrG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAavI;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,EAAE,oBAAoB,EAAE,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,uBAAuB,EAAE,OAAO,CAAA;CACnC,CAAA;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAEhG;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAajI"}
package/dist/api.js CHANGED
@@ -5,6 +5,17 @@ import path from "node:path";
5
5
  import { ApiRoutes, buildRoute, sdkRunTriggerEventResponseSchema } from "terse-types";
6
6
  import { BACKEND_URL } from "./config.js";
7
7
  import { getStoredApiKey } from "./userConfig.js";
8
+ /** Thrown by `fetchWithAuth` on any non-2xx. Exposes `status` and the parsed body so callers can branch on specific failures. */
9
+ export class ApiError extends Error {
10
+ status;
11
+ body;
12
+ constructor(status, body) {
13
+ super(`HTTP ${status} — ${body.error || JSON.stringify(body)}`);
14
+ this.status = status;
15
+ this.body = body;
16
+ this.name = "ApiError";
17
+ }
18
+ }
8
19
  let dotenvLoadedFor = null;
9
20
  function ensureDotenvLoaded(cwd = process.cwd()) {
10
21
  if (dotenvLoadedFor === cwd)
@@ -54,14 +65,16 @@ export function readApiKeyOrBail(options) {
54
65
  export function readRunId() {
55
66
  return readEnvVar("TERSE_RUN_ID");
56
67
  }
57
- export async function fetchWithAuth(urlPath, apiKey, params = {}, type = "GET") {
68
+ async function fetchRawWithAuth(urlPath, apiKey, options = {}) {
69
+ const { params = {}, type = "GET", sessionId } = options;
58
70
  let res;
59
71
  try {
60
72
  res = await fetch(`${BACKEND_URL}${urlPath}`, {
61
73
  method: type,
62
74
  headers: {
63
75
  Authorization: `Bearer ${apiKey}`,
64
- "Content-Type": "application/json"
76
+ "Content-Type": "application/json",
77
+ ...(sessionId ? { "x-terse-session-id": sessionId } : {})
65
78
  },
66
79
  body: type === "POST" ? JSON.stringify(params) : undefined
67
80
  });
@@ -69,13 +82,20 @@ export async function fetchWithAuth(urlPath, apiKey, params = {}, type = "GET")
69
82
  catch (err) {
70
83
  throw new Error(`Could not connect to ${BACKEND_URL} — is the backend running?\n ${err.message}`);
71
84
  }
85
+ return res;
86
+ }
87
+ export async function fetchWithAuthAndSession(urlPath, apiKey, sessionId, params = {}, type = "GET") {
88
+ return fetchWithAuth(urlPath, apiKey, { params, type, sessionId });
89
+ }
90
+ export async function fetchWithAuth(urlPath, apiKey, params = {}, type = "GET") {
91
+ const res = await fetchRawWithAuth(urlPath, apiKey, { params, type });
72
92
  const contentType = res.headers.get("content-type") ?? "";
73
93
  if (!contentType.includes("application/json")) {
74
94
  throw new Error(`Expected JSON from ${urlPath} but got ${contentType || "unknown content-type"} (HTTP ${res.status}).\n` + ` Is the Terse backend running on ${BACKEND_URL}?`);
75
95
  }
76
96
  if (!res.ok) {
77
97
  const body = (await res.json().catch(() => ({})));
78
- throw new Error(`${res.status} ${res.statusText} — ${urlPath}\n ${body.error || JSON.stringify(body)}`);
98
+ throw new ApiError(res.status, body);
79
99
  }
80
100
  return res.json();
81
101
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD1F"}
1
+ {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE1F"}
@@ -2,6 +2,7 @@ import chalk from "chalk";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import ora from "ora";
5
+ import { PROJECT_CONFIG_FILENAME, createRemoteProject, readProjectConfig, writeProjectConfig } from "../projectConfig.js";
5
6
  import { resolveProvider } from "../providers/resolveProvider.js";
6
7
  import { setStoredApiKey } from "../userConfig.js";
7
8
  import { getProjectAttachedUserName, login } from "./auth.js";
@@ -35,6 +36,24 @@ export async function attach(provider = resolveProvider()) {
35
36
  else {
36
37
  console.log(chalk.dim(" You can run `terse login` later to authenticate."));
37
38
  }
39
+ // Create the remote project and write terse.config.json (skip if the repo already has one, e.g. cloned from a teammate).
40
+ // attach mode defaults to self-hosted: the user's jobs run on their own infrastructure.
41
+ // We write the selfHosted flag plus an empty remoteServerUrl placeholder so the user knows where to fill it in.
42
+ if (result?.apiKey && !readProjectConfig(cwd)) {
43
+ const linkSpinner = ora("Creating Terse project").start();
44
+ try {
45
+ const config = await createRemoteProject(result.apiKey, projectName);
46
+ const selfHostedConfig = { ...config, selfHosted: true, remoteServerUrl: "" };
47
+ writeProjectConfig(cwd, selfHostedConfig);
48
+ linkSpinner.succeed(`Created Terse project (${config.projectId})`);
49
+ console.log(` ${chalk.green("+")} ${PROJECT_CONFIG_FILENAME}`);
50
+ console.log(chalk.dim(` Self-hosted mode enabled. Set ${chalk.cyan("remoteServerUrl")} in ${PROJECT_CONFIG_FILENAME} before running ${chalk.cyan("terse deploy")}.`));
51
+ }
52
+ catch (error) {
53
+ linkSpinner.fail(`Failed to create Terse project: ${error.message}`);
54
+ console.log(chalk.dim(` You'll need to create a ${PROJECT_CONFIG_FILENAME} manually before running ${chalk.cyan("terse deploy")}.`));
55
+ }
56
+ }
38
57
  await listAndPromptIntegrations();
39
58
  if (canGenerateFromCurrentDirectory(provider, cwd)) {
40
59
  const spinner = ora("Generating code").start();
@@ -55,7 +74,7 @@ export async function attach(provider = resolveProvider()) {
55
74
  console.log(` 1. Install ${chalk.cyan("terse-sdk")} in this repo if you haven't already`);
56
75
  console.log(` 2. Add your Terse job definitions to ${chalk.cyan(provider.entryFile)} and import that file from your app startup path`);
57
76
  console.log(chalk.dim(` If your self-hosted app keeps jobs in another file, use ${chalk.cyan("--entry-file")} with terse test, terse run, and terse deploy.`));
58
- console.log(` 3. Set ${chalk.cyan("TERSE_REMOTE_SERVER_URL")} in ${chalk.cyan(".env")} before running ${chalk.cyan("terse deploy")}`);
77
+ console.log(` 3. Set ${chalk.cyan("remoteServerUrl")} in ${chalk.cyan(PROJECT_CONFIG_FILENAME)} before running ${chalk.cyan("terse deploy")}`);
59
78
  console.log(` 4. Run ${chalk.cyan("terse integrate")} to connect integrations`);
60
79
  console.log("");
61
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { LanguageProvider } from "../providers/LanguageProvider.js";
2
- export declare function deploy(provider?: LanguageProvider, entryFile?: string): Promise<void>;
2
+ export declare function deploy(provider?: LanguageProvider, entryFile?: string, hasRetried?: boolean): Promise<void>;
3
3
  //# sourceMappingURL=deploy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,iBAyF9F"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAIxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,UAAQ,iBA0HlH"}
@@ -1,22 +1,39 @@
1
+ import { intro, log, outro, spinner } from "@clack/prompts";
2
+ import { confirm } from "@inquirer/prompts";
1
3
  import chalk from "chalk";
2
4
  import { zipSync } from "fflate";
3
5
  import fs from "node:fs";
4
6
  import path from "node:path";
5
- import ora from "ora";
6
7
  import { ApiRoutes, sdkDeployRequestBodySchema } from "terse-types";
7
- import { fetchWithAuth, readApiKeyOrBail, readEnvVar } from "../api.js";
8
+ import { ApiError, fetchWithAuthAndSession, readApiKeyOrBail } from "../api.js";
9
+ import { FRONTEND_URL } from "../config.js";
8
10
  import { loadJobRegistry } from "../loadJob.js";
11
+ import { PROJECT_CONFIG_FILENAME, createRemoteProject, readProjectConfigOrBail, writeProjectConfig } from "../projectConfig.js";
9
12
  import { resolveProvider } from "../providers/resolveProvider.js";
10
- export async function deploy(provider = resolveProvider(), entryFile) {
13
+ import { openSessionStream } from "../providers/shared/sessionStream.js";
14
+ export async function deploy(provider = resolveProvider(), entryFile, hasRetried = false) {
11
15
  const apiKey = readApiKeyOrBail({
12
16
  title: "Error: Not authenticated.",
13
17
  detail: "Run `terse login` to authenticate, or set TERSE_API_KEY in your environment."
14
18
  });
19
+ const config = readProjectConfigOrBail();
20
+ const { projectId } = config;
15
21
  const registry = await loadJobRegistry(provider, entryFile);
16
22
  const jobs = [...registry.values()];
17
- // If TERSE_REMOTE_SERVER_URL (or legacy TERSE_JOB_URL) is set in .env, deploy
18
- // in URL mode (user infrastructure). No source code is zipped or uploaded.
19
- const remoteServerUrl = readEnvVar("TERSE_REMOTE_SERVER_URL") ?? readEnvVar("TERSE_JOB_URL");
23
+ // Self-hosted mode is driven entirely by terse.config.json (selfHosted + remoteServerUrl).
24
+ const remoteServerUrl = config.remoteServerUrl?.trim() || undefined;
25
+ if (config.selfHosted && !remoteServerUrl) {
26
+ console.error(chalk.red(`\n Error: Self-hosted mode is enabled but no server URL is configured.`));
27
+ console.error(chalk.dim(` Set ${chalk.cyan("remoteServerUrl")} in ${chalk.cyan(PROJECT_CONFIG_FILENAME)} to the URL where your Terse SDK is running.\n`));
28
+ console.error(` Example:`);
29
+ console.error(chalk.dim(` {`));
30
+ console.error(chalk.dim(` "projectId": "${projectId}",`));
31
+ console.error(chalk.dim(` "name": "${config.name}",`));
32
+ console.error(chalk.dim(` "selfHosted": true,`));
33
+ console.error(chalk.dim(` "remoteServerUrl": "https://your-app.example.com"`));
34
+ console.error(chalk.dim(` }\n`));
35
+ process.exit(1);
36
+ }
20
37
  const isUrlMode = !!remoteServerUrl;
21
38
  let sourceZipBase64;
22
39
  let fileCount = 0;
@@ -27,9 +44,19 @@ export async function deploy(provider = resolveProvider(), entryFile) {
27
44
  fileCount = zipPayload.fileCount;
28
45
  zipSizeBytes = zipPayload.zipSizeBytes;
29
46
  }
30
- const spinner = ora(`Deploying ${jobs.length} job${jobs.length === 1 ? "" : "s"}...`).start();
47
+ intro(`terse deploy`);
48
+ const s = spinner({ styleFrame: frame => chalk.hex("#04AB62")(frame) });
49
+ s.start(`Deploying ${jobs.length} job${jobs.length === 1 ? "" : "s"}`);
50
+ const session = await openSessionStream(apiKey, {
51
+ onEvent: event => {
52
+ if (event.type === "deploy_stage") {
53
+ s.message(getStageMessage(event.stage));
54
+ }
55
+ }
56
+ });
31
57
  try {
32
58
  const body = sdkDeployRequestBodySchema.parse({
59
+ projectId,
33
60
  jobs: jobs.map(job => ({
34
61
  jobName: job.name,
35
62
  triggers: job.triggers
@@ -37,22 +64,16 @@ export async function deploy(provider = resolveProvider(), entryFile) {
37
64
  remoteServerUrl: isUrlMode ? remoteServerUrl : undefined,
38
65
  sourceZipBase64
39
66
  });
40
- const result = await fetchWithAuth(ApiRoutes.SDK.DEPLOY, apiKey, body, "POST");
41
- if (!result.success) {
42
- spinner.fail(chalk.red(`Deploy failed: ${result.error}`));
43
- if (result.details) {
44
- console.error(chalk.dim(` ${result.details}`));
45
- }
46
- process.exit(1);
47
- }
48
- spinner.succeed(chalk.green(`Deployed ${result.results.length} job${result.results.length === 1 ? "" : "s"}`));
49
- for (const r of result.results) {
67
+ const deployResult = await fetchWithAuthAndSession(ApiRoutes.SDK.DEPLOY, apiKey, session.sessionId, body, "POST");
68
+ s.stop(`Deployed ${deployResult.results.length} job${deployResult.results.length === 1 ? "" : "s"}`);
69
+ for (const r of deployResult.results) {
50
70
  const verb = r.isUpdate ? "Updated" : "Created";
51
- console.log(chalk.dim(` ${verb} "${r.jobName}" (${r.automationId})`));
71
+ const agentUrl = `${FRONTEND_URL}/agents/${r.automationId}`;
72
+ log.step(`${verb}: ${chalk.bold(r.jobName)} ${chalk.dim(agentUrl)}`);
52
73
  if (r.triggers) {
53
74
  for (const t of r.triggers) {
54
75
  if (t.metadata?.webhookUrl) {
55
- console.log(chalk.cyan(` Webhook URL: ${t.metadata.webhookUrl}`));
76
+ log.info(`Webhook URL: ${chalk.cyan(t.metadata.webhookUrl)}`);
56
77
  }
57
78
  }
58
79
  }
@@ -60,31 +81,67 @@ export async function deploy(provider = resolveProvider(), entryFile) {
60
81
  if (isUrlMode) {
61
82
  console.log(chalk.dim(` Mode: user infrastructure`));
62
83
  console.log(chalk.dim(` Server URL: ${remoteServerUrl}`));
63
- const signingSecret = result.results.find(r => r.signingSecret)?.signingSecret;
64
- if (signingSecret) {
65
- const existingSecret = readEnvVar("TERSE_SIGNING_SECRET");
66
- if (!existingSecret) {
67
- console.log(`\n Add this to your ${chalk.bold(".env")} file:\n`);
84
+ const signingSecret = deployResult.signingSecret;
85
+ const projectApiKey = deployResult.projectApiKey;
86
+ if (signingSecret || projectApiKey) {
87
+ const labels = [];
88
+ if (signingSecret)
89
+ labels.push("signing secret");
90
+ if (projectApiKey)
91
+ labels.push("project API key");
92
+ console.log(chalk.yellow(`\n ${chalk.bold(`New ${labels.join(" and ")} generated.`)} Save now, will not be shown again.`));
93
+ console.log(chalk.dim(` If lost, rotate from the Terse dashboard to issue a new one.\n`));
94
+ console.log(` Add to your ${chalk.bold(".env")} file:\n`);
95
+ if (projectApiKey)
96
+ console.log(`TERSE_API_KEY=${projectApiKey}`);
97
+ if (signingSecret)
68
98
  console.log(`TERSE_SIGNING_SECRET=${signingSecret}`);
69
- console.log("");
70
- }
99
+ console.log("");
71
100
  }
101
+ log.info(`Mode: user infrastructure ${chalk.dim(remoteServerUrl)}`);
72
102
  }
73
103
  else {
74
- console.log(chalk.dim(` Files: ${fileCount}`));
75
- console.log(chalk.dim(` Zip size: ${(zipSizeBytes / 1024).toFixed(1)} KB`));
104
+ log.info(`${fileCount} files ${chalk.dim(`${(zipSizeBytes / 1024).toFixed(1)} KB`)}`);
76
105
  }
77
- if (result.removed.length > 0) {
78
- console.log(chalk.yellow(`\nRemoved ${result.removed.length} stale job${result.removed.length === 1 ? "" : "s"} no longer in project:`));
79
- for (const r of result.removed) {
80
- console.log(chalk.dim(` - ${r.name} (${r.id})`));
81
- }
106
+ if (deployResult.removed.length > 0) {
107
+ log.warn(`Removed ${deployResult.removed.length} stale job${deployResult.removed.length === 1 ? "" : "s"}: ${deployResult.removed.map(r => r.name).join(", ")}`);
82
108
  }
109
+ outro("Done");
83
110
  }
84
111
  catch (error) {
85
- spinner.fail(chalk.red(`Deploy failed: ${error.message}`));
112
+ s.stop(`Deploy failed: ${error.message}`);
113
+ if (await tryRecoverStaleProject(error, { apiKey, config, hasRetried })) {
114
+ return deploy(provider, entryFile, true);
115
+ }
116
+ if (isProjectGoneError(error)) {
117
+ console.error(chalk.dim(` Run ${chalk.cyan("terse attach")} to link this directory to an existing project.`));
118
+ }
86
119
  process.exit(1);
87
120
  }
121
+ finally {
122
+ session.close();
123
+ }
124
+ }
125
+ function isProjectGoneError(error) {
126
+ return error instanceof ApiError && error.status === 404 && error.body.errorCode === "PROJECT_NOT_FOUND";
127
+ }
128
+ async function tryRecoverStaleProject(error, args) {
129
+ if (!isProjectGoneError(error))
130
+ return false;
131
+ if (args.hasRetried)
132
+ return false;
133
+ if (!process.stdout.isTTY || !process.stdin.isTTY)
134
+ return false;
135
+ console.log(chalk.yellow(`\n The project linked in ${PROJECT_CONFIG_FILENAME} no longer exists.`));
136
+ console.log(` This usually means it was deleted from the dashboard, or this config came from another machine.`);
137
+ console.log(chalk.dim(`\n Project: "${args.config.name}" (${args.config.projectId})\n`));
138
+ const proceed = await confirm({ message: `Create a new project named "${args.config.name}" and re-link this directory?`, default: false });
139
+ if (!proceed)
140
+ process.exit(1);
141
+ const newProject = await createRemoteProject(args.apiKey, args.config.name);
142
+ writeProjectConfig(process.cwd(), { ...args.config, projectId: newProject.projectId });
143
+ console.log(chalk.green(` Re-linked to ${newProject.projectId}. Retrying deploy…\n`));
144
+ return true;
88
145
  }
89
146
  function collectFiles(dir, baseDir, provider) {
90
147
  const entries = {};
@@ -119,4 +176,20 @@ function buildZipPayload(provider) {
119
176
  zipSizeBytes: zipData.length
120
177
  };
121
178
  }
179
+ function getStageMessage(stage) {
180
+ switch (stage) {
181
+ case "UPLOADING_SOURCE":
182
+ return "Uploading source";
183
+ case "BUILDING_DEPENDENCY_IMAGE":
184
+ return "Building dependency image";
185
+ case "BUILDING_SOURCE_IMAGE":
186
+ return "Building source image";
187
+ case "CONFIGURING_AUTOMATIONS":
188
+ return "Configuring automations";
189
+ default: {
190
+ const exhaustiveCheck = stage;
191
+ return exhaustiveCheck;
192
+ }
193
+ }
194
+ }
122
195
  //# sourceMappingURL=deploy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Brand-colored wrappers for @clack/prompts.
3
+ *
4
+ * Clack uses hardcoded named ANSI colors with no theme API. We replicate its
5
+ * chrome here using chalk true-color (24-bit RGB) derived from the design
6
+ * token OKLCH values:
7
+ *
8
+ * primary: oklch(65% .16 155) → rgb(4, 171, 98) teal-green
9
+ * secondary: oklch(65% .12 145) → rgb(93, 162, 96) muted green
10
+ * tertiary: oklch(65% .15 30) → rgb(219, 102, 86) warm orange
11
+ * destructive: oklch(60% .22 25) → rgb(230, 43, 52) red
12
+ */
13
+ export declare const primary: import("chalk").ChalkInstance;
14
+ export declare const secondary: import("chalk").ChalkInstance;
15
+ export declare const tertiary: import("chalk").ChalkInstance;
16
+ export declare const destructive: import("chalk").ChalkInstance;
17
+ /** Pass as the `styleFrame` option to `spinner()`. */
18
+ export declare const spinnerStyle: (frame: string) => string;
19
+ export declare const brandLog: {
20
+ step: (msg: string) => void;
21
+ info: (msg: string) => void;
22
+ warn: (msg: string) => void;
23
+ error: (msg: string) => void;
24
+ };
25
+ export declare function brandIntro(title?: string): void;
26
+ export declare function brandOutro(message?: string): void;
27
+ export declare function brandNote(message: string, title?: string): void;
28
+ //# sourceMappingURL=deployTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployTheme.d.ts","sourceRoot":"","sources":["../../src/commands/deployTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,eAAO,MAAM,OAAO,+BAA+B,CAAA;AACnD,eAAO,MAAM,SAAS,+BAA6B,CAAA;AACnD,eAAO,MAAM,QAAQ,+BAA8B,CAAA;AACnD,eAAO,MAAM,WAAW,+BAA2B,CAAA;AAInD,sDAAsD;AACtD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,WAAmB,CAAA;AAW7D,eAAO,MAAM,QAAQ;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;iBACN,MAAM;CACtB,CAAA;AAUD,wBAAgB,UAAU,CAAC,KAAK,SAAK,QAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAK,QAEtC;AAWD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,QAepD"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Brand-colored wrappers for @clack/prompts.
3
+ *
4
+ * Clack uses hardcoded named ANSI colors with no theme API. We replicate its
5
+ * chrome here using chalk true-color (24-bit RGB) derived from the design
6
+ * token OKLCH values:
7
+ *
8
+ * primary: oklch(65% .16 155) → rgb(4, 171, 98) teal-green
9
+ * secondary: oklch(65% .12 145) → rgb(93, 162, 96) muted green
10
+ * tertiary: oklch(65% .15 30) → rgb(219, 102, 86) warm orange
11
+ * destructive: oklch(60% .22 25) → rgb(230, 43, 52) red
12
+ */
13
+ import { log } from "@clack/prompts";
14
+ import chalk from "chalk";
15
+ // ── Color tokens ──────────────────────────────────────────────────────────────
16
+ export const primary = chalk.rgb(4, 171, 98);
17
+ export const secondary = chalk.rgb(93, 162, 96);
18
+ export const tertiary = chalk.rgb(219, 102, 86);
19
+ export const destructive = chalk.rgb(230, 43, 52);
20
+ // ── Spinner ───────────────────────────────────────────────────────────────────
21
+ /** Pass as the `styleFrame` option to `spinner()`. */
22
+ export const spinnerStyle = (frame) => primary(frame);
23
+ // ── Log helpers ───────────────────────────────────────────────────────────────
24
+ // Clack's log.step / log.info / log.warn / log.error hardcode their symbol
25
+ // colors. We call log.message() directly with a branded symbol instead.
26
+ const S_STEP = "◇";
27
+ const S_INFO = "●";
28
+ const S_WARN = "▲";
29
+ const S_ERROR = "■";
30
+ export const brandLog = {
31
+ step: (msg) => log.message(msg, { symbol: primary(S_STEP) }),
32
+ info: (msg) => log.message(msg, { symbol: secondary(S_INFO) }),
33
+ warn: (msg) => log.message(msg, { symbol: tertiary(S_WARN) }),
34
+ error: (msg) => log.message(msg, { symbol: destructive(S_ERROR) })
35
+ };
36
+ // ── Intro / Outro ─────────────────────────────────────────────────────────────
37
+ // Clack's intro/outro output a gray guide bar. We replicate the same chrome
38
+ // using our secondary color.
39
+ const S_BAR_START = "┌";
40
+ const S_BAR = "│";
41
+ const S_BAR_END = "└";
42
+ export function brandIntro(title = "") {
43
+ process.stdout.write(`${secondary(S_BAR_START)} ${title}\n`);
44
+ }
45
+ export function brandOutro(message = "") {
46
+ process.stdout.write(`${secondary(S_BAR)}\n${secondary(S_BAR_END)} ${message}\n\n`);
47
+ }
48
+ // ── Note ─────────────────────────────────────────────────────────────────────
49
+ // Clack's note() hardcodes green for the title symbol and gray for borders.
50
+ // We replicate the layout using our primary/secondary colors.
51
+ const S_BAR_H = "─";
52
+ const S_CORNER_TR = "╮";
53
+ const S_TEE_L = "├";
54
+ const S_CORNER_BR = "┴";
55
+ export function brandNote(message, title = "") {
56
+ const lines = message.split("\n");
57
+ const width = Math.max(...lines.map(l => l.length), title.length) + 4;
58
+ const pad = (s) => s + " ".repeat(width - s.length - 2);
59
+ const border = S_BAR_H.repeat(width - title.length - 1);
60
+ process.stdout.write([
61
+ `${secondary(S_BAR)}`,
62
+ `${primary(S_STEP)} ${chalk.reset(title)} ${secondary(border + S_CORNER_TR)}`,
63
+ ...lines.map(l => `${secondary(S_BAR)} ${chalk.dim(pad(l))}${secondary(S_BAR)}`),
64
+ `${secondary(S_TEE_L + S_BAR_H.repeat(width + 2) + S_CORNER_BR)}`,
65
+ ""
66
+ ].join("\n"));
67
+ }
68
+ //# sourceMappingURL=deployTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployTheme.js","sourceRoot":"","sources":["../../src/commands/deployTheme.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AASxE,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAuE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjJ"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AASxE,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAuE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGjJ"}
@@ -2,6 +2,7 @@ import chalk from "chalk";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import ora from "ora";
5
+ import { PROJECT_CONFIG_FILENAME, createRemoteProject, writeProjectConfig } from "../projectConfig.js";
5
6
  import { fetchSdkVersion } from "../providers/fetchSdkVersion.js";
6
7
  import { resolveProvider } from "../providers/resolveProvider.js";
7
8
  import { renderTemplate } from "../providers/templateUtils.js";
@@ -55,6 +56,20 @@ export async function init(projectName, provider = resolveProvider({ command: "i
55
56
  // Authenticate via browser; saves to user config (~/.config/terse/auth.json or OS equivalent).
56
57
  const loginResult = await loginAndPersist();
57
58
  const isAuthenticated = !!loginResult;
59
+ // Create the remote project and write terse.config.json so future deploys know which project to target.
60
+ if (loginResult?.apiKey) {
61
+ const linkSpinner = ora("Creating Terse project").start();
62
+ try {
63
+ const config = await createRemoteProject(loginResult.apiKey, resolvedName);
64
+ writeProjectConfig(targetDir, config);
65
+ linkSpinner.succeed(`Created Terse project (${config.projectId})`);
66
+ console.log(` ${chalk.green("+")} ${PROJECT_CONFIG_FILENAME}`);
67
+ }
68
+ catch (error) {
69
+ linkSpinner.fail(`Failed to create Terse project: ${error.message}`);
70
+ console.log(chalk.dim(` You'll need to create a ${PROJECT_CONFIG_FILENAME} manually before running ${chalk.cyan("terse deploy")}.`));
71
+ }
72
+ }
58
73
  // Connect integrations
59
74
  await listAndPromptIntegrations();
60
75
  try {