terse-cli 0.1.16 → 0.1.18

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 (142) hide show
  1. package/README.md +4 -4
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +6 -9
  4. package/dist/api.js.map +1 -1
  5. package/dist/assertProjectRoot.d.ts +3 -2
  6. package/dist/assertProjectRoot.d.ts.map +1 -1
  7. package/dist/assertProjectRoot.js +6 -9
  8. package/dist/assertProjectRoot.js.map +1 -1
  9. package/dist/auth.d.ts.map +1 -1
  10. package/dist/auth.js +4 -4
  11. package/dist/auth.js.map +1 -1
  12. package/dist/deploy.d.ts +2 -1
  13. package/dist/deploy.d.ts.map +1 -1
  14. package/dist/deploy.js +19 -23
  15. package/dist/deploy.js.map +1 -1
  16. package/dist/generate.d.ts +2 -1
  17. package/dist/generate.d.ts.map +1 -1
  18. package/dist/generate.js +59 -33
  19. package/dist/generate.js.map +1 -1
  20. package/dist/index.js +12 -12
  21. package/dist/index.js.map +1 -1
  22. package/dist/init.d.ts +2 -1
  23. package/dist/init.d.ts.map +1 -1
  24. package/dist/init.js +30 -58
  25. package/dist/init.js.map +1 -1
  26. package/dist/integrate.d.ts.map +1 -1
  27. package/dist/integrate.js +8 -12
  28. package/dist/integrate.js.map +1 -1
  29. package/dist/integrationApi.d.ts +2 -2
  30. package/dist/integrationApi.d.ts.map +1 -1
  31. package/dist/integrationApi.js.map +1 -1
  32. package/dist/loadJob.d.ts +4 -3
  33. package/dist/loadJob.d.ts.map +1 -1
  34. package/dist/loadJob.js +8 -56
  35. package/dist/loadJob.js.map +1 -1
  36. package/dist/providers/LanguageProvider.d.ts +31 -0
  37. package/dist/providers/LanguageProvider.d.ts.map +1 -0
  38. package/dist/providers/LanguageProvider.js +2 -0
  39. package/dist/providers/LanguageProvider.js.map +1 -0
  40. package/dist/providers/codegenTypes.d.ts +119 -0
  41. package/dist/providers/codegenTypes.d.ts.map +1 -0
  42. package/dist/providers/codegenTypes.js +2 -0
  43. package/dist/providers/codegenTypes.js.map +1 -0
  44. package/dist/providers/python/PythonProvider.d.ts +33 -0
  45. package/dist/providers/python/PythonProvider.d.ts.map +1 -0
  46. package/dist/providers/python/PythonProvider.js +362 -0
  47. package/dist/providers/python/PythonProvider.js.map +1 -0
  48. package/dist/providers/python/preparePythonCodegenData.d.ts +89 -0
  49. package/dist/providers/python/preparePythonCodegenData.d.ts.map +1 -0
  50. package/dist/providers/python/preparePythonCodegenData.js +359 -0
  51. package/dist/providers/python/preparePythonCodegenData.js.map +1 -0
  52. package/dist/providers/python/pythonTemplateEngine.d.ts +3 -0
  53. package/dist/providers/python/pythonTemplateEngine.d.ts.map +1 -0
  54. package/dist/providers/python/pythonTemplateEngine.js +30 -0
  55. package/dist/providers/python/pythonTemplateEngine.js.map +1 -0
  56. package/dist/providers/resolveProvider.d.ts +8 -0
  57. package/dist/providers/resolveProvider.d.ts.map +1 -0
  58. package/dist/providers/resolveProvider.js +47 -0
  59. package/dist/providers/resolveProvider.js.map +1 -0
  60. package/dist/providers/shared/sessionStream.d.ts +24 -0
  61. package/dist/providers/shared/sessionStream.d.ts.map +1 -0
  62. package/dist/providers/shared/sessionStream.js +157 -0
  63. package/dist/providers/shared/sessionStream.js.map +1 -0
  64. package/dist/providers/shared/shellUtils.d.ts +13 -0
  65. package/dist/providers/shared/shellUtils.d.ts.map +1 -0
  66. package/dist/providers/shared/shellUtils.js +69 -0
  67. package/dist/providers/shared/shellUtils.js.map +1 -0
  68. package/dist/providers/templateUtils.d.ts +7 -0
  69. package/dist/providers/templateUtils.d.ts.map +1 -0
  70. package/dist/providers/templateUtils.js +30 -0
  71. package/dist/providers/templateUtils.js.map +1 -0
  72. package/dist/providers/typescript/TypeScriptProvider.d.ts +33 -0
  73. package/dist/providers/typescript/TypeScriptProvider.d.ts.map +1 -0
  74. package/dist/providers/typescript/TypeScriptProvider.js +160 -0
  75. package/dist/providers/typescript/TypeScriptProvider.js.map +1 -0
  76. package/dist/providers/typescript/prepareCodegenData.d.ts +144 -0
  77. package/dist/providers/typescript/prepareCodegenData.d.ts.map +1 -0
  78. package/dist/providers/typescript/prepareCodegenData.js +751 -0
  79. package/dist/providers/typescript/prepareCodegenData.js.map +1 -0
  80. package/dist/providers/typescript/templateEngine.d.ts +3 -0
  81. package/dist/providers/typescript/templateEngine.d.ts.map +1 -0
  82. package/dist/providers/typescript/templateEngine.js +37 -0
  83. package/dist/providers/typescript/templateEngine.js.map +1 -0
  84. package/dist/run.d.ts +2 -11
  85. package/dist/run.d.ts.map +1 -1
  86. package/dist/run.js +7 -194
  87. package/dist/run.js.map +1 -1
  88. package/dist/shared/ToolDisplayUtils.d.ts.map +1 -1
  89. package/dist/shared/ToolDisplayUtils.js +13 -1
  90. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  91. package/dist/shared/types.d.ts +912 -107
  92. package/dist/shared/types.d.ts.map +1 -1
  93. package/dist/test.d.ts +2 -1
  94. package/dist/test.d.ts.map +1 -1
  95. package/dist/test.js +12 -12
  96. package/dist/test.js.map +1 -1
  97. package/dist/util.d.ts +1 -1
  98. package/dist/util.d.ts.map +1 -1
  99. package/dist/util.js.map +1 -1
  100. package/package.json +13 -9
  101. package/templates/python/codegen/generated.hbs +7 -0
  102. package/templates/python/codegen/partials/attio-list-objects-method.hbs +8 -0
  103. package/templates/python/codegen/partials/attio-object-types.hbs +23 -0
  104. package/templates/python/codegen/partials/attio-query-records-method.hbs +45 -0
  105. package/templates/python/codegen/partials/attio-section.hbs +110 -0
  106. package/templates/python/codegen/partials/attio-upsert-record-method.hbs +51 -0
  107. package/templates/python/codegen/partials/deterministic-tools-section.hbs +308 -0
  108. package/templates/python/codegen/partials/file-header.hbs +32 -0
  109. package/templates/python/codegen/partials/schedule-section.hbs +9 -0
  110. package/templates/python/codegen/partials/slack-section.hbs +178 -0
  111. package/templates/python/codegen/partials/snowflake-section.hbs +26 -0
  112. package/templates/python/codegen/partials/tool-name-types.hbs +18 -0
  113. package/templates/python/init/.python-version.hbs +1 -0
  114. package/templates/python/init/README.md.hbs +40 -0
  115. package/templates/python/init/gitignore.hbs +3 -0
  116. package/templates/python/init/pyproject.toml.hbs +16 -0
  117. package/templates/python/init/src/main.py.hbs +21 -0
  118. package/templates/typescript/codegen/generated.hbs +17 -0
  119. package/templates/typescript/codegen/partials/atlassian-section.hbs +32 -0
  120. package/templates/typescript/codegen/partials/attio-section.hbs +38 -0
  121. package/templates/typescript/codegen/partials/datadog-section.hbs +11 -0
  122. package/templates/typescript/codegen/partials/figma-section.hbs +13 -0
  123. package/templates/typescript/codegen/partials/github-section.hbs +62 -0
  124. package/templates/typescript/codegen/partials/gmail-section.hbs +21 -0
  125. package/templates/typescript/codegen/partials/header.hbs +12 -0
  126. package/templates/typescript/codegen/partials/launchdarkly-section.hbs +11 -0
  127. package/templates/typescript/codegen/partials/linear-section.hbs +27 -0
  128. package/templates/typescript/codegen/partials/notion-section.hbs +15 -0
  129. package/templates/typescript/codegen/partials/posthog-section.hbs +11 -0
  130. package/templates/typescript/codegen/partials/resource-class.hbs +9 -0
  131. package/templates/typescript/codegen/partials/slack-section.hbs +22 -0
  132. package/templates/typescript/codegen/partials/snowflake-section.hbs +9 -0
  133. package/templates/typescript/codegen/partials/system-section.hbs +18 -0
  134. package/templates/typescript/codegen/partials/tools-section.hbs +69 -0
  135. package/templates/typescript/codegen/partials/workos-section.hbs +53 -0
  136. package/templates/typescript/init/env.example.hbs +1 -0
  137. package/templates/{package.json.tmpl → typescript/init/package.json.hbs} +1 -1
  138. package/templates/{src/index.ts.tmpl → typescript/init/src/index.ts.hbs} +1 -3
  139. /package/templates/{env.example.tmpl → python/init/env.example.hbs} +0 -0
  140. /package/templates/{.claude/settings.json.tmpl → typescript/init/.claude/settings.json.hbs} +0 -0
  141. /package/templates/{gitignore.tmpl → typescript/init/gitignore.hbs} +0 -0
  142. /package/templates/{tsconfig.json.tmpl → typescript/init/tsconfig.json.hbs} +0 -0
@@ -0,0 +1,119 @@
1
+ import type { GithubIntegration } from "terse-types";
2
+ export interface GitHubRepo {
3
+ id: number;
4
+ name: string;
5
+ owner: string;
6
+ fullName?: string;
7
+ }
8
+ export interface GitHubInstanceData {
9
+ integration: GithubIntegration;
10
+ repositories: GitHubRepo[];
11
+ }
12
+ export interface IntegrationInstanceData {
13
+ id: string;
14
+ displayName: string;
15
+ }
16
+ export interface SlackChannelData {
17
+ id: string;
18
+ name: string;
19
+ }
20
+ export interface LinearTeamData {
21
+ id: string;
22
+ name: string;
23
+ key: string;
24
+ }
25
+ export interface NotionResourceData {
26
+ id: string;
27
+ title: string;
28
+ type: string;
29
+ }
30
+ export interface JiraProjectData {
31
+ id: string;
32
+ key: string;
33
+ name: string;
34
+ }
35
+ export interface ConfluencePageData {
36
+ id: string;
37
+ title: string;
38
+ spaceId: string;
39
+ spaceName: string;
40
+ }
41
+ export interface PosthogProjectData {
42
+ id: string;
43
+ name: string;
44
+ }
45
+ export interface DatadogIndexData {
46
+ name: string;
47
+ }
48
+ export interface LaunchDarklyProjectData {
49
+ key: string;
50
+ name: string;
51
+ }
52
+ export interface SnowflakeInstanceData {
53
+ id: string;
54
+ name: string;
55
+ }
56
+ export interface AttioAttributeData {
57
+ api_slug?: string;
58
+ title?: string;
59
+ type?: string;
60
+ is_required?: boolean;
61
+ is_unique?: boolean;
62
+ }
63
+ export interface AttioObjectData {
64
+ api_slug: string;
65
+ singular_noun: string;
66
+ plural_noun?: string;
67
+ attributes?: AttioAttributeData[];
68
+ }
69
+ export interface SlackInstanceData extends IntegrationInstanceData {
70
+ channels: SlackChannelData[];
71
+ }
72
+ export interface LinearInstanceData extends IntegrationInstanceData {
73
+ teams: LinearTeamData[];
74
+ }
75
+ export interface NotionInstanceData extends IntegrationInstanceData {
76
+ databases: NotionResourceData[];
77
+ pages: NotionResourceData[];
78
+ }
79
+ export interface AtlassianInstanceData extends IntegrationInstanceData {
80
+ jiraProjects: JiraProjectData[];
81
+ confluencePages: ConfluencePageData[];
82
+ }
83
+ export interface PosthogInstanceData extends IntegrationInstanceData {
84
+ projects: PosthogProjectData[];
85
+ }
86
+ export interface DatadogInstanceData extends IntegrationInstanceData {
87
+ indexes: DatadogIndexData[];
88
+ }
89
+ export interface LaunchDarklyInstanceData extends IntegrationInstanceData {
90
+ projects: LaunchDarklyProjectData[];
91
+ }
92
+ export interface AttioInstanceData extends IntegrationInstanceData {
93
+ objects: AttioObjectData[];
94
+ }
95
+ export interface ToolDefinition {
96
+ name: string;
97
+ displayName: string;
98
+ description: string;
99
+ integration: string;
100
+ isReadOnly: boolean;
101
+ supportsApproval: boolean;
102
+ }
103
+ export interface CodegenInput {
104
+ github: GitHubInstanceData[];
105
+ slack: SlackInstanceData[];
106
+ gmail: IntegrationInstanceData[];
107
+ figma: IntegrationInstanceData[];
108
+ linear: LinearInstanceData[];
109
+ atlassian: AtlassianInstanceData[];
110
+ notion: NotionInstanceData[];
111
+ posthog: PosthogInstanceData[];
112
+ datadog: DatadogInstanceData[];
113
+ launchdarkly: LaunchDarklyInstanceData[];
114
+ workos: IntegrationInstanceData[];
115
+ attio: AttioInstanceData[];
116
+ snowflake: SnowflakeInstanceData[];
117
+ tools: ToolDefinition[];
118
+ }
119
+ //# sourceMappingURL=codegenTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegenTypes.d.ts","sourceRoot":"","sources":["../../src/providers/codegenTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codegenTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegenTypes.js","sourceRoot":"","sources":["../../src/providers/codegenTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { CreateJobParameters } from "terse-sdk";
2
+ import type { SerializedEvent } from "terse-types";
3
+ import type { LanguageProvider } from "../LanguageProvider.js";
4
+ import type { CodegenInput } from "../codegenTypes.js";
5
+ export declare class PythonProvider implements LanguageProvider {
6
+ readonly language: "python";
7
+ readonly displayName = "Python";
8
+ readonly projectMarkers: {
9
+ requiredFiles: string[];
10
+ description: string;
11
+ };
12
+ readonly entryFile = "src/main.py";
13
+ readonly generatedCodePath = "src/terse_generated.py";
14
+ readonly deployExclusions: {
15
+ dirs: Set<string>;
16
+ files: Set<string>;
17
+ };
18
+ scaffoldFiles(): Array<{
19
+ template: string;
20
+ output: string;
21
+ }>;
22
+ buildInitTemplateContext(projectName: string): Record<string, unknown>;
23
+ getPostInitSteps(_packageManager: string): string[];
24
+ detectPackageManager(): string;
25
+ installDependencies(targetDir: string): Promise<void>;
26
+ renderGeneratedCode(input: CodegenInput): string;
27
+ loadJobRegistry(): Promise<Map<string, CreateJobParameters>>;
28
+ executeJob(job: CreateJobParameters, event: SerializedEvent, opts?: {
29
+ verbose?: boolean;
30
+ }): Promise<void>;
31
+ }
32
+ export declare const pythonProvider: PythonProvider;
33
+ //# sourceMappingURL=PythonProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PythonProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/python/PythonProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAgCtD,qBAAa,cAAe,YAAW,gBAAgB;IACnD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAS;IACrC,QAAQ,CAAC,WAAW,YAAW;IAC/B,QAAQ,CAAC,cAAc;;;MAGtB;IACD,QAAQ,CAAC,SAAS,iBAAgB;IAClC,QAAQ,CAAC,iBAAiB,4BAA2B;IACrD,QAAQ,CAAC,gBAAgB;;;MAGxB;IAED,aAAa,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAW5D,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOtE,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAInD,oBAAoB,IAAI,MAAM;IAIxB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAM1C,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IA8B5D,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqClH;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAA"}
@@ -0,0 +1,362 @@
1
+ import chalk from "chalk";
2
+ import { execFileSync, spawn } from "node:child_process";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { openSessionStream, promptForToolApproval, submitApprovalDecision } from "../shared/sessionStream.js";
6
+ import { ensureUvAvailable, execUv, loadDotenv, withTempScript } from "../shared/shellUtils.js";
7
+ import { preparePythonTemplateContext } from "./preparePythonCodegenData.js";
8
+ import { renderPythonGeneratedCode } from "./pythonTemplateEngine.js";
9
+ const JOB_REGISTRY_MARKER = "__TERSE_JOB_REGISTRY__=";
10
+ const JOB_SKIPPED_MARKER = "__TERSE_SKIPPED__";
11
+ const PYTHON_SDK_DEPENDENCY = "terse-sdk~=0.1.10";
12
+ export class PythonProvider {
13
+ language = "python";
14
+ displayName = "Python";
15
+ projectMarkers = {
16
+ requiredFiles: ["pyproject.toml", "src/main.py"],
17
+ description: "Python Terse project"
18
+ };
19
+ entryFile = "src/main.py";
20
+ generatedCodePath = "src/terse_generated.py";
21
+ deployExclusions = {
22
+ dirs: new Set([".venv", "__pycache__", ".pytest_cache", ".mypy_cache", ".ruff_cache", ".git"]),
23
+ files: new Set([".env", ".DS_Store"])
24
+ };
25
+ scaffoldFiles() {
26
+ return [
27
+ { template: "python/init/pyproject.toml.hbs", output: "pyproject.toml" },
28
+ { template: "python/init/src/main.py.hbs", output: "src/main.py" },
29
+ { template: "python/init/.python-version.hbs", output: ".python-version" },
30
+ { template: "python/init/env.example.hbs", output: ".env.example" },
31
+ { template: "python/init/gitignore.hbs", output: ".gitignore" },
32
+ { template: "python/init/README.md.hbs", output: "README.md" }
33
+ ];
34
+ }
35
+ buildInitTemplateContext(projectName) {
36
+ return {
37
+ projectName,
38
+ sdkDependency: PYTHON_SDK_DEPENDENCY
39
+ };
40
+ }
41
+ getPostInitSteps(_packageManager) {
42
+ return ["uv run ty check Type-check the project", "terse test Run a sample event locally"];
43
+ }
44
+ detectPackageManager() {
45
+ return "uv";
46
+ }
47
+ async installDependencies(targetDir) {
48
+ const env = {
49
+ ...loadDotenv(targetDir),
50
+ UV_CACHE_DIR: path.join(os.tmpdir(), "terse-uv-cache")
51
+ };
52
+ await execUv(["sync"], { cwd: targetDir, env });
53
+ }
54
+ renderGeneratedCode(input) {
55
+ const code = renderPythonGeneratedCode(preparePythonTemplateContext(input));
56
+ validatePythonSyntax(code);
57
+ return code;
58
+ }
59
+ async loadJobRegistry() {
60
+ const cwd = process.cwd();
61
+ const env = loadDotenv(cwd);
62
+ try {
63
+ const script = buildLoadRegistryScript();
64
+ return await withTempScript(script, ".py", async (scriptPath) => {
65
+ const { stdout } = await execUv(["run", "python", scriptPath], { cwd, env });
66
+ const payload = extractRegistryPayload(stdout);
67
+ const parsed = JSON.parse(payload);
68
+ const registry = new Map();
69
+ for (const [name, data] of Object.entries(parsed)) {
70
+ registry.set(name, createJobParametersFromPython(data));
71
+ }
72
+ if (registry.size === 0) {
73
+ console.error(chalk.red(`No jobs found. Make sure your ${this.entryFile} registers at least one job with @app.job(...).`));
74
+ process.exit(1);
75
+ }
76
+ return registry;
77
+ });
78
+ }
79
+ catch (error) {
80
+ console.error(chalk.red(`Error importing ${this.entryFile}:\n`));
81
+ printPythonCommandError(error);
82
+ process.exit(1);
83
+ }
84
+ }
85
+ async executeJob(job, event, opts) {
86
+ const cwd = process.cwd();
87
+ const env = {
88
+ ...loadDotenv(cwd),
89
+ TERSE_JOB_NAME: job.name,
90
+ TERSE_EVENT_JSON: JSON.stringify(event)
91
+ };
92
+ const isVerbose = opts?.verbose ?? false;
93
+ const isSandbox = !!process.env.TERSE_RUN_ID;
94
+ const apiKey = env.TERSE_API_KEY ?? null;
95
+ const approvalState = { paused: false };
96
+ let closeSession;
97
+ try {
98
+ if (apiKey && (isVerbose || !isSandbox)) {
99
+ const session = await openSessionStream(apiKey, {
100
+ verbose: isVerbose,
101
+ isPaused: () => approvalState.paused,
102
+ onEvent: !isSandbox ? createApprovalHandler(apiKey, approvalState) : undefined
103
+ });
104
+ closeSession = session.close;
105
+ env.TERSE_SESSION_ID = session.sessionId;
106
+ }
107
+ const script = buildExecuteJobScript();
108
+ await ensureUvAvailable(cwd);
109
+ await withTempScript(script, ".py", async (scriptPath) => {
110
+ await runStreamingPython(cwd, env, scriptPath, job.name);
111
+ });
112
+ }
113
+ catch (error) {
114
+ console.error(chalk.red(`\n Job "${job.name}" failed.\n`));
115
+ printPythonCommandError(error);
116
+ process.exit(1);
117
+ }
118
+ finally {
119
+ closeSession?.();
120
+ }
121
+ }
122
+ }
123
+ export const pythonProvider = new PythonProvider();
124
+ function createJobParametersFromPython(data) {
125
+ return {
126
+ name: data.name,
127
+ triggers: data.triggers.map(reconstructPythonConfig),
128
+ skills: data.skills.map(reconstructPythonConfig),
129
+ toolApprovals: data.toolApprovals ?? [],
130
+ webhookURL: data.webhookURL ?? undefined,
131
+ onTrigger: async () => {
132
+ throw new Error("Python job execution must go through provider.executeJob()");
133
+ },
134
+ filter: data.hasFilter
135
+ ? async () => {
136
+ throw new Error("Python filter execution must go through provider.executeJob()");
137
+ }
138
+ : undefined
139
+ };
140
+ }
141
+ function reconstructPythonConfig(config) {
142
+ return {
143
+ ...config,
144
+ isComplete: () => true,
145
+ formatForAgent: () => JSON.stringify(config)
146
+ };
147
+ }
148
+ function buildLoadRegistryScript() {
149
+ return `
150
+ import importlib.util
151
+ import json
152
+ import os
153
+ import sys
154
+ import uuid
155
+
156
+ from terse_sdk import clear_job_registry, get_job_registry
157
+
158
+ PROJECT_ROOT = os.getcwd()
159
+ SRC_DIR = os.path.join(PROJECT_ROOT, "src")
160
+ sys.path[:0] = [PROJECT_ROOT, SRC_DIR]
161
+
162
+ clear_job_registry()
163
+ module_name = f"__terse_main_{uuid.uuid4().hex}"
164
+ spec = importlib.util.spec_from_file_location(module_name, os.path.join(SRC_DIR, "main.py"))
165
+ if spec is None or spec.loader is None:
166
+ raise RuntimeError("Could not create an import spec for src/main.py.")
167
+
168
+ module = importlib.util.module_from_spec(spec)
169
+ sys.modules[module_name] = module
170
+ spec.loader.exec_module(module)
171
+
172
+ registry = get_job_registry()
173
+ result = {}
174
+ for name, job in registry.items():
175
+ def serialize_config(config):
176
+ payload = dict(config.config)
177
+ payload["integrationId"] = config.integration_id
178
+ payload["integrationType"] = config.integration_type
179
+ payload["configType"] = config.config_type
180
+ return payload
181
+
182
+ result[name] = {
183
+ "name": name,
184
+ "triggers": [serialize_config(trigger) for trigger in job.triggers],
185
+ "skills": [serialize_config(skill) for skill in job.skills],
186
+ "toolApprovals": list(job.tool_approvals or []),
187
+ "webhookURL": job.webhook_url,
188
+ "hasFilter": job.filter is not None,
189
+ }
190
+
191
+ print(${JSON.stringify(JOB_REGISTRY_MARKER)} + json.dumps(result))
192
+ `.trim();
193
+ }
194
+ function buildExecuteJobScript() {
195
+ return `
196
+ import importlib.util
197
+ import json
198
+ import os
199
+ import sys
200
+ import uuid
201
+
202
+ from terse_sdk import TerseAgent, clear_job_registry, deserialize_input_event, execute_registered_job, get_job_registry
203
+
204
+ PROJECT_ROOT = os.getcwd()
205
+ SRC_DIR = os.path.join(PROJECT_ROOT, "src")
206
+ sys.path[:0] = [PROJECT_ROOT, SRC_DIR]
207
+
208
+ clear_job_registry()
209
+ module_name = f"__terse_main_{uuid.uuid4().hex}"
210
+ spec = importlib.util.spec_from_file_location(module_name, os.path.join(SRC_DIR, "main.py"))
211
+ if spec is None or spec.loader is None:
212
+ raise RuntimeError("Could not create an import spec for src/main.py.")
213
+
214
+ module = importlib.util.module_from_spec(spec)
215
+ sys.modules[module_name] = module
216
+ spec.loader.exec_module(module)
217
+
218
+ registry = get_job_registry()
219
+ job_name = os.environ["TERSE_JOB_NAME"]
220
+ event = deserialize_input_event(json.loads(os.environ["TERSE_EVENT_JSON"]))
221
+ session_id = os.environ.get("TERSE_SESSION_ID")
222
+ job = registry[job_name]
223
+ agent = TerseAgent(job.skills, session_id=session_id, manual_tool_configs=[*job.skills, *job.triggers], tool_approvals=job.tool_approvals)
224
+ skipped = execute_registered_job(job, event, agent=agent)
225
+ if skipped:
226
+ print(${JSON.stringify(JOB_SKIPPED_MARKER)})
227
+ `.trim();
228
+ }
229
+ function extractRegistryPayload(stdout) {
230
+ const line = stdout
231
+ .split(/\r?\n/)
232
+ .map(entry => entry.trim())
233
+ .filter(Boolean)
234
+ .reverse()
235
+ .find(entry => entry.startsWith(JOB_REGISTRY_MARKER));
236
+ if (!line) {
237
+ throw new Error("Python job loader did not return registry JSON.");
238
+ }
239
+ return line.slice(JOB_REGISTRY_MARKER.length);
240
+ }
241
+ function createApprovalHandler(apiKey, state) {
242
+ return async (event) => {
243
+ if (event.type === "run_started") {
244
+ state.runId = event.runId;
245
+ return;
246
+ }
247
+ if (event.type !== "tool_approval_requested")
248
+ return;
249
+ if (!state.runId) {
250
+ throw new Error("Received tool approval request before run_started.");
251
+ }
252
+ state.paused = true;
253
+ try {
254
+ const info = event.toolApprovalRequested;
255
+ const approved = await promptForToolApproval(info.toolName, info.arguments);
256
+ await submitApprovalDecision(apiKey, {
257
+ runId: state.runId,
258
+ stepId: info.stepId,
259
+ approved
260
+ });
261
+ }
262
+ finally {
263
+ state.paused = false;
264
+ }
265
+ };
266
+ }
267
+ async function runStreamingPython(cwd, env, scriptPath, jobName) {
268
+ await new Promise((resolve, reject) => {
269
+ const child = spawn("uv", ["run", "python", scriptPath], {
270
+ cwd,
271
+ env,
272
+ stdio: ["ignore", "pipe", "pipe"]
273
+ });
274
+ let skipped = false;
275
+ let stdoutBuffer = "";
276
+ child.stdout.on("data", (chunk) => {
277
+ stdoutBuffer += chunk.toString();
278
+ stdoutBuffer = flushStdoutBuffer(stdoutBuffer, line => {
279
+ if (line === JOB_SKIPPED_MARKER) {
280
+ skipped = true;
281
+ return;
282
+ }
283
+ process.stdout.write(`${line}\n`);
284
+ });
285
+ });
286
+ child.stdout.on("end", () => {
287
+ if (!stdoutBuffer)
288
+ return;
289
+ if (stdoutBuffer === JOB_SKIPPED_MARKER) {
290
+ skipped = true;
291
+ return;
292
+ }
293
+ process.stdout.write(stdoutBuffer);
294
+ });
295
+ child.stderr.on("data", (chunk) => {
296
+ process.stderr.write(chunk);
297
+ });
298
+ child.on("error", reject);
299
+ child.on("close", code => {
300
+ if (code !== 0) {
301
+ reject(new Error(`uv run python exited with code ${code ?? "unknown"}`));
302
+ return;
303
+ }
304
+ if (skipped) {
305
+ console.log(chalk.dim(`\n Job "${jobName}" skipped (filter returned false).\n`));
306
+ }
307
+ else {
308
+ console.log(chalk.green(`\n Job "${jobName}" completed successfully.\n`));
309
+ }
310
+ resolve();
311
+ });
312
+ });
313
+ }
314
+ function flushStdoutBuffer(buffer, onLine) {
315
+ let newlineIndex = buffer.indexOf("\n");
316
+ while (newlineIndex !== -1) {
317
+ const line = buffer.slice(0, newlineIndex).replace(/\r$/, "");
318
+ onLine(line);
319
+ buffer = buffer.slice(newlineIndex + 1);
320
+ newlineIndex = buffer.indexOf("\n");
321
+ }
322
+ return buffer;
323
+ }
324
+ function validatePythonSyntax(code) {
325
+ for (const executable of ["python3", "python"]) {
326
+ try {
327
+ execFileSync(executable, ["-c", "import sys; compile(sys.stdin.read(), 'terse_generated.py', 'exec')"], {
328
+ input: code,
329
+ stdio: ["pipe", "ignore", "pipe"]
330
+ });
331
+ return;
332
+ }
333
+ catch (error) {
334
+ const code = error.code;
335
+ if (code === "ENOENT")
336
+ continue;
337
+ const stderr = Buffer.isBuffer(error.stderr) ? error.stderr.toString().trim() : "";
338
+ if (stderr) {
339
+ console.warn(chalk.yellow(`Warning: generated Python did not pass syntax validation.\n${stderr}`));
340
+ }
341
+ else {
342
+ console.warn(chalk.yellow("Warning: generated Python did not pass syntax validation."));
343
+ }
344
+ return;
345
+ }
346
+ }
347
+ }
348
+ function printPythonCommandError(error) {
349
+ if (error instanceof Error) {
350
+ console.error(error.message);
351
+ const stderr = error.stderr;
352
+ if (typeof stderr === "string" && stderr.trim()) {
353
+ console.error(stderr.trim());
354
+ }
355
+ else if (Buffer.isBuffer(stderr) && stderr.toString().trim()) {
356
+ console.error(stderr.toString().trim());
357
+ }
358
+ return;
359
+ }
360
+ console.error(String(error));
361
+ }
362
+ //# sourceMappingURL=PythonProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PythonProvider.js","sourceRoot":"","sources":["../../../src/providers/python/PythonProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { CodegenInput } from "../codegenTypes.js";
2
+ export interface PythonToolCtx {
3
+ name: string;
4
+ nameRepr: string;
5
+ methodName: string;
6
+ outputModel: string;
7
+ approvable: boolean;
8
+ }
9
+ export interface PythonAttioAttrCtx {
10
+ apiSlug: string;
11
+ recordType: string;
12
+ inputType: string;
13
+ filterType: string;
14
+ }
15
+ export interface PythonAttioObjectCtx {
16
+ apiSlug: string;
17
+ apiSlugRepr: string;
18
+ singularNoun: string;
19
+ singularNounRepr: string;
20
+ pascal: string;
21
+ staticName: string;
22
+ attributes: PythonAttioAttrCtx[];
23
+ hasAttributes: boolean;
24
+ attrSlugsLiteral: string;
25
+ attrSlugsFrozensetRepr: string;
26
+ multiValueSlugs: string[];
27
+ hasMultiValueSlugs: boolean;
28
+ multiValueFrozensetRepr: string;
29
+ attributeTupleRepr: string;
30
+ recordValuesTypeName: string;
31
+ inputValuesTypeName: string;
32
+ attributeSlugTypeName: string;
33
+ filterTypeName: string;
34
+ staticDeclaration: string;
35
+ }
36
+ export interface PythonAttioCtx {
37
+ instanceIdRepr: string;
38
+ hasAttrs: boolean;
39
+ objects: PythonAttioObjectCtx[];
40
+ tools: PythonToolCtx[];
41
+ approvableTools: PythonToolCtx[];
42
+ skillToolType: string;
43
+ skillObjectType: string;
44
+ }
45
+ export interface PythonSnowflakeCtx {
46
+ instanceIdRepr: string;
47
+ tools: PythonToolCtx[];
48
+ approvableTools: PythonToolCtx[];
49
+ skillToolType: string;
50
+ }
51
+ export interface PythonSlackChannelCtx {
52
+ staticName: string;
53
+ channelIdRepr: string;
54
+ nameRepr: string;
55
+ }
56
+ export interface PythonSlackCtx {
57
+ instanceIdRepr: string;
58
+ channels: PythonSlackChannelCtx[];
59
+ tools: PythonToolCtx[];
60
+ approvableTools: PythonToolCtx[];
61
+ skillToolType: string;
62
+ }
63
+ export interface PythonTemplateContext {
64
+ attio: PythonAttioCtx | null;
65
+ slack: PythonSlackCtx | null;
66
+ snowflake: PythonSnowflakeCtx | null;
67
+ hasAttio: boolean;
68
+ hasAttioAttrs: boolean;
69
+ hasAttioTools: boolean;
70
+ hasSlack: boolean;
71
+ hasSlackTools: boolean;
72
+ hasSnowflake: boolean;
73
+ hasSnowflakeTools: boolean;
74
+ hasAnyToolNameTypes: boolean;
75
+ hasAnyDeterministicTools: boolean;
76
+ sdkImports: string[];
77
+ typingImportsLine?: string;
78
+ pydanticImportsLine?: string;
79
+ needsJsonImport: boolean;
80
+ attioToolNamesLiteral?: string;
81
+ slackToolNamesLiteral?: string;
82
+ snowflakeToolNamesLiteral?: string;
83
+ allToolNamesLiteral?: string;
84
+ exportedNamesRepr: string;
85
+ }
86
+ export declare function preparePythonTemplateContext(input: CodegenInput): PythonTemplateContext;
87
+ export declare function pyRepr(value: string): string;
88
+ export declare function pyListRepr(values: string[]): string;
89
+ //# sourceMappingURL=preparePythonCodegenData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preparePythonCodegenData.d.ts","sourceRoot":"","sources":["../../../src/providers/python/preparePythonCodegenData.ts"],"names":[],"mappings":"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"}