terse-cli 0.1.25 → 0.1.26

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 (62) hide show
  1. package/dist/api.d.ts +13 -1
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +36 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/commands/attach.d.ts +3 -0
  6. package/dist/commands/attach.d.ts.map +1 -0
  7. package/dist/commands/attach.js +65 -0
  8. package/dist/commands/attach.js.map +1 -0
  9. package/dist/commands/auth.d.ts +12 -0
  10. package/dist/commands/auth.d.ts.map +1 -0
  11. package/dist/commands/auth.js +166 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/deploy.d.ts +3 -0
  14. package/dist/commands/deploy.d.ts.map +1 -0
  15. package/dist/commands/deploy.js +122 -0
  16. package/dist/commands/deploy.js.map +1 -0
  17. package/dist/commands/generate.d.ts +3 -0
  18. package/dist/commands/generate.d.ts.map +1 -0
  19. package/dist/commands/generate.js +282 -0
  20. package/dist/commands/generate.js.map +1 -0
  21. package/dist/commands/history.d.ts +15 -0
  22. package/dist/commands/history.d.ts.map +1 -0
  23. package/dist/commands/history.js +103 -0
  24. package/dist/commands/history.js.map +1 -0
  25. package/dist/commands/historyPrinters.d.ts +9 -0
  26. package/dist/commands/historyPrinters.d.ts.map +1 -0
  27. package/dist/commands/historyPrinters.js +101 -0
  28. package/dist/commands/historyPrinters.js.map +1 -0
  29. package/dist/commands/init.d.ts +3 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +98 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/integrate.d.ts +3 -0
  34. package/dist/commands/integrate.d.ts.map +1 -0
  35. package/dist/commands/integrate.js +214 -0
  36. package/dist/commands/integrate.js.map +1 -0
  37. package/dist/commands/replay.d.ts +3 -0
  38. package/dist/commands/replay.d.ts.map +1 -0
  39. package/dist/commands/replay.js +20 -0
  40. package/dist/commands/replay.js.map +1 -0
  41. package/dist/commands/run.d.ts +3 -0
  42. package/dist/commands/run.d.ts.map +1 -0
  43. package/dist/commands/run.js +56 -0
  44. package/dist/commands/run.js.map +1 -0
  45. package/dist/commands/test.d.ts +3 -0
  46. package/dist/commands/test.d.ts.map +1 -0
  47. package/dist/commands/test.js +83 -0
  48. package/dist/commands/test.js.map +1 -0
  49. package/dist/index.js +42 -12
  50. package/dist/index.js.map +1 -1
  51. package/dist/jsonOutput.d.ts +19 -0
  52. package/dist/jsonOutput.d.ts.map +1 -0
  53. package/dist/jsonOutput.js +25 -0
  54. package/dist/jsonOutput.js.map +1 -0
  55. package/dist/providers/python/PythonProvider.d.ts.map +1 -1
  56. package/dist/providers/python/PythonProvider.js +10 -1
  57. package/dist/providers/python/PythonProvider.js.map +1 -1
  58. package/dist/userConfig.d.ts +5 -0
  59. package/dist/userConfig.d.ts.map +1 -0
  60. package/dist/userConfig.js +32 -0
  61. package/dist/userConfig.js.map +1 -0
  62. package/package.json +4 -3
@@ -0,0 +1,282 @@
1
+ import chalk from "chalk";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import ora from "ora";
5
+ import { IntegrationType, isValidToolName } from "terse-types";
6
+ import { ApiRoutes, buildRoute } from "terse-types";
7
+ import { fetchWithAuth, readApiKeyOrBail } from "../api.js";
8
+ import { assertProjectRoot } from "../assertProjectRoot.js";
9
+ import { resolveProvider } from "../providers/resolveProvider.js";
10
+ // ── Main ──────────────────────────────────────────────────────────────
11
+ export async function generate(provider = resolveProvider()) {
12
+ assertProjectRoot(provider, provider.detectionMarkers);
13
+ const totalStart = performance.now();
14
+ // 1. Read API key
15
+ const apiKey = readApiKeyOrBail({
16
+ title: "\n Not authenticated.\n",
17
+ detail: " Run `terse login` to authenticate, or set TERSE_API_KEY in your environment.\n"
18
+ });
19
+ // 2. Fetch active integrations
20
+ const spinner = ora("Fetching integrations...").start();
21
+ let activeTypes;
22
+ try {
23
+ activeTypes = await fetchWithAuth(ApiRoutes.INTEGRATIONS.ACTIVE, apiKey);
24
+ }
25
+ catch (error) {
26
+ spinner.fail("Failed to fetch integrations");
27
+ const message = String(error?.message || "");
28
+ const isAuthError = message.includes("401") ||
29
+ message.includes("403") ||
30
+ message.toLowerCase().includes("authentication failed") ||
31
+ message.toLowerCase().includes("unauthorized") ||
32
+ message.toLowerCase().includes("forbidden");
33
+ if (isAuthError) {
34
+ console.error(chalk.red("\n Authentication failed: your TERSE_API_KEY was rejected.\n") + chalk.dim(" Run `terse login` to refresh your credentials and try again.\n"));
35
+ }
36
+ else {
37
+ console.error(chalk.red(`\n ${message}\n`));
38
+ }
39
+ process.exit(1);
40
+ }
41
+ // 3. Fetch tool definitions
42
+ spinner.text = "Fetching tool definitions...";
43
+ let toolDefs = [];
44
+ try {
45
+ const resp = await fetchWithAuth(ApiRoutes.SDK.TOOL_DEFINITIONS, apiKey);
46
+ // Filter to only tools whose integration matches an active integration type
47
+ const activeSet = new Set(activeTypes);
48
+ toolDefs = resp.tools.filter(t => activeSet.has(t.integration));
49
+ const skippedToolNames = [...new Set(toolDefs.filter(t => !isValidToolName(t.name)).map(t => t.name))].sort();
50
+ toolDefs = toolDefs.filter(t => isValidToolName(t.name));
51
+ if (skippedToolNames.length > 0) {
52
+ console.warn(chalk.yellow(`\n Skipped ${skippedToolNames.length} tool(s) absent from terse-types ToolDefinitions: ${skippedToolNames.join(", ")}\n`));
53
+ }
54
+ }
55
+ catch {
56
+ // Non-fatal: proceed without tool definitions
57
+ }
58
+ // 4. Fetch all integration instances + resources in parallel
59
+ spinner.text = "Fetching integration details...";
60
+ const input = {
61
+ github: [],
62
+ slack: [],
63
+ gmail: [],
64
+ linear: [],
65
+ notion: [],
66
+ posthog: [],
67
+ datadog: [],
68
+ launchdarkly: [],
69
+ workos: [],
70
+ attio: [],
71
+ snowflake: [],
72
+ tools: toolDefs
73
+ };
74
+ const has = (t) => activeTypes.includes(t);
75
+ const promises = [];
76
+ // ── GitHub (special: also fetches repositories per instance) ──
77
+ if (has(IntegrationType.GITHUB)) {
78
+ promises.push(safely(async () => {
79
+ const instances = await fetchWithAuth(ApiRoutes.GITHUB.INTEGRATIONS, apiKey);
80
+ input.github = await Promise.all(instances.map(async (inst) => {
81
+ const data = await fetchWithAuth(`${ApiRoutes.GITHUB.GET_REPOSITORIES_FOR_INTEGRATION}?installation_id=${encodeURIComponent(inst.installation_id)}`, apiKey).catch(() => ({ repositories: [] }));
82
+ return { integration: inst, repositories: data.repositories || [] };
83
+ }));
84
+ }));
85
+ }
86
+ // ── Gmail (no resources) ──
87
+ if (has(IntegrationType.GMAIL)) {
88
+ promises.push(safely(async () => {
89
+ const instances = await fetchWithAuth(ApiRoutes.GMAIL.INTEGRATIONS, apiKey);
90
+ input.gmail = instances.map(inst => ({ id: inst.id, displayName: inst.email || inst.id }));
91
+ }));
92
+ }
93
+ // ── Slack (fetches channels per instance) ──
94
+ if (has(IntegrationType.SLACK)) {
95
+ promises.push(safely(async () => {
96
+ const instances = await fetchWithAuth(ApiRoutes.SLACK.INTEGRATIONS, apiKey);
97
+ input.slack = await Promise.all(instances.map(async (inst) => {
98
+ const resp = await fetchWithAuth(`${ApiRoutes.SLACK.CHANNELS}?integrationId=${encodeURIComponent(inst.id)}`, apiKey).catch(() => ({ channels: [] }));
99
+ return { id: inst.id, displayName: inst.teamName || inst.id, channels: resp.channels || [] };
100
+ }));
101
+ }));
102
+ }
103
+ // ── Linear (fetches teams per instance) ──
104
+ if (has(IntegrationType.LINEAR)) {
105
+ promises.push(safely(async () => {
106
+ const instances = await fetchWithAuth(ApiRoutes.LINEAR.INTEGRATIONS, apiKey);
107
+ input.linear = await Promise.all(instances.map(async (inst) => {
108
+ const teams = await fetchWithAuth(`${ApiRoutes.LINEAR.TEAMS}?integrationId=${encodeURIComponent(inst.id)}`, apiKey).catch(() => []);
109
+ const projects = await fetchWithAuth(`${ApiRoutes.LINEAR.PROJECTS}?integrationId=${encodeURIComponent(inst.id)}`, apiKey).catch(() => []);
110
+ return {
111
+ id: inst.id,
112
+ displayName: inst.workspaceName || inst.id,
113
+ teams: Array.isArray(teams) ? teams : [],
114
+ projects: Array.isArray(projects) ? projects : []
115
+ };
116
+ }));
117
+ }));
118
+ }
119
+ // ── Notion (fetches databases + pages per instance) ──
120
+ if (has(IntegrationType.NOTION)) {
121
+ promises.push(safely(async () => {
122
+ const instances = await fetchWithAuth(ApiRoutes.NOTION.INTEGRATIONS, apiKey);
123
+ input.notion = await Promise.all(instances.map(async (inst) => {
124
+ const resp = await fetchWithAuth(`${ApiRoutes.NOTION.RESOURCES}?integrationId=${encodeURIComponent(inst.id)}`, apiKey).catch(() => ({ resources: [] }));
125
+ const resources = resp.resources || [];
126
+ return {
127
+ id: inst.id,
128
+ displayName: inst.workspaceName || inst.id,
129
+ databases: resources.filter(r => r.type === "database"),
130
+ pages: resources.filter(r => r.type === "page")
131
+ };
132
+ }));
133
+ }));
134
+ }
135
+ // ── PostHog (fetches projects per instance) ──
136
+ if (has(IntegrationType.POSTHOG)) {
137
+ promises.push(safely(async () => {
138
+ const instances = await fetchWithAuth(ApiRoutes.POSTHOG.INTEGRATIONS, apiKey);
139
+ input.posthog = await Promise.all(instances.map(async (inst) => {
140
+ const resp = await fetchWithAuth(`${ApiRoutes.POSTHOG.PROJECTS}?integrationId=${encodeURIComponent(inst.id)}`, apiKey).catch(() => ({ projects: [] }));
141
+ return { id: inst.id, displayName: inst.orgName || inst.email || inst.id, projects: resp.projects || [] };
142
+ }));
143
+ }));
144
+ }
145
+ // ── Datadog (fetches indexes per instance) ──
146
+ if (has(IntegrationType.DATADOG)) {
147
+ promises.push(safely(async () => {
148
+ const instances = await fetchWithAuth(ApiRoutes.DATADOG.INTEGRATIONS, apiKey);
149
+ input.datadog = await Promise.all(instances.map(async (inst) => {
150
+ const resp = await fetchWithAuth(`${ApiRoutes.DATADOG.INDEXES}?integrationId=${encodeURIComponent(inst.id)}`, apiKey).catch(() => ({
151
+ indexes: []
152
+ }));
153
+ return { id: inst.id, displayName: inst.region || inst.id, indexes: resp.indexes || [] };
154
+ }));
155
+ }));
156
+ }
157
+ // ── LaunchDarkly (fetches projects per instance — URL path param) ──
158
+ if (has(IntegrationType.LAUNCHDARKLY)) {
159
+ promises.push(safely(async () => {
160
+ const instances = await fetchWithAuth(ApiRoutes.LAUNCHDARKLY.INTEGRATIONS, apiKey);
161
+ input.launchdarkly = await Promise.all(instances.map(async (inst) => {
162
+ const resp = await fetchWithAuth(buildRoute(ApiRoutes.LAUNCHDARKLY.PROJECTS_BY_INTEGRATION_ID, { integrationId: inst.id }), apiKey).catch(() => ({ projects: [] }));
163
+ return { id: inst.id, displayName: inst.tokenName || inst.email || inst.id, projects: resp.projects || [] };
164
+ }));
165
+ }));
166
+ }
167
+ // ── WorkOS (no resources) ──
168
+ if (has(IntegrationType.WORKOS)) {
169
+ promises.push(safely(async () => {
170
+ const instances = await fetchWithAuth(ApiRoutes.WORKOS_INTEGRATION.INTEGRATIONS, apiKey);
171
+ input.workos = instances.map(inst => ({ id: inst.id, displayName: inst.environment || inst.id }));
172
+ }));
173
+ }
174
+ // ── Attio (fetches objects per instance — URL path param) ──
175
+ if (has(IntegrationType.ATTIO)) {
176
+ promises.push(safely(async () => {
177
+ const instances = await fetchWithAuth(ApiRoutes.ATTIO.INTEGRATIONS, apiKey);
178
+ input.attio = await Promise.all(instances.map(async (inst) => {
179
+ const objects = await fetchWithAuth(buildRoute(ApiRoutes.ATTIO.OBJECTS, { integrationId: inst.id }), apiKey).catch(() => []);
180
+ return { id: inst.id, displayName: inst.workspaceName || inst.id, objects: Array.isArray(objects) ? objects : [] };
181
+ }));
182
+ }));
183
+ }
184
+ if (has(IntegrationType.SNOWFLAKE)) {
185
+ promises.push(safely(async () => {
186
+ const instances = await fetchWithAuth(ApiRoutes.SNOWFLAKE.INTEGRATIONS, apiKey);
187
+ input.snowflake = instances.map(inst => ({ id: inst.id, name: inst.accountIdentifier }));
188
+ }));
189
+ }
190
+ await Promise.all(promises);
191
+ const integrationCount = input.github.length +
192
+ input.slack.length +
193
+ input.gmail.length +
194
+ input.linear.length +
195
+ input.notion.length +
196
+ input.posthog.length +
197
+ input.datadog.length +
198
+ input.launchdarkly.length +
199
+ input.workos.length +
200
+ input.attio.length;
201
+ spinner.succeed(`Fetched ${integrationCount} integration(s)`);
202
+ // 5. Generate code
203
+ const codegenStart = performance.now();
204
+ const code = provider.renderGeneratedCode(input);
205
+ const codegenMs = performance.now() - codegenStart;
206
+ // 6. Write output
207
+ writeOutput(code, provider);
208
+ // 7. Summary
209
+ const totalMs = performance.now() - totalStart;
210
+ console.log("");
211
+ printSummary(input);
212
+ if (input.tools.length > 0) {
213
+ console.log(` ${chalk.green("+")} ${input.tools.length} typed tool ${input.tools.length === 1 ? "wrapper" : "wrappers"}`);
214
+ }
215
+ console.log(` ${chalk.green("+")} Schedule trigger`);
216
+ console.log(` ${chalk.green("+")} Terse skills (web search)`);
217
+ console.log("");
218
+ console.log(` ${chalk.green.bold("Generated")} ${path.relative(process.cwd(), provider.resolveGeneratedCodePath(process.cwd()))}`);
219
+ console.log(` ${chalk.dim(`Codegen: ${codegenMs.toFixed(0)}ms | Total: ${totalMs.toFixed(0)}ms`)}`);
220
+ console.log("");
221
+ }
222
+ // ── Helpers ───────────────────────────────────────────────────────────
223
+ async function safely(fn) {
224
+ try {
225
+ await fn();
226
+ }
227
+ catch {
228
+ /* skip failed integrations */
229
+ }
230
+ }
231
+ function writeOutput(code, provider) {
232
+ const outputPath = provider.resolveGeneratedCodePath(process.cwd());
233
+ const outputDir = path.dirname(outputPath);
234
+ if (!fs.existsSync(outputDir)) {
235
+ fs.mkdirSync(outputDir, { recursive: true });
236
+ }
237
+ fs.writeFileSync(outputPath, code);
238
+ }
239
+ function printSummary(input) {
240
+ const g = chalk.green("+");
241
+ for (const inst of input.github) {
242
+ const name = inst.integration.account_name || inst.integration.id;
243
+ const n = inst.repositories.length;
244
+ console.log(` ${g} GitHub (${name}) — ${n} ${n === 1 ? "repository" : "repositories"}`);
245
+ }
246
+ for (const inst of input.gmail) {
247
+ console.log(` ${g} Gmail (${inst.displayName})`);
248
+ }
249
+ for (const inst of input.slack) {
250
+ const n = inst.channels.length;
251
+ console.log(` ${g} Slack (${inst.displayName}) — ${n} ${n === 1 ? "channel" : "channels"}`);
252
+ }
253
+ for (const inst of input.linear) {
254
+ const n = inst.teams.length;
255
+ console.log(` ${g} Linear (${inst.displayName}) — ${n} ${n === 1 ? "team" : "teams"}`);
256
+ }
257
+ for (const inst of input.notion) {
258
+ const d = inst.databases.length;
259
+ const p = inst.pages.length;
260
+ console.log(` ${g} Notion (${inst.displayName}) — ${d} ${d === 1 ? "database" : "databases"}, ${p} ${p === 1 ? "page" : "pages"}`);
261
+ }
262
+ for (const inst of input.posthog) {
263
+ const n = inst.projects.length;
264
+ console.log(` ${g} PostHog (${inst.displayName}) — ${n} ${n === 1 ? "project" : "projects"}`);
265
+ }
266
+ for (const inst of input.datadog) {
267
+ const n = inst.indexes.length;
268
+ console.log(` ${g} Datadog (${inst.displayName}) — ${n} ${n === 1 ? "index" : "indexes"}`);
269
+ }
270
+ for (const inst of input.launchdarkly) {
271
+ const n = inst.projects.length;
272
+ console.log(` ${g} LaunchDarkly (${inst.displayName}) — ${n} ${n === 1 ? "project" : "projects"}`);
273
+ }
274
+ for (const inst of input.workos) {
275
+ console.log(` ${g} WorkOS (${inst.displayName})`);
276
+ }
277
+ for (const inst of input.attio) {
278
+ const n = inst.objects.length;
279
+ console.log(` ${g} Attio (${inst.displayName}) — ${n} ${n === 1 ? "object" : "objects"}`);
280
+ }
281
+ }
282
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { LanguageProvider } from "../providers/LanguageProvider.js";
2
+ export type HistoryOptions = {
3
+ json?: boolean;
4
+ limit?: number;
5
+ page?: number;
6
+ status?: string;
7
+ since?: string;
8
+ until?: string;
9
+ query?: string;
10
+ triggers?: boolean;
11
+ events?: boolean;
12
+ runId?: string;
13
+ };
14
+ export declare function history(jobName?: string, options?: HistoryOptions, provider?: LanguageProvider): Promise<void>;
15
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQnE,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,EAAE,QAAQ,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E3I"}
@@ -0,0 +1,103 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { RunHistoryStatus } from "terse-types";
4
+ import { fetchRunChatHistory, fetchRunHistory, readApiKeyOrBail, resolveAgentIdByJobName, resolveEventFromRunId } from "../api.js";
5
+ import { loadJob } from "../loadJob.js";
6
+ import { resolveProvider } from "../providers/resolveProvider.js";
7
+ import { printRunChat, printRuns } from "./historyPrinters.js";
8
+ const VALID_STATUSES = new Set(Object.values(RunHistoryStatus));
9
+ const MAX_PAGE_SIZE = 100;
10
+ export async function history(jobName, options = {}, provider = resolveProvider()) {
11
+ const apiKey = readApiKeyOrBail();
12
+ // Single-run mode bypasses job/agent resolution.
13
+ if (options.runId) {
14
+ const chat = await fetchRunChatHistory(options.runId, apiKey);
15
+ if (options.json) {
16
+ process.stdout.write(JSON.stringify({ runId: options.runId, ...chat }, null, 2) + "\n");
17
+ return;
18
+ }
19
+ printRunChat(options.runId, chat);
20
+ return;
21
+ }
22
+ const { job } = await loadJob(provider, jobName);
23
+ const spinner = options.json ? null : ora(`Fetching run history for ${job.name}`).start();
24
+ let agentId;
25
+ try {
26
+ agentId = await resolveAgentIdByJobName(job.name, apiKey);
27
+ }
28
+ catch (error) {
29
+ spinner?.fail(chalk.red("Failed to look up agent"));
30
+ throw error;
31
+ }
32
+ if (!agentId) {
33
+ spinner?.fail(chalk.red(`No deployed agent found for job "${job.name}"`));
34
+ if (!options.json)
35
+ console.log(chalk.dim(` Have you run \`terse deploy\` for this job?`));
36
+ process.exit(1);
37
+ }
38
+ const params = buildParams(options);
39
+ const response = await fetchRunHistory(agentId, apiKey, params);
40
+ let items = response.items;
41
+ // --triggers: cheap per-run fetch of just the input event JSON via /sdk/runs/:runId/trigger-event.
42
+ // Implied by --events (which fetches the full chat history including the trigger payload).
43
+ if (options.triggers && !options.events && items.length > 0) {
44
+ if (spinner)
45
+ spinner.text = `Fetching trigger events for ${items.length} run${items.length === 1 ? "" : "s"}`;
46
+ items = await Promise.all(items.map(async (run) => {
47
+ const triggerEvent = await resolveEventFromRunId(run.id, apiKey);
48
+ return triggerEvent ? { ...run, triggerEvent: triggerEvent.event } : run;
49
+ }));
50
+ }
51
+ // --events: full chat history per run (model events + trigger event). Heavier than --triggers.
52
+ if (options.events && items.length > 0) {
53
+ if (spinner)
54
+ spinner.text = `Fetching chat events for ${items.length} run${items.length === 1 ? "" : "s"}`;
55
+ items = await Promise.all(items.map(async (run) => {
56
+ try {
57
+ const chat = await fetchRunChatHistory(run.id, apiKey);
58
+ return { ...run, chat };
59
+ }
60
+ catch {
61
+ return run;
62
+ }
63
+ }));
64
+ }
65
+ spinner?.succeed(`Fetched ${items.length} of ${response.total} run${response.total === 1 ? "" : "s"} for ${job.name}`);
66
+ if (options.json) {
67
+ const payload = {
68
+ jobName: job.name,
69
+ agentId,
70
+ page: response.page,
71
+ pageSize: response.pageSize,
72
+ total: response.total,
73
+ items
74
+ };
75
+ process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
76
+ return;
77
+ }
78
+ printRuns(job.name, agentId, items, response.total);
79
+ }
80
+ function buildParams(options) {
81
+ const params = {};
82
+ if (options.query)
83
+ params.q = options.query;
84
+ if (options.since)
85
+ params.start = options.since;
86
+ if (options.until)
87
+ params.end = options.until;
88
+ if (options.page && options.page > 0)
89
+ params.page = options.page;
90
+ if (options.limit && options.limit > 0) {
91
+ params.pageSize = Math.min(options.limit, MAX_PAGE_SIZE);
92
+ }
93
+ if (options.status) {
94
+ const statuses = options.status
95
+ .split(",")
96
+ .map(s => s.trim())
97
+ .filter((s) => VALID_STATUSES.has(s));
98
+ if (statuses.length > 0)
99
+ params.status = statuses;
100
+ }
101
+ return params;
102
+ }
103
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAClI,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAsB,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAElF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAuB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAA2B,CAAC,CAAA;AAC/G,MAAM,aAAa,GAAG,GAAG,CAAA;AAezB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAgB,EAAE,UAA0B,EAAE,EAAE,WAA6B,eAAe,EAAE;IACxH,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IAEjC,iDAAiD;IACjD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;YACvF,OAAM;QACV,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACjC,OAAM;IACV,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,4BAA4B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IACzF,IAAI,OAAsB,CAAA;IAC1B,IAAI,CAAC;QACD,OAAO,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;QACnD,MAAM,KAAK,CAAA;IACf,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QACzE,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAA;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAEnC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/D,IAAI,KAAK,GAAoB,QAAQ,CAAC,KAAK,CAAA;IAE3C,mGAAmG;IACnG,2FAA2F;IAC3F,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,GAAG,+BAA+B,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QAC7G,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CACrB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YAClB,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAChE,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAC5E,CAAC,CAAC,CACL,CAAA;IACL,CAAC;IAED,+FAA+F;IAC/F,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,GAAG,4BAA4B,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QAC1G,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CACrB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YAClB,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBACtD,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAA;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,GAAG,CAAA;YACd,CAAC;QACL,CAAC,CAAC,CACL,CAAA;IACL,CAAC;IAED,OAAO,EAAE,OAAO,CAAC,WAAW,KAAK,CAAC,MAAM,OAAO,QAAQ,CAAC,KAAK,OAAO,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAEtH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,OAAO;YACP,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK;SACR,CAAA;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAC7D,OAAM;IACV,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,OAAuB;IACxC,MAAM,MAAM,GAAwB,EAAE,CAAA;IAEtC,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAA;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IAC/C,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAA;IAC7C,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAEhE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;aAC1B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAyB,CAAC,CAAC,CAAA;QAC5F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAA;IACrD,CAAC;IAED,OAAO,MAAM,CAAA;AACjB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RunHistoryRecord, SerializedEvent } from "terse-types";
2
+ import type { RunChatHistory } from "../api.js";
3
+ export type RunWithEvents = RunHistoryRecord & {
4
+ chat?: RunChatHistory;
5
+ triggerEvent?: SerializedEvent;
6
+ };
7
+ export declare function printRuns(jobName: string, agentId: string, items: RunWithEvents[], total: number): void;
8
+ export declare function printRunChat(runId: string, chat: RunChatHistory): void;
9
+ //# sourceMappingURL=historyPrinters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyPrinters.d.ts","sourceRoot":"","sources":["../../src/commands/historyPrinters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAA4C,eAAe,EAAE,MAAM,aAAa,CAAA;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAAE,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,eAAe,CAAA;CAAE,CAAA;AAExG,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAoCvG;AAYD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAetE"}
@@ -0,0 +1,101 @@
1
+ import chalk from "chalk";
2
+ import { RunHistoryStatus } from "terse-types";
3
+ export function printRuns(jobName, agentId, items, total) {
4
+ console.log(chalk.cyan(`\n History for job: ${jobName}`));
5
+ console.log(chalk.dim(` Agent: ${agentId} — ${items.length} of ${total} run${total === 1 ? "" : "s"}\n`));
6
+ if (items.length === 0) {
7
+ console.log(chalk.dim(" No runs match the requested filters.\n"));
8
+ return;
9
+ }
10
+ for (const run of items) {
11
+ const ts = new Date(run.timestamp).toISOString();
12
+ const triggerSource = run.trigger.title ?? run.trigger.source;
13
+ console.log(` ${formatStatus(run.status)} ${chalk.dim(ts)} ${chalk.bold(run.id)}`);
14
+ console.log(` trigger: ${run.trigger.integration} — ${triggerSource}`);
15
+ if (run.trigger.subheader)
16
+ console.log(chalk.dim(` ${run.trigger.subheader}`));
17
+ console.log(` decision: ${run.decision.action}${run.decision.reasoning ? ` — ${truncate(run.decision.reasoning, 200)}` : ""}`);
18
+ const actions = run.actions ?? [];
19
+ if (actions.length > 0) {
20
+ console.log(` actions: ${actions.length}`);
21
+ for (const action of actions.slice(0, 5)) {
22
+ console.log(chalk.dim(` - [${action.type}] ${action.integration} ${action.action} → ${truncate(action.target, 80)}`));
23
+ }
24
+ if (actions.length > 5) {
25
+ console.log(chalk.dim(` … and ${actions.length - 5} more`));
26
+ }
27
+ }
28
+ if (run.chat) {
29
+ console.log(chalk.dim(` events: ${run.chat.events.length} model event${run.chat.events.length === 1 ? "" : "s"}`));
30
+ }
31
+ const triggerJson = formatTriggerEventForRun(run);
32
+ if (triggerJson) {
33
+ console.log(` input:`);
34
+ console.log(indent(triggerJson, " "));
35
+ }
36
+ console.log("");
37
+ }
38
+ }
39
+ function formatTriggerEventForRun(run) {
40
+ if (run.triggerEvent) {
41
+ return JSON.stringify(run.triggerEvent, null, 2);
42
+ }
43
+ if (run.chat?.triggerEvent) {
44
+ return run.chat.triggerEvent;
45
+ }
46
+ return null;
47
+ }
48
+ export function printRunChat(runId, chat) {
49
+ console.log(chalk.cyan(`\n Run: ${runId}`));
50
+ console.log(chalk.dim(` ${chat.startTimestamp} → ${chat.endTimestamp} status=${chat.status}\n`));
51
+ if (chat.triggerEvent) {
52
+ console.log(chalk.bold(` Trigger event (${chat.triggerEventType ?? "unknown"})${chat.isTriggerEventTruncated ? " [truncated]" : ""}:`));
53
+ console.log(indent(chat.triggerEvent, " "));
54
+ console.log("");
55
+ }
56
+ console.log(chalk.bold(` ${chat.events.length} model event${chat.events.length === 1 ? "" : "s"}:`));
57
+ for (const event of chat.events) {
58
+ console.log(chalk.dim(` - [${event.type}] ${describeEvent(event)}`));
59
+ }
60
+ console.log("");
61
+ }
62
+ function describeEvent(event) {
63
+ const anyEvent = event;
64
+ if (typeof anyEvent.text === "string")
65
+ return truncate(anyEvent.text, 160);
66
+ if (typeof anyEvent.toolName === "string")
67
+ return `${anyEvent.toolName}`;
68
+ if (typeof anyEvent.message === "string")
69
+ return truncate(anyEvent.message, 160);
70
+ return "";
71
+ }
72
+ function formatStatus(status) {
73
+ switch (status) {
74
+ case RunHistoryStatus.SUCCESS:
75
+ return chalk.green("✓ success");
76
+ case RunHistoryStatus.FAILED:
77
+ return chalk.red("✗ failed");
78
+ case RunHistoryStatus.CANCELLED:
79
+ return chalk.yellow("⊘ cancelled");
80
+ case RunHistoryStatus.SKIPPED:
81
+ return chalk.dim("· skipped");
82
+ case RunHistoryStatus.IN_PROGRESS:
83
+ return chalk.blue("⟳ in_progress");
84
+ case RunHistoryStatus.AWAITING_APPROVAL:
85
+ return chalk.magenta("? awaiting_approval");
86
+ default:
87
+ return status;
88
+ }
89
+ }
90
+ function truncate(value, max) {
91
+ if (value.length <= max)
92
+ return value;
93
+ return value.slice(0, max - 1) + "…";
94
+ }
95
+ function indent(value, prefix) {
96
+ return value
97
+ .split("\n")
98
+ .map(line => `${prefix}${line}`)
99
+ .join("\n");
100
+ }
101
+ //# sourceMappingURL=historyPrinters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyPrinters.js","sourceRoot":"","sources":["../../src/commands/historyPrinters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageProvider } from "../providers/LanguageProvider.js";
2
+ export declare function init(projectName?: string, provider?: LanguageProvider): Promise<void>;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AASxE,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAuE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjJ"}