terse-cli 0.1.35 → 0.1.37

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 (92) 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 +10 -10
  5. package/dist/api.js.map +1 -1
  6. package/dist/assertProjectRoot.d.ts +1 -1
  7. package/dist/assertProjectRoot.d.ts.map +1 -1
  8. package/dist/assertProjectRoot.js +5 -4
  9. package/dist/assertProjectRoot.js.map +1 -1
  10. package/dist/cliError.d.ts +22 -0
  11. package/dist/cliError.d.ts.map +1 -0
  12. package/dist/cliError.js +67 -0
  13. package/dist/cliError.js.map +1 -0
  14. package/dist/cliHelpers.d.ts +20 -0
  15. package/dist/cliHelpers.d.ts.map +1 -0
  16. package/dist/cliHelpers.js +69 -0
  17. package/dist/cliHelpers.js.map +1 -0
  18. package/dist/commands/attach.d.ts +2 -1
  19. package/dist/commands/attach.d.ts.map +1 -1
  20. package/dist/commands/attach.js +7 -5
  21. package/dist/commands/attach.js.map +1 -1
  22. package/dist/commands/auth.d.ts +2 -1
  23. package/dist/commands/auth.d.ts.map +1 -1
  24. package/dist/commands/auth.js +20 -1
  25. package/dist/commands/auth.js.map +1 -1
  26. package/dist/commands/deploy.d.ts.map +1 -1
  27. package/dist/commands/deploy.js +14 -14
  28. package/dist/commands/deploy.js.map +1 -1
  29. package/dist/commands/generate.d.ts +1 -5
  30. package/dist/commands/generate.d.ts.map +1 -1
  31. package/dist/commands/generate.js +13 -16
  32. package/dist/commands/generate.js.map +1 -1
  33. package/dist/commands/history.d.ts +1 -1
  34. package/dist/commands/history.d.ts.map +1 -1
  35. package/dist/commands/history.js +4 -3
  36. package/dist/commands/history.js.map +1 -1
  37. package/dist/commands/init.d.ts +2 -1
  38. package/dist/commands/init.d.ts.map +1 -1
  39. package/dist/commands/init.js +11 -10
  40. package/dist/commands/init.js.map +1 -1
  41. package/dist/commands/integrate.d.ts +32 -2
  42. package/dist/commands/integrate.d.ts.map +1 -1
  43. package/dist/commands/integrate.js +424 -64
  44. package/dist/commands/integrate.js.map +1 -1
  45. package/dist/commands/replay.d.ts.map +1 -1
  46. package/dist/commands/replay.js +5 -6
  47. package/dist/commands/replay.js.map +1 -1
  48. package/dist/commands/run.d.ts.map +1 -1
  49. package/dist/commands/run.js +14 -17
  50. package/dist/commands/run.js.map +1 -1
  51. package/dist/commands/test.d.ts +47 -0
  52. package/dist/commands/test.d.ts.map +1 -1
  53. package/dist/commands/test.js +268 -48
  54. package/dist/commands/test.js.map +1 -1
  55. package/dist/index.js +161 -14
  56. package/dist/index.js.map +1 -1
  57. package/dist/integrationApi.d.ts +5 -2
  58. package/dist/integrationApi.d.ts.map +1 -1
  59. package/dist/integrationApi.js +8 -4
  60. package/dist/integrationApi.js.map +1 -1
  61. package/dist/loadJob.d.ts +2 -1
  62. package/dist/loadJob.d.ts.map +1 -1
  63. package/dist/loadJob.js +16 -13
  64. package/dist/loadJob.js.map +1 -1
  65. package/dist/nonInteractive.d.ts +20 -0
  66. package/dist/nonInteractive.d.ts.map +1 -0
  67. package/dist/nonInteractive.js +60 -0
  68. package/dist/nonInteractive.js.map +1 -0
  69. package/dist/projectConfig.d.ts.map +1 -1
  70. package/dist/projectConfig.js +17 -10
  71. package/dist/projectConfig.js.map +1 -1
  72. package/dist/providers/python/PythonProvider.d.ts.map +1 -1
  73. package/dist/providers/python/PythonProvider.js +24 -14
  74. package/dist/providers/python/PythonProvider.js.map +1 -1
  75. package/dist/providers/resolveProvider.d.ts.map +1 -1
  76. package/dist/providers/resolveProvider.js +7 -9
  77. package/dist/providers/resolveProvider.js.map +1 -1
  78. package/dist/providers/shared/entryFileGuidance.d.ts.map +1 -1
  79. package/dist/providers/shared/entryFileGuidance.js +7 -12
  80. package/dist/providers/shared/entryFileGuidance.js.map +1 -1
  81. package/dist/providers/typescript/TypeScriptProvider.d.ts.map +1 -1
  82. package/dist/providers/typescript/TypeScriptProvider.js +30 -27
  83. package/dist/providers/typescript/TypeScriptProvider.js.map +1 -1
  84. package/dist/sampleEventCache.d.ts +9 -0
  85. package/dist/sampleEventCache.d.ts.map +1 -0
  86. package/dist/sampleEventCache.js +47 -0
  87. package/dist/sampleEventCache.js.map +1 -0
  88. package/dist/sampleEventId.d.ts +9 -0
  89. package/dist/sampleEventId.d.ts.map +1 -0
  90. package/dist/sampleEventId.js +16 -0
  91. package/dist/sampleEventId.js.map +1 -0
  92. package/package.json +3 -3
@@ -1,18 +1,17 @@
1
- import chalk from "chalk";
2
1
  import { readApiKeyOrBail, resolveEventFromRunId } from "../api.js";
2
+ import { CliError } from "../cliError.js";
3
3
  import { loadJob } from "../loadJob.js";
4
4
  import { resolveProvider } from "../providers/resolveProvider.js";
5
5
  export async function replay(runId, provider = resolveProvider()) {
6
6
  const apiKey = readApiKeyOrBail();
7
7
  if (!runId) {
8
- console.error(chalk.red("Error: --run-id is required.\n"));
9
- console.error(chalk.dim(" Usage: terse replay --run-id <run-id>"));
10
- process.exit(1);
8
+ throw new CliError("missing_run_id", "--run-id is required.", {
9
+ detail: "Usage: terse replay --run-id <run-id>"
10
+ });
11
11
  }
12
12
  const runHistoryRecord = await resolveEventFromRunId(runId, apiKey);
13
13
  if (!runHistoryRecord) {
14
- console.error(chalk.red("Error: Could not fetch the trigger event for run ${runId}.\n"));
15
- process.exit(1);
14
+ throw new CliError("run_trigger_event_missing", `Could not fetch the trigger event for run ${runId}.`);
16
15
  }
17
16
  const { job } = await loadJob(provider, runHistoryRecord.agentName);
18
17
  await provider.executeJob(job, null, runHistoryRecord.event, { verbose: true });
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,WAA6B,eAAe,EAAE;IACtF,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAA;QAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAA;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAEnE,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACnF,CAAC"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,WAA6B,eAAe,EAAE;IACtF,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,uBAAuB,EAAE;YAC1D,MAAM,EAAE,uCAAuC;SAClD,CAAC,CAAA;IACN,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,6CAA6C,KAAK,GAAG,CAAC,CAAA;IAC1G,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAEnE,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGxE,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDrK"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGxE,wBAAsB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDrK"}
@@ -1,7 +1,7 @@
1
- import chalk from "chalk";
2
1
  import fs from "fs";
3
2
  import { serializedEventSchema } from "terse-types";
4
3
  import { readApiKeyOrBail, readRunId, resolveEventFromRunId } from "../api.js";
4
+ import { CliError } from "../cliError.js";
5
5
  import { loadJob } from "../loadJob.js";
6
6
  import { resolveProvider } from "../providers/resolveProvider.js";
7
7
  export async function run(jobName, eventJson, eventFile, provider = resolveProvider(), entryFile) {
@@ -10,9 +10,9 @@ export async function run(jobName, eventJson, eventFile, provider = resolveProvi
10
10
  eventJson = fs.readFileSync(eventFile, "utf-8");
11
11
  }
12
12
  catch (err) {
13
- console.error(chalk.red(`Error: Could not read event file: ${eventFile}`));
14
- console.error(chalk.dim(err instanceof Error ? err.message : String(err)));
15
- process.exit(1);
13
+ throw new CliError("event_file_unreadable", `Could not read event file: ${eventFile}`, {
14
+ detail: err instanceof Error ? err.message : String(err)
15
+ });
16
16
  }
17
17
  }
18
18
  const apiKey = readApiKeyOrBail({
@@ -28,31 +28,28 @@ export async function run(jobName, eventJson, eventFile, provider = resolveProvi
28
28
  rawEvent = JSON.parse(eventJson);
29
29
  }
30
30
  catch (error) {
31
- console.error(chalk.red("Error: --event must be valid JSON."));
32
- console.error(chalk.dim(error instanceof Error ? error.message : String(error)));
33
- process.exit(1);
31
+ throw new CliError("invalid_event_json", "--event must be valid JSON.", {
32
+ detail: error instanceof Error ? error.message : String(error)
33
+ });
34
34
  }
35
35
  if (!rawEvent) {
36
- console.error(chalk.red("Error: --event <json> or --event-file <path> is required.\n"));
37
- console.error(chalk.dim(' Usage: terse run --event \'{"integrationType":"...","eventType":"...","formattedContent":"...","debugLog":"...","data":{...}}\''));
38
- console.error(chalk.dim(" terse run --event-file ./event.json"));
39
- console.error(chalk.dim(" Tip: Use `terse test` to interactively pick a sample event.\n"));
40
- process.exit(1);
36
+ throw new CliError("missing_event", "Provide --event <json> or --event-file <path>.", {
37
+ detail: 'Usage: terse run --event \'{"integrationType":"...","eventType":"...","formattedContent":"...","debugLog":"...","data":{...}}\'\n terse run --event-file ./event.json\nTip: Use `terse test` to interactively pick a sample event.'
38
+ });
41
39
  }
42
40
  try {
43
41
  parsedEvent = serializedEventSchema.parse(rawEvent);
44
42
  }
45
43
  catch (error) {
46
- console.error(chalk.red("Error: --event does not match the canonical Trigger schema."));
47
- console.error(chalk.dim(error instanceof Error ? error.message : String(error)));
48
- process.exit(1);
44
+ throw new CliError("invalid_event_shape", "--event does not match the canonical Trigger schema.", {
45
+ detail: error instanceof Error ? error.message : String(error)
46
+ });
49
47
  }
50
48
  }
51
49
  else {
52
50
  const resolvedEvent = await resolveEventFromRunId(runId, apiKey);
53
51
  if (!resolvedEvent) {
54
- console.error(chalk.red("Error: Could not resolve event from run ID."));
55
- process.exit(1);
52
+ throw new CliError("run_trigger_event_missing", "Could not resolve event from run ID.");
56
53
  }
57
54
  parsedEvent = resolvedEvent.event;
58
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGnD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAgB,EAAE,SAAkB,EAAE,SAAkB,EAAE,WAA6B,eAAe,EAAE,EAAE,SAAkB;IAClJ,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,8BAA8B,SAAS,EAAE,EAAE;gBACnF,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC3D,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC5B,KAAK,EAAE,2BAA2B;QAClC,MAAM,EAAE,8EAA8E;KACzF,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IAEzB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;IAE3D,IAAI,WAA4B,CAAA;IAChC,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,QAAiB,CAAA;QACrB,IAAI,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,6BAA6B,EAAE;gBACpE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACjE,CAAC,CAAA;QACN,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,gDAAgD,EAAE;gBAClF,MAAM,EAAE,4OAA4O;aACvP,CAAC,CAAA;QACN,CAAC;QAED,IAAI,CAAC;YACD,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,sDAAsD,EAAE;gBAC9F,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACjE,CAAC,CAAA;QACN,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,sCAAsC,CAAC,CAAA;QAC3F,CAAC;QACD,WAAW,GAAG,aAAa,CAAC,KAAK,CAAA;IACrC,CAAC;IAED,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;AACrE,CAAC"}
@@ -1,3 +1,50 @@
1
+ import type { CreateJobParameters } from "terse-sdk";
2
+ import type { SerializedEvent } from "terse-types";
1
3
  import type { LanguageProvider } from "../providers/LanguageProvider.js";
2
4
  export declare function test(jobName?: string, verbose?: boolean, provider?: LanguageProvider, entryFile?: string): Promise<void>;
5
+ export declare function testList(opts?: TestListOpts): Promise<void>;
6
+ export declare function testShow(opts: TestShowOpts): Promise<void>;
7
+ export declare function testRun(opts: TestRunOpts): Promise<void>;
8
+ export declare function fetchSampleEventCandidatesForJob(job: CreateJobParameters, apiKey: string): Promise<SampleEventCandidate[]>;
9
+ export type TestListOpts = {
10
+ jobName?: string;
11
+ json?: boolean;
12
+ entryFile?: string;
13
+ provider?: LanguageProvider;
14
+ };
15
+ export type TestShowOpts = {
16
+ id: string;
17
+ jobName?: string;
18
+ json?: boolean;
19
+ entryFile?: string;
20
+ provider?: LanguageProvider;
21
+ };
22
+ export type TestRunOpts = {
23
+ jobName?: string;
24
+ id?: string;
25
+ eventJson?: string;
26
+ eventFile?: string;
27
+ verbose?: boolean;
28
+ entryFile?: string;
29
+ provider?: LanguageProvider;
30
+ };
31
+ type SampleEventCandidate = {
32
+ id: string;
33
+ kind: "ref";
34
+ integrationType: string;
35
+ eventType: string;
36
+ label: string;
37
+ subtitle: string | null;
38
+ entityType: string;
39
+ entityId: string;
40
+ } | {
41
+ id: string;
42
+ kind: "synthetic";
43
+ integrationType: string;
44
+ eventType: string;
45
+ label: string;
46
+ subtitle: string | null;
47
+ event: SerializedEvent;
48
+ };
49
+ export {};
3
50
  //# sourceMappingURL=test.d.ts.map
@@ -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":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAGpD,OAAO,KAAK,EAAuC,eAAe,EAAW,MAAM,aAAa,CAAA;AAQhG,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,CAkDjJ;AAED,wBAAsB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CrE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAchE;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB9D;AA8CD,wBAAsB,gCAAgC,CAAC,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAsDhI;AA0GD,MAAM,MAAM,YAAY,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC9B,CAAA;AAED,KAAK,oBAAoB,GACnB;IACI,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,KAAK,CAAA;IACX,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACnB,GACD;IACI,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,WAAW,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,eAAe,CAAA;CACzB,CAAA"}
@@ -1,76 +1,295 @@
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";
3
+ import fs from "node:fs";
4
4
  import { IntegrationType } from "terse-sdk";
5
- import { ApiRoutes, debugTrigger, formatTriggerForAgent } from "terse-types";
5
+ import { ApiRoutes, debugTrigger, displayTrigger, formatTriggerForAgent, serializedEventSchema } from "terse-types";
6
6
  import { fetchWithAuth, readApiKeyOrBail } from "../api.js";
7
7
  import { assertProjectRoot } from "../assertProjectRoot.js";
8
+ import { CliError } from "../cliError.js";
9
+ import { isNonInteractive } from "../cliHelpers.js";
10
+ import { createSpinner } from "../cliUi.js";
8
11
  import { loadJob } from "../loadJob.js";
9
12
  import { resolveProvider } from "../providers/resolveProvider.js";
10
13
  export async function test(jobName, verbose, provider = resolveProvider(), entryFile) {
14
+ if (isNonInteractive()) {
15
+ throw new CliError("test_requires_interactive", "`terse test` needs a terminal.", {
16
+ detail: "In non-interactive contexts, use `terse test list` to enumerate sample events and `terse test run --id <id>` to execute one."
17
+ });
18
+ }
19
+ intro("terse test");
11
20
  assertProjectRoot(provider);
12
21
  const { job } = await loadJob(provider, jobName, entryFile);
13
- console.log(chalk.cyan(`\n Testing job: ${job.name}\n`));
14
22
  const apiKey = readApiKeyOrBail({
15
23
  title: "Error: Not authenticated. Unable to fetch sample events.",
16
24
  detail: "Run `terse login` to authenticate, or set TERSE_API_KEY in your environment."
17
25
  });
18
- // Split triggers into time-based, webhook, and integration-based
26
+ const spinner = createSpinner();
27
+ spinner.start("Fetching sample events");
28
+ let candidates = [];
29
+ try {
30
+ candidates = await fetchSampleEventCandidatesForJob(job, apiKey);
31
+ spinner.stop(`Fetched ${candidates.length} sample event${candidates.length === 1 ? "" : "s"}`);
32
+ }
33
+ catch (err) {
34
+ spinner.stop(err instanceof Error ? err.message : "Failed to fetch sample events.");
35
+ }
36
+ if (candidates.length === 0) {
37
+ const webhookHint = hasWebhookTrigger(job);
38
+ throw new CliError("no_sample_events", "No sample events available.", {
39
+ detail: webhookHint
40
+ ? "Webhook triggers do not provide sample events yet. Use `--event` / `--event-file` with a concrete payload."
41
+ : "Make sure your triggers are configured and events have been received."
42
+ });
43
+ }
44
+ log.info(`Testing job ${chalk.cyan(job.name)}`);
45
+ const event = await chooseSampleEvent(candidates, apiKey);
46
+ const runSpinner = createSpinner();
47
+ runSpinner.start(`Running ${formatEventLabel(event)}`);
48
+ try {
49
+ await provider.executeJob(job, null, event, { verbose: !!verbose, entryFile });
50
+ runSpinner.stop("Run completed");
51
+ outro("Done");
52
+ }
53
+ catch (error) {
54
+ runSpinner.stop("Run failed");
55
+ throw error;
56
+ }
57
+ }
58
+ export async function testList(opts = {}) {
59
+ const provider = opts.provider ?? resolveProvider();
60
+ assertProjectRoot(provider);
61
+ const { job } = await loadJob(provider, opts.jobName, opts.entryFile, { nonInteractive: true });
62
+ const apiKey = readApiKeyOrBail();
63
+ const candidates = await fetchSampleEventCandidatesForJob(job, apiKey);
64
+ if (opts.json) {
65
+ const payload = {
66
+ job: job.name,
67
+ events: candidates.map(candidate => ({
68
+ id: candidate.id,
69
+ integrationType: candidate.integrationType,
70
+ eventType: candidate.eventType,
71
+ label: candidate.label,
72
+ subtitle: candidate.subtitle,
73
+ entityType: candidate.kind === "ref" ? candidate.entityType : null,
74
+ entityId: candidate.kind === "ref" ? candidate.entityId : null
75
+ }))
76
+ };
77
+ process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
78
+ return;
79
+ }
80
+ if (candidates.length === 0) {
81
+ if (hasWebhookTrigger(job)) {
82
+ process.stdout.write("No sample events available. Webhook triggers are not supported for test samples.\n");
83
+ }
84
+ else {
85
+ process.stdout.write("No sample events available.\n");
86
+ }
87
+ return;
88
+ }
89
+ process.stdout.write(`Sample events for job ${job.name}:\n\n`);
90
+ for (const candidate of candidates) {
91
+ const subtitle = candidate.subtitle ? ` — ${normalizeSingleLine(candidate.subtitle)}` : "";
92
+ process.stdout.write(` ${chalk.cyan(candidate.id)} ${candidate.integrationType}/${candidate.eventType} ${candidate.label}${chalk.dim(subtitle)}\n`);
93
+ }
94
+ process.stdout.write("\n");
95
+ process.stdout.write(chalk.dim(`Run one with: terse test run --id <id>\n`));
96
+ }
97
+ export async function testShow(opts) {
98
+ const provider = opts.provider ?? resolveProvider();
99
+ assertProjectRoot(provider);
100
+ const event = await resolveEventById(provider, opts.id, opts.jobName, opts.entryFile);
101
+ if (opts.json) {
102
+ process.stdout.write(JSON.stringify({ id: opts.id, event }, null, 2) + "\n");
103
+ return;
104
+ }
105
+ process.stdout.write(`${chalk.bold(formatEventLabel(event))}\n`);
106
+ if (event.display?.subtitle)
107
+ process.stdout.write(chalk.dim(event.display.subtitle) + "\n");
108
+ process.stdout.write(`\n${event.formattedContent}\n`);
109
+ }
110
+ export async function testRun(opts) {
111
+ const provider = opts.provider ?? resolveProvider();
112
+ assertProjectRoot(provider);
113
+ const modeCount = [opts.id, opts.eventJson, opts.eventFile].filter(Boolean).length;
114
+ if (modeCount === 0) {
115
+ throw new CliError("missing_event", "Provide one of --id, --event, or --event-file.", {
116
+ detail: "Run `terse test list --json` to see available sample ids."
117
+ });
118
+ }
119
+ if (modeCount > 1) {
120
+ throw new CliError("conflicting_flags", "--id, --event, and --event-file are mutually exclusive.");
121
+ }
122
+ const { job } = await loadJob(provider, opts.jobName, opts.entryFile, { nonInteractive: true });
123
+ let event;
124
+ if (opts.id) {
125
+ event = await resolveEventByIdForJob(job, opts.id);
126
+ }
127
+ else {
128
+ const rawJson = opts.eventJson ?? readEventFile(opts.eventFile);
129
+ event = parseEventJson(rawJson);
130
+ }
131
+ await provider.executeJob(job, null, event, { verbose: !!opts.verbose, entryFile: opts.entryFile });
132
+ }
133
+ async function resolveEventById(provider, id, jobNameHint, entryFile) {
134
+ const { job } = await loadJob(provider, jobNameHint, entryFile, { nonInteractive: true });
135
+ return resolveEventByIdForJob(job, id);
136
+ }
137
+ async function resolveEventByIdForJob(job, id) {
138
+ const apiKey = readApiKeyOrBail();
139
+ const candidates = await fetchSampleEventCandidatesForJob(job, apiKey);
140
+ const match = candidates.find(candidate => candidate.id === id);
141
+ if (match)
142
+ return hydrateCandidateEvent(match, apiKey);
143
+ throw new CliError("sample_not_found", `No sample event matches id ${id}.`, {
144
+ detail: "Run `terse test list` to refresh — the event may have rotated out of the sample buffer."
145
+ });
146
+ }
147
+ function readEventFile(filePath) {
148
+ try {
149
+ return fs.readFileSync(filePath, "utf-8");
150
+ }
151
+ catch (err) {
152
+ throw new CliError("event_file_unreadable", `Could not read event file: ${filePath}`, {
153
+ detail: err instanceof Error ? err.message : String(err)
154
+ });
155
+ }
156
+ }
157
+ function parseEventJson(raw) {
158
+ let parsed;
159
+ try {
160
+ parsed = JSON.parse(raw);
161
+ }
162
+ catch (err) {
163
+ throw new CliError("invalid_event_json", "--event / --event-file must be valid JSON.", {
164
+ detail: err instanceof Error ? err.message : String(err)
165
+ });
166
+ }
167
+ try {
168
+ return serializedEventSchema.parse(parsed);
169
+ }
170
+ catch (err) {
171
+ throw new CliError("invalid_event_shape", "Event JSON does not match the canonical Trigger schema.", {
172
+ detail: err instanceof Error ? err.message : String(err)
173
+ });
174
+ }
175
+ }
176
+ export async function fetchSampleEventCandidatesForJob(job, apiKey) {
19
177
  const timeTriggers = job.triggers.filter(t => t.integrationType === IntegrationType.CRON_JOB);
20
- const webhookTriggers = job.triggers.filter(t => t.integrationType === IntegrationType.WEBHOOK);
21
178
  const integrationTriggers = job.triggers.filter(t => t.integrationType !== IntegrationType.CRON_JOB && t.integrationType !== IntegrationType.WEBHOOK);
22
- let events = [];
23
- // Fetch sample events for integration triggers (time triggers have no sample events)
179
+ const candidates = [];
24
180
  if (integrationTriggers.length > 0) {
25
- const spinner = ora("Fetching sample events").start();
26
- try {
27
- const result = await fetchWithAuth(ApiRoutes.SDK.SAMPLE_EVENTS, apiKey, {
28
- triggers: integrationTriggers.map(trigger => ({
29
- triggerId: undefined,
30
- integrationId: trigger.integrationId,
31
- integrationType: trigger.integrationType,
32
- config: trigger
33
- }))
34
- }, "POST");
35
- events = result.events;
36
- spinner.succeed(`Sample events fetched. Found ${events.length} events.`);
37
- }
38
- catch (err) {
39
- spinner.fail(err instanceof Error ? err.message : "Failed to fetch sample events.");
40
- }
181
+ const result = await fetchWithAuth(ApiRoutes.SDK.SAMPLE_EVENTS, apiKey, {
182
+ triggers: integrationTriggers.map(trigger => ({
183
+ triggerId: undefined,
184
+ integrationId: trigger.integrationId,
185
+ integrationType: trigger.integrationType,
186
+ config: trigger
187
+ }))
188
+ }, "POST");
189
+ candidates.push(...result.events.map(event => ({
190
+ id: encodeRefId(event.entity.entityType, event.entity.entityId),
191
+ kind: "ref",
192
+ integrationType: event.serializedEvent.integrationType,
193
+ eventType: event.serializedEvent.eventType,
194
+ label: normalizeSingleLine(event.serializedEvent.display?.title || `${event.serializedEvent.integrationType} / ${event.serializedEvent.eventType}`),
195
+ subtitle: event.serializedEvent.display?.subtitle ?? null,
196
+ entityType: event.entity.entityType,
197
+ entityId: event.entity.entityId
198
+ })));
41
199
  }
42
- // Add a synthetic manual trigger event for each time trigger
43
- for (const trigger of timeTriggers) {
44
- events.push(serializeEvent({
200
+ for (const [index, trigger] of timeTriggers.entries()) {
201
+ const event = serializeEvent({
45
202
  integrationType: IntegrationType.CRON_JOB,
46
203
  eventType: "cron",
47
204
  inputId: trigger.integrationId,
48
205
  isManualTrigger: true,
49
- manualContext: `Manual trigger from terse test (schedule: ${trigger.cronExpression ?? "unknown"})`
50
- }));
206
+ manualContext: `Manual trigger from terse test (schedule: ${trigger.cronExpression})`
207
+ });
208
+ candidates.push({
209
+ id: `synthetic:cron:${index}`,
210
+ kind: "synthetic",
211
+ integrationType: event.integrationType,
212
+ eventType: event.eventType,
213
+ label: formatEventLabel(event),
214
+ subtitle: event.display?.subtitle ?? null,
215
+ event
216
+ });
217
+ }
218
+ return candidates;
219
+ }
220
+ function formatEventLabel(event) {
221
+ return normalizeSingleLine(event.display?.title || `${event.integrationType} / ${event.eventType}`);
222
+ }
223
+ function formatEventHint(candidate) {
224
+ if (candidate.subtitle)
225
+ return truncate(normalizeSingleLine(candidate.subtitle), 120);
226
+ return candidate.kind === "ref" ? truncate(`${candidate.integrationType}/${candidate.eventType}`, 120) : "Synthetic sample event";
227
+ }
228
+ function truncate(value, maxLength) {
229
+ if (value.length <= maxLength) {
230
+ return value;
51
231
  }
52
- // Add a synthetic manual trigger event for each webhook trigger
53
- for (const trigger of webhookTriggers) {
54
- events.push(serializeEvent({
55
- integrationType: IntegrationType.WEBHOOK,
56
- eventType: "webhook",
57
- body: {},
58
- headers: {},
59
- method: "POST"
232
+ return `${value.slice(0, maxLength - 1)}…`;
233
+ }
234
+ function normalizeSingleLine(value) {
235
+ return value
236
+ .replace(/\s*\n+\s*/g, " ")
237
+ .replace(/\s+/g, " ")
238
+ .trim();
239
+ }
240
+ function abortIfCancelled(value) {
241
+ if (isCancel(value)) {
242
+ cancel("Operation cancelled.");
243
+ process.exit(0);
244
+ }
245
+ return value;
246
+ }
247
+ async function chooseSampleEvent(candidates, apiKey) {
248
+ while (true) {
249
+ const choice = abortIfCancelled(await select({
250
+ message: "Choose a sample event",
251
+ options: candidates.map((candidate, index) => ({
252
+ label: `${candidate.label} ${chalk.dim("›")}`,
253
+ hint: formatEventHint(candidate),
254
+ value: index
255
+ }))
60
256
  }));
257
+ const event = await hydrateCandidateEvent(candidates[choice], apiKey);
258
+ const action = await inspectSampleEvent(event);
259
+ if (action === "run") {
260
+ return event;
261
+ }
61
262
  }
62
- 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
- process.exit(1);
263
+ }
264
+ async function hydrateCandidateEvent(candidate, apiKey) {
265
+ if (candidate.kind === "synthetic") {
266
+ return candidate.event;
65
267
  }
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 });
268
+ const payload = await fetchWithAuth(ApiRoutes.SDK.HYDRATE_SAMPLE_EVENT, apiKey, { entityType: candidate.entityType, entityId: candidate.entityId }, "POST");
269
+ return payload.event;
270
+ }
271
+ function encodeRefId(entityType, entityId) {
272
+ const token = Buffer.from(JSON.stringify({ entityType, entityId }), "utf8").toString("base64url");
273
+ return `ref:${token}`;
274
+ }
275
+ function hasWebhookTrigger(job) {
276
+ return job.triggers.some(trigger => trigger.integrationType === IntegrationType.WEBHOOK);
277
+ }
278
+ async function inspectSampleEvent(event) {
279
+ log.info(chalk.bold(formatEventLabel(event)));
280
+ if (event.display?.subtitle) {
281
+ console.log(chalk.dim(event.display.subtitle));
282
+ }
283
+ console.log("");
284
+ console.log(chalk.dim(truncate(normalizeSingleLine(event.formattedContent), 300)));
285
+ console.log("");
286
+ return abortIfCancelled(await select({
287
+ message: "Run this event?",
288
+ options: [
289
+ { label: "Run this sample event", value: "run" },
290
+ { label: "Choose another event", value: "back" }
291
+ ]
292
+ }));
74
293
  }
75
294
  function serializeEvent(event) {
76
295
  return {
@@ -78,6 +297,7 @@ function serializeEvent(event) {
78
297
  eventType: event.eventType,
79
298
  formattedContent: formatTriggerForAgent(event),
80
299
  debugLog: debugTrigger(event),
300
+ display: displayTrigger(event),
81
301
  data: event
82
302
  };
83
303
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}