@qodo/sdk 0.10.0 → 0.11.1

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.
@@ -0,0 +1,35 @@
1
+ import jmespath from 'jmespath';
2
+ /**
3
+ * Evaluate a JMESPath exit expression against structured output.
4
+ *
5
+ * Returns `true` when the expression yields a truthy value, `false` otherwise.
6
+ * This is a pure library utility — it never calls `process.exit()`.
7
+ *
8
+ * @param structuredOutput - The structured output to evaluate against (object, JSON string, or nullish).
9
+ * @param expression - A JMESPath expression string.
10
+ * @returns `true` if the expression result is truthy, `false` otherwise.
11
+ * @throws {Error} If the JMESPath expression is invalid.
12
+ */
13
+ export function evaluateExitExpression(structuredOutput, expression) {
14
+ if (structuredOutput == null)
15
+ return false;
16
+ let data = structuredOutput;
17
+ if (typeof data === 'string') {
18
+ try {
19
+ data = JSON.parse(data);
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ if (typeof data !== 'object' || data === null)
26
+ return false;
27
+ try {
28
+ const result = jmespath.search(data, expression);
29
+ return !!result;
30
+ }
31
+ catch (e) {
32
+ throw new Error(`Failed to evaluate exit expression "${expression}": ${e.message}`);
33
+ }
34
+ }
35
+ //# sourceMappingURL=exit-expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-expression.js","sourceRoot":"","sources":["../../src/sdk/exit-expression.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,gBAAyB,EAAE,UAAkB;IAClF,IAAI,gBAAgB,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAE3C,IAAI,IAAI,GAAY,gBAAgB,CAAC;IAErC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC,MAAM,CAAC;IAClB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,UAAU,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CI Trigger Context — auto-detects the CI provider and extracts
3
+ * trigger metadata (PR URL, branch, commit SHA, etc.) from environment
4
+ * variables. Works across GitHub Actions, GitLab CI, Bitbucket
5
+ * Pipelines, Gerrit, and a generic fallback.
6
+ */
7
+ export type CIProvider = 'github' | 'gitlab' | 'bitbucket' | 'gerrit' | 'unknown';
8
+ export interface CITriggerContext {
9
+ provider: CIProvider;
10
+ event_name?: string;
11
+ pr_url?: string;
12
+ branch?: string;
13
+ base_branch?: string;
14
+ repo_url?: string;
15
+ commit_sha?: string;
16
+ tag?: string;
17
+ }
18
+ /**
19
+ * Auto-detect the CI provider and extract trigger context from environment
20
+ * variables. Optional `overrides` are merged on top (non-undefined values
21
+ * win).
22
+ */
23
+ export declare function resolveTriggerContext(overrides?: Partial<CITriggerContext>): CITriggerContext;
24
+ //# sourceMappingURL=trigger-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-context.d.ts","sourceRoot":"","sources":["../../src/sdk/trigger-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAgB7F"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * CI Trigger Context — auto-detects the CI provider and extracts
3
+ * trigger metadata (PR URL, branch, commit SHA, etc.) from environment
4
+ * variables. Works across GitHub Actions, GitLab CI, Bitbucket
5
+ * Pipelines, Gerrit, and a generic fallback.
6
+ */
7
+ import { readFileSync } from 'node:fs';
8
+ // ---- Provider resolvers (first match wins) ----
9
+ function resolveGitHub() {
10
+ if (process.env.GITHUB_ACTIONS !== 'true')
11
+ return null;
12
+ const ctx = {
13
+ provider: 'github',
14
+ event_name: process.env.GITHUB_EVENT_NAME,
15
+ branch: process.env.GITHUB_HEAD_REF || process.env.GITHUB_REF_NAME,
16
+ base_branch: process.env.GITHUB_BASE_REF || undefined,
17
+ repo_url: process.env.GITHUB_SERVER_URL && process.env.GITHUB_REPOSITORY
18
+ ? `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`
19
+ : undefined,
20
+ commit_sha: process.env.GITHUB_SHA,
21
+ };
22
+ // Extract tag for release/tag events
23
+ const ref = process.env.GITHUB_REF ?? '';
24
+ if (ref.startsWith('refs/tags/')) {
25
+ ctx.tag = ref.replace('refs/tags/', '');
26
+ }
27
+ // Extract pr_url from the event payload JSON
28
+ const eventPath = process.env.GITHUB_EVENT_PATH;
29
+ if (eventPath) {
30
+ try {
31
+ const raw = readFileSync(eventPath, 'utf-8');
32
+ const event = JSON.parse(raw);
33
+ ctx.pr_url = event?.pull_request?.html_url ?? undefined;
34
+ }
35
+ catch {
36
+ // Ignore — file may not exist or be malformed
37
+ }
38
+ }
39
+ // Fallback for pr_url
40
+ if (!ctx.pr_url) {
41
+ ctx.pr_url = process.env.PR_URL || process.env.QODO_PR_URL || undefined;
42
+ }
43
+ return ctx;
44
+ }
45
+ function resolveGitLab() {
46
+ if (process.env.GITLAB_CI !== 'true')
47
+ return null;
48
+ const ctx = {
49
+ provider: 'gitlab',
50
+ event_name: process.env.CI_PIPELINE_SOURCE,
51
+ branch: process.env.CI_COMMIT_BRANCH || process.env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,
52
+ base_branch: process.env.CI_MERGE_REQUEST_TARGET_BRANCH_NAME || undefined,
53
+ repo_url: process.env.CI_PROJECT_URL || undefined,
54
+ commit_sha: process.env.CI_COMMIT_SHA,
55
+ };
56
+ // Build MR URL
57
+ const mrIid = process.env.CI_MERGE_REQUEST_IID;
58
+ const projectUrl = process.env.CI_PROJECT_URL;
59
+ if (mrIid && projectUrl) {
60
+ ctx.pr_url = `${projectUrl}/-/merge_requests/${mrIid}`;
61
+ }
62
+ // Tag
63
+ if (process.env.CI_COMMIT_TAG) {
64
+ ctx.tag = process.env.CI_COMMIT_TAG;
65
+ }
66
+ return ctx;
67
+ }
68
+ function resolveBitbucket() {
69
+ if (!process.env.BITBUCKET_PIPELINE_UUID)
70
+ return null;
71
+ const ctx = {
72
+ provider: 'bitbucket',
73
+ branch: process.env.BITBUCKET_BRANCH,
74
+ repo_url: process.env.BITBUCKET_GIT_HTTP_ORIGIN || undefined,
75
+ commit_sha: process.env.BITBUCKET_COMMIT,
76
+ };
77
+ // Infer event_name from PR presence
78
+ const prId = process.env.BITBUCKET_PR_ID;
79
+ if (prId) {
80
+ ctx.event_name = 'pull_request';
81
+ const origin = process.env.BITBUCKET_GIT_HTTP_ORIGIN;
82
+ if (origin) {
83
+ ctx.pr_url = `${origin}/pull-requests/${prId}`;
84
+ }
85
+ ctx.base_branch = process.env.BITBUCKET_PR_DESTINATION_BRANCH || undefined;
86
+ }
87
+ // Tag
88
+ if (process.env.BITBUCKET_TAG) {
89
+ ctx.tag = process.env.BITBUCKET_TAG;
90
+ }
91
+ return ctx;
92
+ }
93
+ function resolveGerrit() {
94
+ if (!process.env.GERRIT_CHANGE_URL)
95
+ return null;
96
+ return {
97
+ provider: 'gerrit',
98
+ event_name: process.env.GERRIT_EVENT_TYPE,
99
+ pr_url: process.env.GERRIT_CHANGE_URL,
100
+ branch: process.env.GERRIT_BRANCH,
101
+ commit_sha: process.env.GERRIT_PATCHSET_REVISION,
102
+ repo_url: process.env.GERRIT_PROJECT
103
+ ? `${process.env.GERRIT_CHANGE_URL?.split('/c/')[0] ?? ''}/${process.env.GERRIT_PROJECT}`
104
+ : undefined,
105
+ };
106
+ }
107
+ function resolveFallback() {
108
+ return {
109
+ provider: 'unknown',
110
+ pr_url: process.env.PR_URL || process.env.QODO_PR_URL || undefined,
111
+ branch: process.env.BRANCH || process.env.QODO_BRANCH || undefined,
112
+ commit_sha: process.env.COMMIT_SHA || process.env.QODO_COMMIT_SHA || undefined,
113
+ repo_url: process.env.REPO_URL || process.env.QODO_REPO_URL || undefined,
114
+ tag: process.env.TAG || process.env.QODO_TAG || undefined,
115
+ };
116
+ }
117
+ // ---- Public API ----
118
+ /**
119
+ * Auto-detect the CI provider and extract trigger context from environment
120
+ * variables. Optional `overrides` are merged on top (non-undefined values
121
+ * win).
122
+ */
123
+ export function resolveTriggerContext(overrides) {
124
+ const detected = resolveGitHub() ??
125
+ resolveGitLab() ??
126
+ resolveBitbucket() ??
127
+ resolveGerrit() ??
128
+ resolveFallback();
129
+ if (!overrides)
130
+ return detected;
131
+ return {
132
+ ...detected,
133
+ ...Object.fromEntries(Object.entries(overrides).filter(([, v]) => v !== undefined)),
134
+ };
135
+ }
136
+ //# sourceMappingURL=trigger-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-context.js","sourceRoot":"","sources":["../../src/sdk/trigger-context.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qodo/sdk",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "description": "Qodo SDK for building AI-powered agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,7 +18,8 @@
18
18
  "./package.json": "./package.json"
19
19
  },
20
20
  "bin": {
21
- "qodo-install-skill": "./dist/bin/install-skill.js"
21
+ "qodo-install-skill": "./dist/bin/install-skill.js",
22
+ "qodo-sdk": "./dist/bin/run.js"
22
23
  },
23
24
  "files": [
24
25
  "dist",
@@ -43,7 +44,7 @@
43
44
  "node": ">=18"
44
45
  },
45
46
  "scripts": {
46
- "build": "npm run clean && tsc && chmod +x dist/bin/install-skill.js",
47
+ "build": "npm run clean && tsc && chmod +x dist/bin/install-skill.js dist/bin/run.js",
47
48
  "dev": "tsc --watch",
48
49
  "clean": "rm -rf dist",
49
50
  "typecheck": "tsc --noEmit",