terse-cli 0.1.50 → 0.1.52

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 (71) hide show
  1. package/LICENSE.md +83 -0
  2. package/dist/commands/generate.d.ts.map +1 -1
  3. package/dist/commands/generate.js.map +1 -1
  4. package/dist/jsonOutput.d.ts +19 -0
  5. package/dist/jsonOutput.d.ts.map +1 -0
  6. package/dist/jsonOutput.js +25 -0
  7. package/dist/jsonOutput.js.map +1 -0
  8. package/dist/nonInteractive.d.ts +2 -4
  9. package/dist/nonInteractive.d.ts.map +1 -1
  10. package/dist/nonInteractive.js +2 -5
  11. package/dist/nonInteractive.js.map +1 -1
  12. package/dist/providers/codegenTypes.d.ts +4 -0
  13. package/dist/providers/codegenTypes.d.ts.map +1 -1
  14. package/dist/providers/python/PythonProvider.js +0 -1
  15. package/dist/providers/python/PythonProvider.js.map +1 -1
  16. package/dist/providers/typescript/prepareCodegenData.d.ts +2 -0
  17. package/dist/providers/typescript/prepareCodegenData.d.ts.map +1 -1
  18. package/dist/providers/typescript/prepareCodegenData.js +111 -63
  19. package/dist/providers/typescript/prepareCodegenData.js.map +1 -1
  20. package/dist/replay.d.ts +3 -0
  21. package/dist/replay.d.ts.map +1 -0
  22. package/dist/replay.js +20 -0
  23. package/dist/replay.js.map +1 -0
  24. package/dist/run.d.ts.map +1 -1
  25. package/dist/run.js +12 -36
  26. package/dist/run.js.map +1 -1
  27. package/dist/sampleEventId.d.ts +4 -0
  28. package/dist/sampleEventId.d.ts.map +1 -1
  29. package/dist/sampleEventId.js +4 -0
  30. package/dist/sampleEventId.js.map +1 -1
  31. package/dist/shared/ToolDisplayUtils.js +1 -1
  32. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  33. package/dist/urls.d.ts +3 -0
  34. package/dist/urls.d.ts.map +1 -0
  35. package/dist/urls.js +27 -0
  36. package/dist/urls.js.map +1 -0
  37. package/package.json +4 -3
  38. package/templates/typescript/codegen/partials/attio-section.hbs +20 -1
  39. package/templates/typescript/codegen/partials/triggers-section.hbs +117 -0
  40. package/dist/commands/deployTheme.d.ts +0 -28
  41. package/dist/commands/deployTheme.d.ts.map +0 -1
  42. package/dist/commands/deployTheme.js +0 -68
  43. package/dist/commands/deployTheme.js.map +0 -1
  44. package/dist/commands/dev.d.ts +0 -3
  45. package/dist/commands/dev.d.ts.map +0 -1
  46. package/dist/commands/dev.js +0 -47
  47. package/dist/commands/dev.js.map +0 -1
  48. package/dist/commands/serve.d.ts +0 -1
  49. package/dist/commands/serve.d.ts.map +0 -1
  50. package/dist/commands/serve.js +0 -2
  51. package/dist/commands/serve.js.map +0 -1
  52. package/dist/commands/terseCliTheme.d.ts +0 -28
  53. package/dist/commands/terseCliTheme.d.ts.map +0 -1
  54. package/dist/commands/terseCliTheme.js +0 -68
  55. package/dist/commands/terseCliTheme.js.map +0 -1
  56. package/dist/perf.d.ts +0 -9
  57. package/dist/perf.d.ts.map +0 -1
  58. package/dist/perf.js +0 -59
  59. package/dist/perf.js.map +0 -1
  60. package/dist/providers/codegen.test.d.ts +0 -2
  61. package/dist/providers/codegen.test.d.ts.map +0 -1
  62. package/dist/providers/codegen.test.js +0 -45
  63. package/dist/providers/codegen.test.js.map +0 -1
  64. package/dist/providers/python/PythonProvider.test.d.ts +0 -2
  65. package/dist/providers/python/PythonProvider.test.d.ts.map +0 -1
  66. package/dist/providers/python/PythonProvider.test.js +0 -169
  67. package/dist/providers/python/PythonProvider.test.js.map +0 -1
  68. package/dist/providers/typescript/prepareCodegenData.test.d.ts +0 -2
  69. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +0 -1
  70. package/dist/providers/typescript/prepareCodegenData.test.js +0 -54
  71. package/dist/providers/typescript/prepareCodegenData.test.js.map +0 -1
@@ -1,28 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,68 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"terseCliTheme.js","sourceRoot":"","sources":["../../src/commands/terseCliTheme.ts"],"names":[],"mappings":"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"}
package/dist/perf.d.ts DELETED
@@ -1,9 +0,0 @@
1
- type PerfAttributes = Record<string, unknown>;
2
- export declare function enableCliPerfLogging(): void;
3
- export declare function startCliPerfStep(step: string, attributes?: PerfAttributes): {
4
- complete: (extra?: PerfAttributes) => void;
5
- fail: (error: unknown, extra?: PerfAttributes) => void;
6
- };
7
- export declare function withCliPerfStep<T>(step: string, attributes: PerfAttributes, fn: () => Promise<T>): Promise<T>;
8
- export {};
9
- //# sourceMappingURL=perf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"perf.d.ts","sourceRoot":"","sources":["../src/perf.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAiC7C,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,cAAmB,GAAG;IAC7E,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,cAAc,KAAK,IAAI,CAAA;IAC1C,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,cAAc,KAAK,IAAI,CAAA;CACzD,CAqBA;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWnH"}
package/dist/perf.js DELETED
@@ -1,59 +0,0 @@
1
- import chalk from "chalk";
2
- function isPerfLoggingEnabled() {
3
- const value = process.env.TERSE_PERF_LOGS;
4
- if (value === undefined) {
5
- return false;
6
- }
7
- return !["0", "false", "off", "no"].includes(value.toLowerCase());
8
- }
9
- function serializeAttributes(attributes) {
10
- return JSON.stringify(Object.fromEntries(Object.entries(attributes).filter(([, value]) => value !== undefined)), (_key, value) => {
11
- if (value instanceof Error) {
12
- return { message: value.message, name: value.name };
13
- }
14
- return value;
15
- });
16
- }
17
- function logPerf(step, phase, attributes = {}) {
18
- if (!isPerfLoggingEnabled()) {
19
- return;
20
- }
21
- console.log(chalk.dim(`[terse:perf] ${serializeAttributes({ step, phase, ...attributes })}`));
22
- }
23
- export function enableCliPerfLogging() {
24
- process.env.TERSE_PERF_LOGS ??= "1";
25
- }
26
- export function startCliPerfStep(step, attributes = {}) {
27
- const start = performance.now();
28
- logPerf(step, "started", attributes);
29
- return {
30
- complete(extra = {}) {
31
- logPerf(step, "completed", {
32
- ...attributes,
33
- ...extra,
34
- duration_ms: Math.round(performance.now() - start)
35
- });
36
- },
37
- fail(error, extra = {}) {
38
- logPerf(step, "failed", {
39
- ...attributes,
40
- ...extra,
41
- duration_ms: Math.round(performance.now() - start),
42
- error: error instanceof Error ? error.message : String(error)
43
- });
44
- }
45
- };
46
- }
47
- export async function withCliPerfStep(step, attributes, fn) {
48
- const timer = startCliPerfStep(step, attributes);
49
- try {
50
- const result = await fn();
51
- timer.complete();
52
- return result;
53
- }
54
- catch (error) {
55
- timer.fail(error);
56
- throw error;
57
- }
58
- }
59
- //# sourceMappingURL=perf.js.map
package/dist/perf.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"perf.js","sourceRoot":"","sources":["../src/perf.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=codegen.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codegen.test.d.ts","sourceRoot":"","sources":["../../src/providers/codegen.test.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
- import { preparePythonTemplateContext } from "./python/preparePythonCodegenData.js";
4
- import { renderPythonGeneratedCode } from "./python/pythonTemplateEngine.js";
5
- import { prepareTemplateContext } from "./typescript/prepareCodegenData.js";
6
- import { renderGeneratedCode } from "./typescript/templateEngine.js";
7
- function buildCodegenInput() {
8
- return {
9
- github: [
10
- {
11
- integration: { id: "github_int" },
12
- repositories: [{ id: 1, name: "terse", owner: "acme", fullName: "acme/terse" }]
13
- }
14
- ],
15
- slack: [{ id: "slack_int", displayName: "Slack", channels: [{ id: "C123", name: "alerts" }] }],
16
- gmail: [{ id: "gmail_int", displayName: "Gmail" }],
17
- linear: [{ id: "linear_int", displayName: "Linear", teams: [] }],
18
- notion: [],
19
- posthog: [],
20
- datadog: [],
21
- launchdarkly: [],
22
- workos: [{ id: "workos_int", displayName: "WorkOS" }],
23
- attio: [],
24
- snowflake: [],
25
- tools: []
26
- };
27
- }
28
- test("typescript codegen narrows supported trigger helpers", () => {
29
- const output = renderGeneratedCode(prepareTemplateContext(buildCodegenInput()));
30
- assert.match(output, /onPRSynchronized\(opts: \{ repo: Repos \}\): TypedTrigger<GitHubPullRequestSynchronizedTriggerEvent>/);
31
- assert.match(output, /onIssueCreated\(opts\?: \{ projectId\?: string; projectName\?: string \}\): TypedTrigger<LinearIssueCreatedTriggerEvent>/);
32
- assert.match(output, /onMembershipCreated\(\): TypedTrigger<WorkOSOrganizationMembershipCreatedTriggerEvent>/);
33
- assert.doesNotMatch(output, /onAppMention/);
34
- assert.doesNotMatch(output, /onReactionAdded/);
35
- });
36
- test("python codegen emits precise trigger helper annotations", () => {
37
- const output = renderPythonGeneratedCode(preparePythonTemplateContext(buildCodegenInput()));
38
- assert.match(output, /def on_pr_synchronized\(\*, repo: GitHubRepo\) -> TriggerConfig\[GitHubPullRequestSynchronizedTriggerEvent\]:/);
39
- assert.match(output, /def on_issue_created\(\*, project_id: str \| None = None, project_name: str \| None = None\) -> TriggerConfig\[LinearIssueCreatedTriggerEvent\]:/);
40
- assert.match(output, /def on_membership_created\(\) -> TriggerConfig\[WorkOSOrganizationMembershipCreatedTriggerEvent\]:/);
41
- assert.match(output, /class Webhook:/);
42
- assert.doesNotMatch(output, /def on_app_mention/);
43
- assert.doesNotMatch(output, /def on_reaction_added/);
44
- });
45
- //# sourceMappingURL=codegen.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codegen.test.js","sourceRoot":"","sources":["../../src/providers/codegen.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAEpE,SAAS,iBAAiB;IACtB,OAAO;QACH,MAAM,EAAE;YACJ;gBACI,WAAW,EAAE,EAAE,EAAE,EAAE,YAAY,EAAS;gBACxC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;aAClF;SACJ;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC9F,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAClD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAChE,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACrD,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;KACZ,CAAA;AACL,CAAC;AAED,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAC9D,MAAM,MAAM,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IAE/E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,sGAAsG,CAAC,CAAA;IAC5H,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,0HAA0H,CAAC,CAAA;IAChJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,wFAAwF,CAAC,CAAA;IAC9G,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC3C,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,yBAAyB,CAAC,4BAA4B,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IAE3F,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,+GAA+G,CAAC,CAAA;IACrI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kJAAkJ,CAAC,CAAA;IACxK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oGAAoG,CAAC,CAAA;IAC1H,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACtC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACjD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;AACxD,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=PythonProvider.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PythonProvider.test.d.ts","sourceRoot":"","sources":["../../../src/providers/python/PythonProvider.test.ts"],"names":[],"mappings":""}
@@ -1,169 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import fs from "node:fs";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { afterEach, beforeEach, describe, it, mock } from "node:test";
6
- import { PythonProvider } from "./PythonProvider.js";
7
- const JOB_REGISTRY_MARKER = "__TERSE_JOB_REGISTRY__=";
8
- const CREATED_DIRS = [];
9
- class ExitSignal extends Error {
10
- code;
11
- constructor(code) {
12
- super(`process.exit(${code ?? 0})`);
13
- this.code = code;
14
- }
15
- }
16
- class TestPythonProvider extends PythonProvider {
17
- execStdout = "";
18
- capturedScripts = [];
19
- execCalls = [];
20
- async execUvCommand(args, opts) {
21
- this.execCalls.push({ args, cwd: opts.cwd, env: opts.env });
22
- return { stdout: this.execStdout, stderr: "" };
23
- }
24
- async withTempPythonScript(source, fn) {
25
- this.capturedScripts.push(source);
26
- return fn("/tmp/terse-python-provider-test.py");
27
- }
28
- async ensureUvAvailable(_cwd) { }
29
- }
30
- describe("PythonProvider entry file resolution", () => {
31
- const originalCwd = process.cwd();
32
- beforeEach(() => {
33
- mock.restoreAll();
34
- });
35
- afterEach(() => {
36
- process.chdir(originalCwd);
37
- mock.restoreAll();
38
- while (CREATED_DIRS.length > 0) {
39
- const dir = CREATED_DIRS.pop();
40
- if (dir)
41
- fs.rmSync(dir, { recursive: true, force: true });
42
- }
43
- });
44
- it("loads the canonical default entry file from src/main.py", async () => {
45
- const dir = createPythonProject({
46
- "src/main.py": "from terse_sdk import Terse\napp = Terse()\n"
47
- });
48
- process.chdir(dir);
49
- const provider = new TestPythonProvider();
50
- provider.execStdout = buildRegistryPayload("default-job");
51
- const registry = await provider.loadJobRegistry();
52
- assert.deepEqual([...registry.keys()], ["default-job"]);
53
- assert.match(provider.capturedScripts[0], /ENTRY_FILE = "src\/main\.py"/);
54
- assert.deepEqual(provider.execCalls[0]?.args, ["run", "python", "/tmp/terse-python-provider-test.py"]);
55
- assert.equal(fs.realpathSync(provider.execCalls[0]?.cwd ?? ""), fs.realpathSync(dir));
56
- assert.match(provider.execCalls[0]?.env?.UV_CACHE_DIR ?? "", /terse-uv-cache$/);
57
- });
58
- it("prints guidance when the default entry file is missing", async () => {
59
- const dir = createPythonProject({
60
- "src/server.py": "from terse_sdk import Terse\napp = Terse()\n"
61
- });
62
- process.chdir(dir);
63
- const provider = new TestPythonProvider();
64
- const errors = [];
65
- mock.method(console, "error", (...args) => {
66
- errors.push(args.map(String).join(" "));
67
- });
68
- mock.method(process, "exit", (code) => {
69
- throw new ExitSignal(code);
70
- });
71
- await assert.rejects(provider.loadJobRegistry(), (error) => error instanceof ExitSignal && error.code === 1);
72
- const output = stripAnsi(errors.join("\n"));
73
- assert.match(output, /default Python Terse entry file at src\/main\.py/);
74
- assert.match(output, /register at least one job with @app\.job/);
75
- assert.match(output, /terse test --entry-file src\/server\.py/);
76
- assert.match(output, /terse run my-job --entry-file src\/server\.py --event-file \.\/event\.json/);
77
- assert.match(output, /terse deploy --entry-file src\/server\.py/);
78
- assert.equal(provider.execCalls.length, 0);
79
- });
80
- it("loads a non-canonical entry file when --entry-file is provided", async () => {
81
- const dir = createPythonProject({
82
- "src/server.py": "from terse_sdk import Terse\napp = Terse()\n"
83
- });
84
- process.chdir(dir);
85
- const provider = new TestPythonProvider();
86
- provider.execStdout = buildRegistryPayload("self-hosted-job");
87
- const registry = await provider.loadJobRegistry("src/server.py");
88
- assert.deepEqual([...registry.keys()], ["self-hosted-job"]);
89
- assert.match(provider.capturedScripts[0], /ENTRY_FILE = "src\/server\.py"/);
90
- });
91
- });
92
- describe("PythonProvider GitHub codegen parity", () => {
93
- it("renders GitHub.skill() with repositoryIds via PythonProvider.renderGeneratedCode()", () => {
94
- const provider = new PythonProvider();
95
- const code = provider.renderGeneratedCode(buildCodegenInput({
96
- github: [
97
- {
98
- integration: {
99
- id: "github-integration-id",
100
- installation_id: 123,
101
- account_name: "TerseAI"
102
- },
103
- repositories: [
104
- {
105
- id: 1076128380,
106
- name: "Terse",
107
- owner: "TerseAI",
108
- fullName: "TerseAI/Terse"
109
- }
110
- ]
111
- }
112
- ]
113
- }));
114
- assert.match(code, /class GitHub:/);
115
- assert.match(code, /def skill\(\*, repos: Sequence\[GitHubRepo\]\) -> SkillConfig\[str\]:/);
116
- assert.match(code, /integration_id='github-integration-id'/);
117
- assert.match(code, /config_type='github'/);
118
- assert.match(code, /repositoryIds=\[repo\.repository_id for repo in repos\]/);
119
- });
120
- it("does not emit GitHub helpers when no GitHub integration is present", () => {
121
- const provider = new PythonProvider();
122
- const code = provider.renderGeneratedCode(buildCodegenInput());
123
- assert.doesNotMatch(code, /# === GitHub ===/);
124
- assert.doesNotMatch(code, /def skill\(\*, repos: Sequence\[GitHubRepo\]\)/);
125
- });
126
- });
127
- function createPythonProject(files) {
128
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "terse-python-provider-"));
129
- CREATED_DIRS.push(dir);
130
- fs.writeFileSync(path.join(dir, "pyproject.toml"), ["[project]", 'name = "provider-test"', 'version = "0.0.1"', 'requires-python = ">=3.11"', "dependencies = []", ""].join("\n"), "utf-8");
131
- for (const [relativePath, contents] of Object.entries(files)) {
132
- const filePath = path.join(dir, relativePath);
133
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
134
- fs.writeFileSync(filePath, contents, "utf-8");
135
- }
136
- return dir;
137
- }
138
- function buildRegistryPayload(jobName) {
139
- return `${JOB_REGISTRY_MARKER}${JSON.stringify({
140
- [jobName]: {
141
- name: jobName,
142
- triggers: [],
143
- skills: [],
144
- toolApprovals: [],
145
- hasFilter: false
146
- }
147
- })}`;
148
- }
149
- function stripAnsi(value) {
150
- return value.replace(/\u001B\[[0-9;]*m/g, "");
151
- }
152
- function buildCodegenInput(overrides = {}) {
153
- return {
154
- github: [],
155
- slack: [],
156
- gmail: [],
157
- linear: [],
158
- notion: [],
159
- posthog: [],
160
- datadog: [],
161
- launchdarkly: [],
162
- workos: [],
163
- attio: [],
164
- snowflake: [],
165
- tools: [],
166
- ...overrides
167
- };
168
- }
169
- //# sourceMappingURL=PythonProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PythonProvider.test.js","sourceRoot":"","sources":["../../../src/providers/python/PythonProvider.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=prepareCodegenData.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prepareCodegenData.test.d.ts","sourceRoot":"","sources":["../../../src/providers/typescript/prepareCodegenData.test.ts"],"names":[],"mappings":""}
@@ -1,54 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
- import { jsonSchemaToTs } from "./prepareCodegenData.js";
4
- test("required nullable properties render as optional while preserving null", () => {
5
- const schema = {
6
- type: "object",
7
- properties: {
8
- thread_ts: {
9
- anyOf: [{ type: "string" }, { type: "null" }],
10
- },
11
- blocks: {
12
- anyOf: [{ type: "string" }, { type: "null" }],
13
- },
14
- message: {
15
- type: "string",
16
- },
17
- },
18
- required: ["thread_ts", "blocks", "message"],
19
- };
20
- assert.equal(jsonSchemaToTs(schema, 0), `{
21
- thread_ts?: string | null
22
- blocks?: string | null
23
- message: string
24
- }`);
25
- });
26
- test("optional nullable properties stay optional", () => {
27
- const schema = {
28
- type: "object",
29
- properties: {
30
- cursor: {
31
- anyOf: [{ type: "string" }, { type: "null" }],
32
- },
33
- },
34
- required: [],
35
- };
36
- assert.equal(jsonSchemaToTs(schema, 0), `{
37
- cursor?: string | null
38
- }`);
39
- });
40
- test("required non-nullable properties stay required", () => {
41
- const schema = {
42
- type: "object",
43
- properties: {
44
- channelId: {
45
- type: "string",
46
- },
47
- },
48
- required: ["channelId"],
49
- };
50
- assert.equal(jsonSchemaToTs(schema, 0), `{
51
- channelId: string
52
- }`);
53
- });
54
- //# sourceMappingURL=prepareCodegenData.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prepareCodegenData.test.js","sourceRoot":"","sources":["../../../src/providers/typescript/prepareCodegenData.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE;IAC/E,MAAM,MAAM,GAAe;QACvB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,SAAS,EAAE;gBACP,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAChD;YACD,MAAM,EAAE;gBACJ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAChD;YACD,OAAO,EAAE;gBACL,IAAI,EAAE,QAAQ;aACjB;SACJ;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC;KAC/C,CAAA;IAED,MAAM,CAAC,KAAK,CACR,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,EACzB;;;;EAIN,CACG,CAAA;AACL,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACpD,MAAM,MAAM,GAAe;QACvB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,MAAM,EAAE;gBACJ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAChD;SACJ;QACD,QAAQ,EAAE,EAAE;KACf,CAAA;IAED,MAAM,CAAC,KAAK,CACR,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,EACzB;;EAEN,CACG,CAAA;AACL,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IACxD,MAAM,MAAM,GAAe;QACvB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,SAAS,EAAE;gBACP,IAAI,EAAE,QAAQ;aACjB;SACJ;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KAC1B,CAAA;IAED,MAAM,CAAC,KAAK,CACR,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,EACzB;;EAEN,CACG,CAAA;AACL,CAAC,CAAC,CAAA"}