terse-cli 0.1.34 → 0.1.36

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 (75) hide show
  1. package/README.md +1 -1
  2. package/dist/api.d.ts +1 -1
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +1 -1
  5. package/dist/api.js.map +1 -1
  6. package/dist/cliVersion.d.ts +3 -0
  7. package/dist/cliVersion.d.ts.map +1 -0
  8. package/dist/cliVersion.js +13 -0
  9. package/dist/cliVersion.js.map +1 -0
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +2 -0
  12. package/dist/commands/deploy.js.map +1 -1
  13. package/dist/commands/deployTheme.d.ts +28 -0
  14. package/dist/commands/deployTheme.d.ts.map +1 -0
  15. package/dist/commands/deployTheme.js +68 -0
  16. package/dist/commands/deployTheme.js.map +1 -0
  17. package/dist/commands/dev.d.ts +3 -0
  18. package/dist/commands/dev.d.ts.map +1 -0
  19. package/dist/commands/dev.js +47 -0
  20. package/dist/commands/dev.js.map +1 -0
  21. package/dist/commands/integrate.d.ts.map +1 -1
  22. package/dist/commands/integrate.js +197 -60
  23. package/dist/commands/integrate.js.map +1 -1
  24. package/dist/commands/serve.d.ts +1 -0
  25. package/dist/commands/serve.d.ts.map +1 -0
  26. package/dist/commands/serve.js +2 -0
  27. package/dist/commands/serve.js.map +1 -0
  28. package/dist/commands/terseCliTheme.d.ts +28 -0
  29. package/dist/commands/terseCliTheme.d.ts.map +1 -0
  30. package/dist/commands/terseCliTheme.js +68 -0
  31. package/dist/commands/terseCliTheme.js.map +1 -0
  32. package/dist/commands/test.d.ts.map +1 -1
  33. package/dist/commands/test.js +80 -16
  34. package/dist/commands/test.js.map +1 -1
  35. package/dist/index.js +2 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/integrationApi.d.ts +5 -2
  38. package/dist/integrationApi.d.ts.map +1 -1
  39. package/dist/integrationApi.js +8 -4
  40. package/dist/integrationApi.js.map +1 -1
  41. package/dist/perf.d.ts +9 -0
  42. package/dist/perf.d.ts.map +1 -0
  43. package/dist/perf.js +59 -0
  44. package/dist/perf.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/typescript/prepareCodegenData.test.d.ts +2 -0
  54. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +1 -0
  55. package/dist/providers/typescript/prepareCodegenData.test.js +54 -0
  56. package/dist/providers/typescript/prepareCodegenData.test.js.map +1 -0
  57. package/dist/run.d.ts.map +1 -1
  58. package/dist/run.js +36 -12
  59. package/dist/run.js.map +1 -1
  60. package/dist/shared/ToolDisplayUtils.js +1 -1
  61. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  62. package/package.json +3 -3
  63. package/templates/typescript/init/package.json.hbs +2 -1
  64. package/dist/jsonOutput.d.ts +0 -19
  65. package/dist/jsonOutput.d.ts.map +0 -1
  66. package/dist/jsonOutput.js +0 -25
  67. package/dist/jsonOutput.js.map +0 -1
  68. package/dist/replay.d.ts +0 -3
  69. package/dist/replay.d.ts.map +0 -1
  70. package/dist/replay.js +0 -20
  71. package/dist/replay.js.map +0 -1
  72. package/dist/urls.d.ts +0 -3
  73. package/dist/urls.d.ts.map +0 -1
  74. package/dist/urls.js +0 -27
  75. package/dist/urls.js.map +0 -1
@@ -1,10 +1,10 @@
1
- import { intro, log, outro } from "@clack/prompts";
2
- import { confirm, input, password, select } from "@inquirer/prompts";
1
+ import { cancel, confirm, group, intro, isCancel, log, outro, password, select, text } from "@clack/prompts";
2
+ import { input } from "@inquirer/prompts";
3
3
  import chalk from "chalk";
4
4
  import { INTEGRATION_METADATA, IntegrationType } from "terse-types";
5
5
  import { readApiKey, readApiKeyOrBail } from "../api.js";
6
6
  import { createSpinner, formatSummaryList } from "../cliUi.js";
7
- import { fetchInstallationUrl, fetchIntegrationFields, fetchIntegrations, pollForConnection, submitIntegrationForm } from "../integrationApi.js";
7
+ import { disconnectIntegration, fetchInstallationUrl, fetchIntegrationFields, fetchIntegrations, pollForConnection, submitIntegrationForm } from "../integrationApi.js";
8
8
  import { openUrlInBrowser } from "../openBrowser.js";
9
9
  import { generate } from "./generate.js";
10
10
  export async function integrate(options = {}) {
@@ -19,7 +19,10 @@ export async function integrate(options = {}) {
19
19
  while (continueLoop) {
20
20
  const result = await connectOneIntegration(apiKey);
21
21
  didChangeAnyIntegration = didChangeAnyIntegration || result.status !== "unchanged";
22
- continueLoop = await confirm({ message: "Connect another integration?", default: false });
22
+ continueLoop = abortIfCancelled(await confirm({
23
+ message: "Connect another integration?",
24
+ initialValue: false
25
+ }));
23
26
  }
24
27
  if (didChangeAnyIntegration && runGenerateAfterChange) {
25
28
  await generate(undefined, { showLifecycle: false });
@@ -48,7 +51,10 @@ export async function listAndPromptIntegrations(options = {}) {
48
51
  if (active.length > 0) {
49
52
  const names = active.map(i => INTEGRATION_METADATA[i.integrationType]?.name || i.integrationType);
50
53
  console.log(chalk.dim(`Connected integrations (${active.length}): ${formatSummaryList(names)}`));
51
- const addMore = await confirm({ message: "Connect another integration?", default: false });
54
+ const addMore = abortIfCancelled(await confirm({
55
+ message: "Connect another integration?",
56
+ initialValue: false
57
+ }));
52
58
  if (addMore)
53
59
  await integrate({ showLifecycle: false, runGenerateAfterChange: options.runGenerateAfterChange });
54
60
  }
@@ -58,85 +64,170 @@ export async function listAndPromptIntegrations(options = {}) {
58
64
  }
59
65
  }
60
66
  async function connectOneIntegration(apiKey) {
67
+ while (true) {
68
+ const integrations = await fetchUserFacingIntegrations(apiKey);
69
+ if (integrations.length === 0) {
70
+ log.warn("No integrations available.");
71
+ return { status: "unchanged" };
72
+ }
73
+ const selection = await promptForIntegrationSelection(integrations);
74
+ if (selection.action === "back") {
75
+ continue;
76
+ }
77
+ const selectedIntegration = integrations.find(integration => integration.integrationType === selection.integrationType);
78
+ if (!selectedIntegration) {
79
+ log.warn(`Integration '${selection.integrationType}' is no longer available.`);
80
+ return { status: "unchanged" };
81
+ }
82
+ switch (selection.action) {
83
+ case "keep":
84
+ return { status: "unchanged", integrationType: selection.integrationType };
85
+ case "disconnect": {
86
+ const didDisconnect = await handleDisconnect(apiKey, selection.integrationType);
87
+ return {
88
+ status: didDisconnect ? "modified" : "unchanged",
89
+ integrationType: selection.integrationType
90
+ };
91
+ }
92
+ case "connect":
93
+ case "refresh_permissions": {
94
+ const didUpdate = await runInstallationFlow(apiKey, selection.integrationType);
95
+ return {
96
+ status: didUpdate ? (selectedIntegration.isActive ? "modified" : "added") : "unchanged",
97
+ integrationType: selection.integrationType
98
+ };
99
+ }
100
+ }
101
+ }
102
+ }
103
+ async function fetchUserFacingIntegrations(apiKey) {
61
104
  const s = createSpinner();
62
105
  s.start("Fetching integrations");
63
- let integrations;
64
106
  try {
65
- integrations = await fetchIntegrations(apiKey);
107
+ const integrations = await fetchIntegrations(apiKey);
66
108
  s.stop("Fetched integrations");
109
+ return integrations.filter(i => i.integrationType !== IntegrationType.TERSE && i.integrationType !== IntegrationType.CRON_JOB && i.integrationType !== IntegrationType.WEBMONITOR);
67
110
  }
68
111
  catch (err) {
69
112
  s.stop("Failed to fetch integrations");
70
113
  console.error(chalk.red(` ${err.message}`));
71
114
  process.exit(1);
72
115
  }
73
- const userFacing = integrations.filter(i => i.integrationType !== IntegrationType.TERSE && i.integrationType !== IntegrationType.CRON_JOB && i.integrationType !== IntegrationType.WEBMONITOR);
74
- if (userFacing.length === 0) {
75
- log.warn("No integrations available.");
76
- return { status: "unchanged" };
77
- }
78
- const selected = await select({
79
- message: "Select an integration to connect",
80
- choices: userFacing.map(i => {
81
- const meta = INTEGRATION_METADATA[i.integrationType];
82
- const name = meta?.name || i.integrationType;
83
- const status = i.isActive ? chalk.green(" connected") : chalk.dim(" not connected");
84
- return {
85
- name: `${name}${status}`,
86
- value: i.integrationType,
87
- description: meta?.description
88
- };
89
- })
116
+ }
117
+ async function promptForIntegrationSelection(integrations) {
118
+ const longestName = integrations.reduce((max, integration) => Math.max(max, getIntegrationDisplayName(integration).length), 0);
119
+ return group({
120
+ integrationType: () => select({
121
+ message: "Choose an integration",
122
+ options: integrations.map(integration => ({
123
+ value: integration.integrationType,
124
+ label: formatIntegrationPickerLabel(integration, longestName)
125
+ }))
126
+ }),
127
+ action: ({ results }) => {
128
+ const selectedType = results.integrationType;
129
+ const selectedIntegration = integrations.find(integration => integration.integrationType === selectedType);
130
+ if (!selectedIntegration) {
131
+ throw new Error(`Integration '${selectedType}' is no longer available`);
132
+ }
133
+ return select({
134
+ message: getIntegrationDisplayName(selectedIntegration),
135
+ options: getIntegrationActions(selectedIntegration).map(action => ({
136
+ value: action,
137
+ label: formatIntegrationActionLabel(action)
138
+ }))
139
+ });
140
+ }
141
+ }, {
142
+ onCancel: () => {
143
+ cancel("Operation cancelled.");
144
+ process.exit(0);
145
+ }
90
146
  });
91
- const selectedIntegration = userFacing.find(i => i.integrationType === selected);
147
+ }
148
+ function getIntegrationActions(integration) {
149
+ if (integration.cliDisplayState.status === "connected") {
150
+ return ["keep", "disconnect", "refresh_permissions"];
151
+ }
152
+ return ["connect", "back"];
153
+ }
154
+ function formatIntegrationActionLabel(action) {
155
+ switch (action) {
156
+ case "keep":
157
+ return "Keep this connection";
158
+ case "disconnect":
159
+ return "Disconnect";
160
+ case "refresh_permissions":
161
+ return "Refresh permissions";
162
+ case "connect":
163
+ return "Connect";
164
+ case "back":
165
+ return "Back";
166
+ default:
167
+ const exhaustiveCheck = action;
168
+ throw new Error(`Unhandled integration action: ${exhaustiveCheck}`);
169
+ }
170
+ }
171
+ function formatIntegrationPickerLabel(integration, longestName) {
172
+ const name = getIntegrationDisplayName(integration).padEnd(longestName);
173
+ const summary = formatIntegrationDisplaySummary(integration.cliDisplayState);
174
+ return `${name} ${chalk.dim(summary)}`;
175
+ }
176
+ function formatIntegrationDisplaySummary(displayState) {
177
+ if (displayState.status === "connected") {
178
+ return `${displayState.summaryLabel}: ${displayState.summaryValue}`;
179
+ }
180
+ return "Not connected";
181
+ }
182
+ function getIntegrationDisplayName(integration) {
183
+ return INTEGRATION_METADATA[integration.integrationType]?.name || integration.integrationType;
184
+ }
185
+ async function runInstallationFlow(apiKey, integrationType) {
186
+ const s = createSpinner();
92
187
  s.start("Loading integration details");
93
- let fieldsResponse;
94
188
  try {
95
- fieldsResponse = await fetchIntegrationFields(apiKey, selected);
189
+ const fieldsResponse = await fetchIntegrationFields(apiKey, integrationType);
96
190
  s.stop("Loaded integration details");
191
+ if (fieldsResponse.installationType === "form") {
192
+ return handleFormIntegration(apiKey, integrationType, fieldsResponse.fields, fieldsResponse.setup);
193
+ }
194
+ if (fieldsResponse.installationType === "oauth") {
195
+ return handleOAuthIntegration(apiKey, integrationType, fieldsResponse.fields);
196
+ }
97
197
  }
98
198
  catch (err) {
99
199
  s.stop("Failed to load integration details");
100
200
  console.error(chalk.red(` ${err.message}`));
101
- process.exit(1);
201
+ return false;
102
202
  }
103
- if (fieldsResponse.installationType === "form") {
104
- const didUpdate = await handleFormIntegration(apiKey, selected, fieldsResponse.fields);
105
- return {
106
- status: didUpdate ? (selectedIntegration?.isActive ? "modified" : "added") : "unchanged",
107
- integrationType: selected
108
- };
109
- }
110
- if (fieldsResponse.installationType === "oauth") {
111
- const didUpdate = await handleOAuthIntegration(apiKey, selected, fieldsResponse.fields);
112
- return {
113
- status: didUpdate ? (selectedIntegration?.isActive ? "modified" : "added") : "unchanged",
114
- integrationType: selected
115
- };
116
- }
117
- log.warn(`Integration '${selected}' has an unsupported installation type.`);
118
- return {
119
- status: "unchanged",
120
- integrationType: selected
121
- };
122
- }
123
- async function handleFormIntegration(apiKey, integrationType, fields) {
203
+ log.warn(`Integration '${integrationType}' has an unsupported installation type.`);
204
+ return false;
205
+ }
206
+ async function handleFormIntegration(apiKey, integrationType, fields, setup) {
207
+ await showFormSetupGuidance(integrationType, setup);
124
208
  const formValues = {};
125
209
  for (const field of fields) {
126
- const hint = field.hint ? chalk.dim(` (${field.hint})`) : "";
210
+ const promptMessage = buildFieldPromptMessage(field);
127
211
  if (field.type === "password") {
128
- formValues[field.name] = await password({
129
- message: `${field.label}${hint}`,
130
- validate: field.required ? v => (v.length > 0 ? true : `${field.label} is required`) : undefined
131
- });
212
+ formValues[field.name] = abortIfCancelled(await password({
213
+ message: promptMessage,
214
+ validate: field.required ? value => ((value?.length ?? 0) > 0 ? undefined : `${field.label} is required`) : undefined
215
+ }));
216
+ continue;
132
217
  }
133
- else {
218
+ if (field.type === "textarea") {
134
219
  formValues[field.name] = await input({
135
- message: `${field.label}${hint}`,
220
+ message: promptMessage,
136
221
  default: field.placeholder,
137
- validate: field.required ? v => (v.length > 0 ? true : `${field.label} is required`) : undefined
222
+ validate: field.required ? value => (value.length > 0 ? true : `${field.label} is required`) : undefined
138
223
  });
224
+ continue;
139
225
  }
226
+ formValues[field.name] = abortIfCancelled(await text({
227
+ message: promptMessage,
228
+ placeholder: field.placeholder,
229
+ validate: field.required ? value => ((value?.length ?? 0) > 0 ? undefined : `${field.label} is required`) : undefined
230
+ }));
140
231
  }
141
232
  const s = createSpinner();
142
233
  s.start("Connecting integration");
@@ -155,15 +246,36 @@ async function handleFormIntegration(apiKey, integrationType, fields) {
155
246
  return false;
156
247
  }
157
248
  }
249
+ async function showFormSetupGuidance(integrationType, setup) {
250
+ if (!setup)
251
+ return;
252
+ log.info(chalk.bold(`${INTEGRATION_METADATA[integrationType]?.name || integrationType} setup`));
253
+ console.log(chalk.cyan(setup.url));
254
+ console.log(chalk.dim(setup.title));
255
+ for (const instruction of setup.instructions) {
256
+ console.log(` ${chalk.dim("•")} ${instruction}`);
257
+ }
258
+ console.log("");
259
+ const shouldOpenSetupUrl = abortIfCancelled(await confirm({
260
+ message: "Open setup instructions in your browser?",
261
+ initialValue: false
262
+ }));
263
+ if (shouldOpenSetupUrl) {
264
+ openUrlInBrowser(setup.url);
265
+ }
266
+ }
267
+ function buildFieldPromptMessage(field) {
268
+ return field.hint ? `${field.label} ${chalk.dim(`(${field.hint})`)}` : field.label;
269
+ }
158
270
  async function handleOAuthIntegration(apiKey, integrationType, configFields) {
159
271
  let options;
160
272
  if (configFields.length > 0) {
161
273
  options = {};
162
274
  for (const field of configFields) {
163
- const value = await select({
275
+ const value = abortIfCancelled(await select({
164
276
  message: field.label,
165
- choices: field.options.map(o => ({ name: o.label, value: o.value }))
166
- });
277
+ options: field.options.map(option => ({ value: option.value, label: option.label }))
278
+ }));
167
279
  options[field.name] = value;
168
280
  }
169
281
  }
@@ -190,4 +302,29 @@ async function handleOAuthIntegration(apiKey, integrationType, configFields) {
190
302
  s.stop("Authorization timed out — please try again");
191
303
  return false;
192
304
  }
305
+ async function handleDisconnect(apiKey, integrationType) {
306
+ const s = createSpinner();
307
+ s.start("Disconnecting integration");
308
+ try {
309
+ const result = await disconnectIntegration(apiKey, integrationType);
310
+ if (result.success) {
311
+ s.stop("Integration disconnected successfully");
312
+ return true;
313
+ }
314
+ s.stop(`Failed to disconnect: ${result.error || "Unknown error"}`);
315
+ return false;
316
+ }
317
+ catch (err) {
318
+ s.stop("Failed to disconnect integration");
319
+ console.error(chalk.red(` ${err.message}`));
320
+ return false;
321
+ }
322
+ }
323
+ function abortIfCancelled(value) {
324
+ if (isCancel(value)) {
325
+ cancel("Operation cancelled.");
326
+ process.exit(0);
327
+ }
328
+ return value;
329
+ }
193
330
  //# sourceMappingURL=integrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/commands/integrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/commands/integrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":""}
@@ -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=terseCliTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terseCliTheme.d.ts","sourceRoot":"","sources":["../../src/commands/terseCliTheme.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=terseCliTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terseCliTheme.js","sourceRoot":"","sources":["../../src/commands/terseCliTheme.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGxE,wBAAsB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiFjJ"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGxE,wBAAsB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjJ"}
@@ -1,16 +1,16 @@
1
- import { select } from "@inquirer/prompts";
1
+ import { cancel, intro, isCancel, log, outro, select } from "@clack/prompts";
2
2
  import chalk from "chalk";
3
- import ora from "ora";
4
3
  import { IntegrationType } from "terse-sdk";
5
- import { ApiRoutes, debugTrigger, formatTriggerForAgent } from "terse-types";
4
+ import { ApiRoutes, debugTrigger, displayTrigger, formatTriggerForAgent } from "terse-types";
6
5
  import { fetchWithAuth, readApiKeyOrBail } from "../api.js";
7
6
  import { assertProjectRoot } from "../assertProjectRoot.js";
7
+ import { createSpinner } from "../cliUi.js";
8
8
  import { loadJob } from "../loadJob.js";
9
9
  import { resolveProvider } from "../providers/resolveProvider.js";
10
10
  export async function test(jobName, verbose, provider = resolveProvider(), entryFile) {
11
+ intro("terse test");
11
12
  assertProjectRoot(provider);
12
13
  const { job } = await loadJob(provider, jobName, entryFile);
13
- console.log(chalk.cyan(`\n Testing job: ${job.name}\n`));
14
14
  const apiKey = readApiKeyOrBail({
15
15
  title: "Error: Not authenticated. Unable to fetch sample events.",
16
16
  detail: "Run `terse login` to authenticate, or set TERSE_API_KEY in your environment."
@@ -22,7 +22,8 @@ export async function test(jobName, verbose, provider = resolveProvider(), entry
22
22
  let events = [];
23
23
  // Fetch sample events for integration triggers (time triggers have no sample events)
24
24
  if (integrationTriggers.length > 0) {
25
- const spinner = ora("Fetching sample events").start();
25
+ const spinner = createSpinner();
26
+ spinner.start("Fetching sample events");
26
27
  try {
27
28
  const result = await fetchWithAuth(ApiRoutes.SDK.SAMPLE_EVENTS, apiKey, {
28
29
  triggers: integrationTriggers.map(trigger => ({
@@ -33,10 +34,10 @@ export async function test(jobName, verbose, provider = resolveProvider(), entry
33
34
  }))
34
35
  }, "POST");
35
36
  events = result.events;
36
- spinner.succeed(`Sample events fetched. Found ${events.length} events.`);
37
+ spinner.stop(`Fetched ${events.length} sample event${events.length === 1 ? "" : "s"}`);
37
38
  }
38
39
  catch (err) {
39
- spinner.fail(err instanceof Error ? err.message : "Failed to fetch sample events.");
40
+ spinner.stop(err instanceof Error ? err.message : "Failed to fetch sample events.");
40
41
  }
41
42
  }
42
43
  // Add a synthetic manual trigger event for each time trigger
@@ -60,17 +61,79 @@ export async function test(jobName, verbose, provider = resolveProvider(), entry
60
61
  }));
61
62
  }
62
63
  if (events.length === 0) {
63
- console.error(chalk.red("\n No sample events available. Make sure your triggers are configured and events have been received.\n"));
64
+ log.error("No sample events available. Make sure your triggers are configured and events have been received.");
64
65
  process.exit(1);
65
66
  }
66
- const choice = await select({
67
- message: "Select sample event:",
68
- choices: events.map((event, index) => ({
69
- name: `${event.integrationType} - ${event.debugLog}`,
70
- value: index
71
- }))
72
- });
73
- await provider.executeJob(job, null, events[choice], { verbose: !!verbose, entryFile });
67
+ log.info(`Testing job ${chalk.cyan(job.name)}`);
68
+ const choice = await chooseSampleEvent(events);
69
+ const runSpinner = createSpinner();
70
+ runSpinner.start(`Running ${formatEventLabel(events[choice])}`);
71
+ try {
72
+ await provider.executeJob(job, null, events[choice], { verbose: !!verbose, entryFile });
73
+ runSpinner.stop("Run completed");
74
+ outro("Done");
75
+ }
76
+ catch (error) {
77
+ runSpinner.stop("Run failed");
78
+ throw error;
79
+ }
80
+ }
81
+ function formatEventLabel(event) {
82
+ return normalizeSingleLine(event.display?.title || `${event.integrationType} / ${event.eventType}`);
83
+ }
84
+ function formatEventHint(event) {
85
+ return truncate(normalizeSingleLine(event.display?.subtitle || event.debugLog), 120);
86
+ }
87
+ function truncate(value, maxLength) {
88
+ if (value.length <= maxLength) {
89
+ return value;
90
+ }
91
+ return `${value.slice(0, maxLength - 1)}…`;
92
+ }
93
+ function normalizeSingleLine(value) {
94
+ return value
95
+ .replace(/\s*\n+\s*/g, " ")
96
+ .replace(/\s+/g, " ")
97
+ .trim();
98
+ }
99
+ function abortIfCancelled(value) {
100
+ if (isCancel(value)) {
101
+ cancel("Operation cancelled.");
102
+ process.exit(0);
103
+ }
104
+ return value;
105
+ }
106
+ async function chooseSampleEvent(events) {
107
+ while (true) {
108
+ const choice = abortIfCancelled(await select({
109
+ message: "Choose a sample event",
110
+ options: events.map((event, index) => ({
111
+ label: `${formatEventLabel(event)} ${chalk.dim("›")}`,
112
+ hint: formatEventHint(event),
113
+ value: index
114
+ }))
115
+ }));
116
+ const action = await inspectSampleEvent(events[choice]);
117
+ if (action === "run") {
118
+ return choice;
119
+ }
120
+ }
121
+ }
122
+ async function inspectSampleEvent(event) {
123
+ log.info(chalk.bold(formatEventLabel(event)));
124
+ if (event.display?.subtitle) {
125
+ console.log(chalk.dim(event.display.subtitle));
126
+ }
127
+ console.log("");
128
+ console.log(chalk.dim(truncate(normalizeSingleLine(event.formattedContent), 300)));
129
+ console.log("");
130
+ return abortIfCancelled(await select({
131
+ message: "Run this event?",
132
+ options: [
133
+ { label: "Run this sample event", value: "run" },
134
+ { label: "Choose another event", value: "back" }
135
+ ]
136
+ }));
74
137
  }
75
138
  function serializeEvent(event) {
76
139
  return {
@@ -78,6 +141,7 @@ function serializeEvent(event) {
78
141
  eventType: event.eventType,
79
142
  formattedContent: formatTriggerForAgent(event),
80
143
  debugLog: debugTrigger(event),
144
+ display: displayTrigger(event),
81
145
  data: event
82
146
  };
83
147
  }