@qodo/sdk 0.10.0 → 0.11.0

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,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.0",
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",