@commandgarden/cli 2.14.0 → 2.14.2
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.
- package/dist/main.js +248 -278
- package/node_modules/@commandgarden/app/dist/client/assets/{Slides-DWQmJfkp.js → Slides-DMIm_HgI.js} +5 -5
- package/node_modules/@commandgarden/app/dist/client/assets/{index-C8yqRQk-.js → index-CupEN1w-.js} +53 -53
- package/node_modules/@commandgarden/app/dist/client/index.html +18 -18
- package/node_modules/@commandgarden/app/dist/server/daemon-client.test.js +47 -0
- package/node_modules/@commandgarden/app/dist/server/main.js +1 -1
- package/node_modules/@commandgarden/app/dist/server/routes/audit.js +16 -27
- package/node_modules/@commandgarden/app/dist/server/routes/config.js +2 -8
- package/node_modules/@commandgarden/app/dist/server/routes/connectors.js +26 -37
- package/node_modules/@commandgarden/app/dist/server/routes/routes.test.js +137 -0
- package/node_modules/@commandgarden/app/dist/server/routes/run.js +4 -3
- package/node_modules/@commandgarden/app/dist/server/routes/skills.js +2 -2
- package/node_modules/@commandgarden/app/dist/server/routes/status.js +1 -2
- package/node_modules/@commandgarden/app/dist/server/store.js +53 -53
- package/node_modules/@commandgarden/app/dist/server/store.test.js +59 -0
- package/node_modules/@commandgarden/app/package.json +42 -42
- package/node_modules/@commandgarden/chrome/dist/content-script.js.map +1 -1
- package/node_modules/@commandgarden/chrome/dist/fetch-interceptor.js +44 -0
- package/node_modules/@commandgarden/chrome/dist/manifest.json +26 -26
- package/node_modules/@commandgarden/chrome/dist/popup.html +218 -218
- package/node_modules/@commandgarden/chrome/dist/popup.js.map +1 -1
- package/node_modules/@commandgarden/chrome/dist/service-worker.js +40 -40
- package/node_modules/@commandgarden/chrome/dist/service-worker.js.map +2 -2
- package/node_modules/@commandgarden/chrome/package.json +26 -26
- package/node_modules/@commandgarden/daemon/connectors/ado-git-commits.eval.js +100 -100
- package/node_modules/@commandgarden/daemon/connectors/ado-git-commits.yaml +71 -71
- package/node_modules/@commandgarden/daemon/connectors/gcs-kb-content.yaml +61 -61
- package/node_modules/@commandgarden/daemon/connectors/gcs-kb-pages.yaml +54 -54
- package/node_modules/@commandgarden/daemon/connectors/jira-my-tickets.eval.js +115 -115
- package/node_modules/@commandgarden/daemon/connectors/jira-my-tickets.yaml +54 -54
- package/node_modules/@commandgarden/daemon/connectors/lib/msal-token.js +20 -20
- package/node_modules/@commandgarden/daemon/connectors/outlook-my-meetings.eval.js +204 -204
- package/node_modules/@commandgarden/daemon/connectors/outlook-my-meetings.yaml +42 -42
- package/node_modules/@commandgarden/daemon/connectors/saba-pending-training.eval.js +94 -94
- package/node_modules/@commandgarden/daemon/connectors/saba-pending-training.yaml +34 -34
- package/node_modules/@commandgarden/daemon/connectors/socket-security-news.yaml +63 -63
- package/node_modules/@commandgarden/daemon/connectors/teams-room-availability.eval.js +437 -437
- package/node_modules/@commandgarden/daemon/connectors/teams-room-availability.yaml +53 -53
- package/node_modules/@commandgarden/daemon/connectors/teams-rooms-availability.eval.js +547 -547
- package/node_modules/@commandgarden/daemon/connectors/teams-rooms-availability.yaml +48 -48
- package/node_modules/@commandgarden/daemon/connectors/timetracking-projects.eval.js +52 -52
- package/node_modules/@commandgarden/daemon/connectors/timetracking-projects.yaml +42 -42
- package/node_modules/@commandgarden/daemon/connectors/timetracking-report.eval.js +81 -81
- package/node_modules/@commandgarden/daemon/connectors/timetracking-report.yaml +52 -52
- package/node_modules/@commandgarden/daemon/connectors/tldrsec-newsletter.eval.js +27 -27
- package/node_modules/@commandgarden/daemon/connectors/tldrsec-newsletter.yaml +38 -38
- package/node_modules/@commandgarden/daemon/connectors/tokenmaster-clients-list.yaml +55 -55
- package/node_modules/@commandgarden/daemon/dist/audit-store.js +8 -8
- package/node_modules/@commandgarden/daemon/dist/auth.d.ts +0 -1
- package/node_modules/@commandgarden/daemon/dist/auth.d.ts.map +1 -1
- package/node_modules/@commandgarden/daemon/dist/auth.js +0 -10
- package/node_modules/@commandgarden/daemon/dist/auth.js.map +1 -1
- package/node_modules/@commandgarden/daemon/dist/cdp-client.d.ts +24 -0
- package/node_modules/@commandgarden/daemon/dist/cdp-client.d.ts.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/cdp-client.js +150 -0
- package/node_modules/@commandgarden/daemon/dist/cdp-client.js.map +1 -0
- package/node_modules/@commandgarden/daemon/dist/main.js +5 -12
- package/node_modules/@commandgarden/daemon/dist/main.js.map +1 -1
- package/node_modules/@commandgarden/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@commandgarden/daemon/dist/server.js +0 -10
- package/node_modules/@commandgarden/daemon/dist/server.js.map +1 -1
- package/node_modules/@commandgarden/daemon/package.json +32 -32
- package/node_modules/@commandgarden/shared/dist/daemon-client.d.ts +1 -5
- package/node_modules/@commandgarden/shared/dist/daemon-client.d.ts.map +1 -1
- package/node_modules/@commandgarden/shared/dist/daemon-client.js +14 -32
- package/node_modules/@commandgarden/shared/dist/daemon-client.js.map +1 -1
- package/node_modules/@commandgarden/shared/package.json +32 -32
- package/package.json +58 -58
- package/node_modules/@commandgarden/app/dist/server/routes/utils.d.ts +0 -2
- package/node_modules/@commandgarden/app/dist/server/routes/utils.js +0 -4
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@commandgarden/chrome",
|
|
3
|
-
"version": "1.0.1",
|
|
4
|
-
"private": true,
|
|
5
|
-
"type": "module",
|
|
6
|
-
"files": [
|
|
7
|
-
"dist"
|
|
8
|
-
],
|
|
9
|
-
"scripts": {
|
|
10
|
-
"build": "node build.mjs",
|
|
11
|
-
"test": "vitest run",
|
|
12
|
-
"test:watch": "vitest"
|
|
13
|
-
},
|
|
14
|
-
"dependencies": {
|
|
15
|
-
"@commandgarden/shared": "*"
|
|
16
|
-
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
"@types/chrome": "^0.0.287",
|
|
19
|
-
"@types/node": "^22.0.0",
|
|
20
|
-
"esbuild": "^0.25.0",
|
|
21
|
-
"jsdom": "^25.0.0",
|
|
22
|
-
"sharp": "^0.35.3",
|
|
23
|
-
"typescript": "^5.4.0",
|
|
24
|
-
"vitest": "^2.0.0"
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@commandgarden/chrome",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "node build.mjs",
|
|
11
|
+
"test": "vitest run",
|
|
12
|
+
"test:watch": "vitest"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@commandgarden/shared": "*"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/chrome": "^0.0.287",
|
|
19
|
+
"@types/node": "^22.0.0",
|
|
20
|
+
"esbuild": "^0.25.0",
|
|
21
|
+
"jsdom": "^25.0.0",
|
|
22
|
+
"sharp": "^0.35.3",
|
|
23
|
+
"typescript": "^5.4.0",
|
|
24
|
+
"vitest": "^2.0.0"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
// Runs in page context via js_evaluate step (executed by CDP Runtime.evaluate
|
|
2
|
-
// to bypass ADO's strict-dynamic CSP — see chrome-adapter.ts evaluateViaCdp).
|
|
3
|
-
//
|
|
4
|
-
// Fetches ADO Git commits directly via the REST API. This works because:
|
|
5
|
-
// 1. Runtime.evaluate bypasses CSP (runs at debugger level, like DevTools console)
|
|
6
|
-
// 2. fetch() is same-origin and uses the page's session cookies for auth
|
|
7
|
-
// 3. No MCAS proxy on dev.azure.com (unlike Outlook)
|
|
8
|
-
//
|
|
9
|
-
// Falls back to window.__cdpCapture if the direct API call fails.
|
|
10
|
-
// Requires cdp: true in the connector YAML.
|
|
11
|
-
//
|
|
12
|
-
// Template variables interpolated before execution:
|
|
13
|
-
// ${{ args.org }}, ${{ args.project }}, ${{ args.repo }}
|
|
14
|
-
// ${{ args.fromDate }}, ${{ args.toDate }}
|
|
15
|
-
// ${{ args.author | default("") }}
|
|
16
|
-
|
|
17
|
-
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
|
|
18
|
-
|
|
19
|
-
const org = '${{ args.org }}'.trim();
|
|
20
|
-
const project = '${{ args.project }}'.trim();
|
|
21
|
-
const repo = '${{ args.repo }}'.trim();
|
|
22
|
-
const fromDate = '${{ args.fromDate }}'.trim();
|
|
23
|
-
const toDate = '${{ args.toDate }}'.trim();
|
|
24
|
-
const authorFilter = '${{ args.author | default("") }}'.trim().toLowerCase();
|
|
25
|
-
|
|
26
|
-
// ── Fetch commits via ADO REST API ────────────────────────────────────
|
|
27
|
-
// Direct same-origin fetch with session cookies — avoids the problem where
|
|
28
|
-
// ADO embeds initial commit data in the HTML (no separate _apis/ XHR),
|
|
29
|
-
// making CDP Fetch.enable interception unable to capture commit data.
|
|
30
|
-
const allItems = [];
|
|
31
|
-
try {
|
|
32
|
-
const apiUrl = `https://dev.azure.com/${encodeURIComponent(org)}/${encodeURIComponent(project)}`
|
|
33
|
-
+ `/_apis/git/repositories/${encodeURIComponent(repo)}/commits`
|
|
34
|
-
+ `?searchCriteria.fromDate=${fromDate}&searchCriteria.toDate=${toDate}`
|
|
35
|
-
+ `&$top=1000&api-version=7.1`;
|
|
36
|
-
const resp = await fetch(apiUrl);
|
|
37
|
-
if (!resp.ok) throw new Error('HTTP ' + resp.status);
|
|
38
|
-
const data = await resp.json();
|
|
39
|
-
for (const item of (data.value || [])) {
|
|
40
|
-
if (item.commitId) allItems.push(item);
|
|
41
|
-
}
|
|
42
|
-
} catch (fetchErr) {
|
|
43
|
-
// Direct fetch failed — fall back to CDP-captured data (window.__cdpCapture
|
|
44
|
-
// is populated by chrome-adapter.ts Fetch.enable when _apis/ XHRs occur).
|
|
45
|
-
for (let i = 0; i < 30; i++) {
|
|
46
|
-
await sleep(1000);
|
|
47
|
-
if (window.__cdpCapture && window.__cdpCapture.length > 0) break;
|
|
48
|
-
}
|
|
49
|
-
for (const raw of (window.__cdpCapture || [])) {
|
|
50
|
-
try {
|
|
51
|
-
const data = JSON.parse(raw);
|
|
52
|
-
const items = data.value || data.results || [];
|
|
53
|
-
if (Array.isArray(items)) {
|
|
54
|
-
for (const item of items) {
|
|
55
|
-
if (item.commitId) allItems.push(item);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
} catch (_) {}
|
|
59
|
-
}
|
|
60
|
-
window.__cdpCapture = [];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// ── Deduplicate and filter commits ────────────────────────────────────
|
|
64
|
-
const seen = new Set();
|
|
65
|
-
const rows = [];
|
|
66
|
-
|
|
67
|
-
for (const item of allItems) {
|
|
68
|
-
if (seen.has(item.commitId)) continue;
|
|
69
|
-
seen.add(item.commitId);
|
|
70
|
-
|
|
71
|
-
const authorName = item.author?.name || item.committer?.name || '';
|
|
72
|
-
const authorEmail = item.author?.email || item.committer?.email || '';
|
|
73
|
-
const dateRaw = item.author?.date || item.committer?.date || '';
|
|
74
|
-
const date = dateRaw.slice(0, 10);
|
|
75
|
-
|
|
76
|
-
// Filter by date range
|
|
77
|
-
if (date && (date < fromDate || date > toDate)) continue;
|
|
78
|
-
|
|
79
|
-
// Filter by author if provided
|
|
80
|
-
if (authorFilter) {
|
|
81
|
-
const nameMatch = authorName.toLowerCase().includes(authorFilter);
|
|
82
|
-
const emailMatch = authorEmail.toLowerCase().includes(authorFilter);
|
|
83
|
-
if (!nameMatch && !emailMatch) continue;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
rows.push({
|
|
87
|
-
commitId: item.commitId,
|
|
88
|
-
authorName,
|
|
89
|
-
authorEmail,
|
|
90
|
-
date,
|
|
91
|
-
message: (item.comment || '').split('\n')[0].slice(0, 200),
|
|
92
|
-
filesAdded: item.changeCounts?.Add || 0,
|
|
93
|
-
filesEdited: item.changeCounts?.Edit || 0,
|
|
94
|
-
filesDeleted: item.changeCounts?.Delete || 0,
|
|
95
|
-
isPR: 'false',
|
|
96
|
-
prId: 0,
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return rows;
|
|
1
|
+
// Runs in page context via js_evaluate step (executed by CDP Runtime.evaluate
|
|
2
|
+
// to bypass ADO's strict-dynamic CSP — see chrome-adapter.ts evaluateViaCdp).
|
|
3
|
+
//
|
|
4
|
+
// Fetches ADO Git commits directly via the REST API. This works because:
|
|
5
|
+
// 1. Runtime.evaluate bypasses CSP (runs at debugger level, like DevTools console)
|
|
6
|
+
// 2. fetch() is same-origin and uses the page's session cookies for auth
|
|
7
|
+
// 3. No MCAS proxy on dev.azure.com (unlike Outlook)
|
|
8
|
+
//
|
|
9
|
+
// Falls back to window.__cdpCapture if the direct API call fails.
|
|
10
|
+
// Requires cdp: true in the connector YAML.
|
|
11
|
+
//
|
|
12
|
+
// Template variables interpolated before execution:
|
|
13
|
+
// ${{ args.org }}, ${{ args.project }}, ${{ args.repo }}
|
|
14
|
+
// ${{ args.fromDate }}, ${{ args.toDate }}
|
|
15
|
+
// ${{ args.author | default("") }}
|
|
16
|
+
|
|
17
|
+
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
|
|
18
|
+
|
|
19
|
+
const org = '${{ args.org }}'.trim();
|
|
20
|
+
const project = '${{ args.project }}'.trim();
|
|
21
|
+
const repo = '${{ args.repo }}'.trim();
|
|
22
|
+
const fromDate = '${{ args.fromDate }}'.trim();
|
|
23
|
+
const toDate = '${{ args.toDate }}'.trim();
|
|
24
|
+
const authorFilter = '${{ args.author | default("") }}'.trim().toLowerCase();
|
|
25
|
+
|
|
26
|
+
// ── Fetch commits via ADO REST API ────────────────────────────────────
|
|
27
|
+
// Direct same-origin fetch with session cookies — avoids the problem where
|
|
28
|
+
// ADO embeds initial commit data in the HTML (no separate _apis/ XHR),
|
|
29
|
+
// making CDP Fetch.enable interception unable to capture commit data.
|
|
30
|
+
const allItems = [];
|
|
31
|
+
try {
|
|
32
|
+
const apiUrl = `https://dev.azure.com/${encodeURIComponent(org)}/${encodeURIComponent(project)}`
|
|
33
|
+
+ `/_apis/git/repositories/${encodeURIComponent(repo)}/commits`
|
|
34
|
+
+ `?searchCriteria.fromDate=${fromDate}&searchCriteria.toDate=${toDate}`
|
|
35
|
+
+ `&$top=1000&api-version=7.1`;
|
|
36
|
+
const resp = await fetch(apiUrl);
|
|
37
|
+
if (!resp.ok) throw new Error('HTTP ' + resp.status);
|
|
38
|
+
const data = await resp.json();
|
|
39
|
+
for (const item of (data.value || [])) {
|
|
40
|
+
if (item.commitId) allItems.push(item);
|
|
41
|
+
}
|
|
42
|
+
} catch (fetchErr) {
|
|
43
|
+
// Direct fetch failed — fall back to CDP-captured data (window.__cdpCapture
|
|
44
|
+
// is populated by chrome-adapter.ts Fetch.enable when _apis/ XHRs occur).
|
|
45
|
+
for (let i = 0; i < 30; i++) {
|
|
46
|
+
await sleep(1000);
|
|
47
|
+
if (window.__cdpCapture && window.__cdpCapture.length > 0) break;
|
|
48
|
+
}
|
|
49
|
+
for (const raw of (window.__cdpCapture || [])) {
|
|
50
|
+
try {
|
|
51
|
+
const data = JSON.parse(raw);
|
|
52
|
+
const items = data.value || data.results || [];
|
|
53
|
+
if (Array.isArray(items)) {
|
|
54
|
+
for (const item of items) {
|
|
55
|
+
if (item.commitId) allItems.push(item);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} catch (_) {}
|
|
59
|
+
}
|
|
60
|
+
window.__cdpCapture = [];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ── Deduplicate and filter commits ────────────────────────────────────
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
const rows = [];
|
|
66
|
+
|
|
67
|
+
for (const item of allItems) {
|
|
68
|
+
if (seen.has(item.commitId)) continue;
|
|
69
|
+
seen.add(item.commitId);
|
|
70
|
+
|
|
71
|
+
const authorName = item.author?.name || item.committer?.name || '';
|
|
72
|
+
const authorEmail = item.author?.email || item.committer?.email || '';
|
|
73
|
+
const dateRaw = item.author?.date || item.committer?.date || '';
|
|
74
|
+
const date = dateRaw.slice(0, 10);
|
|
75
|
+
|
|
76
|
+
// Filter by date range
|
|
77
|
+
if (date && (date < fromDate || date > toDate)) continue;
|
|
78
|
+
|
|
79
|
+
// Filter by author if provided
|
|
80
|
+
if (authorFilter) {
|
|
81
|
+
const nameMatch = authorName.toLowerCase().includes(authorFilter);
|
|
82
|
+
const emailMatch = authorEmail.toLowerCase().includes(authorFilter);
|
|
83
|
+
if (!nameMatch && !emailMatch) continue;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
rows.push({
|
|
87
|
+
commitId: item.commitId,
|
|
88
|
+
authorName,
|
|
89
|
+
authorEmail,
|
|
90
|
+
date,
|
|
91
|
+
message: (item.comment || '').split('\n')[0].slice(0, 200),
|
|
92
|
+
filesAdded: item.changeCounts?.Add || 0,
|
|
93
|
+
filesEdited: item.changeCounts?.Edit || 0,
|
|
94
|
+
filesDeleted: item.changeCounts?.Delete || 0,
|
|
95
|
+
isPR: 'false',
|
|
96
|
+
prId: 0,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return rows;
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
site: ado
|
|
2
|
-
name: git-commits
|
|
3
|
-
version: "1.0"
|
|
4
|
-
description: "Azure DevOps Git commits and PRs across all branches for a date range"
|
|
5
|
-
access: read
|
|
6
|
-
cdp: true
|
|
7
|
-
|
|
8
|
-
domains:
|
|
9
|
-
- "dev.azure.com"
|
|
10
|
-
capabilities:
|
|
11
|
-
- navigate
|
|
12
|
-
- js_evaluate
|
|
13
|
-
|
|
14
|
-
args:
|
|
15
|
-
- name: org
|
|
16
|
-
type: string
|
|
17
|
-
required: true
|
|
18
|
-
help: "ADO organization name (e.g. 'daimler-mic')"
|
|
19
|
-
- name: project
|
|
20
|
-
type: string
|
|
21
|
-
required: true
|
|
22
|
-
help: "ADO project name (e.g. 'mic-dns')"
|
|
23
|
-
- name: repo
|
|
24
|
-
type: string
|
|
25
|
-
required: true
|
|
26
|
-
help: "Repository name (e.g. 'mic-dns-api')"
|
|
27
|
-
- name: fromDate
|
|
28
|
-
type: string
|
|
29
|
-
required: true
|
|
30
|
-
help: "Start date in YYYY-MM-DD format"
|
|
31
|
-
pattern: "^\\d{4}-\\d{2}-\\d{2}$"
|
|
32
|
-
- name: toDate
|
|
33
|
-
type: string
|
|
34
|
-
required: true
|
|
35
|
-
help: "End date in YYYY-MM-DD format"
|
|
36
|
-
pattern: "^\\d{4}-\\d{2}-\\d{2}$"
|
|
37
|
-
- name: author
|
|
38
|
-
type: string
|
|
39
|
-
required: false
|
|
40
|
-
help: "Filter by pusher name or email (case-insensitive substring match)"
|
|
41
|
-
|
|
42
|
-
columns:
|
|
43
|
-
- name: commitId
|
|
44
|
-
type: string
|
|
45
|
-
- name: authorName
|
|
46
|
-
type: string
|
|
47
|
-
- name: authorEmail
|
|
48
|
-
type: string
|
|
49
|
-
- name: date
|
|
50
|
-
type: string
|
|
51
|
-
- name: message
|
|
52
|
-
type: string
|
|
53
|
-
- name: filesAdded
|
|
54
|
-
type: number
|
|
55
|
-
- name: filesEdited
|
|
56
|
-
type: number
|
|
57
|
-
- name: filesDeleted
|
|
58
|
-
type: number
|
|
59
|
-
- name: isPR
|
|
60
|
-
type: string
|
|
61
|
-
- name: prId
|
|
62
|
-
type: number
|
|
63
|
-
|
|
64
|
-
pipeline:
|
|
65
|
-
- step: navigate
|
|
66
|
-
url: "https://dev.azure.com/${{ args.org }}/${{ args.project }}/_git/${{ args.repo }}/commits"
|
|
67
|
-
- step: wait
|
|
68
|
-
selector: "body"
|
|
69
|
-
timeout: 30000
|
|
70
|
-
- step: js_evaluate
|
|
71
|
-
file: ado-git-commits.eval.js
|
|
1
|
+
site: ado
|
|
2
|
+
name: git-commits
|
|
3
|
+
version: "1.0"
|
|
4
|
+
description: "Azure DevOps Git commits and PRs across all branches for a date range"
|
|
5
|
+
access: read
|
|
6
|
+
cdp: true
|
|
7
|
+
|
|
8
|
+
domains:
|
|
9
|
+
- "dev.azure.com"
|
|
10
|
+
capabilities:
|
|
11
|
+
- navigate
|
|
12
|
+
- js_evaluate
|
|
13
|
+
|
|
14
|
+
args:
|
|
15
|
+
- name: org
|
|
16
|
+
type: string
|
|
17
|
+
required: true
|
|
18
|
+
help: "ADO organization name (e.g. 'daimler-mic')"
|
|
19
|
+
- name: project
|
|
20
|
+
type: string
|
|
21
|
+
required: true
|
|
22
|
+
help: "ADO project name (e.g. 'mic-dns')"
|
|
23
|
+
- name: repo
|
|
24
|
+
type: string
|
|
25
|
+
required: true
|
|
26
|
+
help: "Repository name (e.g. 'mic-dns-api')"
|
|
27
|
+
- name: fromDate
|
|
28
|
+
type: string
|
|
29
|
+
required: true
|
|
30
|
+
help: "Start date in YYYY-MM-DD format"
|
|
31
|
+
pattern: "^\\d{4}-\\d{2}-\\d{2}$"
|
|
32
|
+
- name: toDate
|
|
33
|
+
type: string
|
|
34
|
+
required: true
|
|
35
|
+
help: "End date in YYYY-MM-DD format"
|
|
36
|
+
pattern: "^\\d{4}-\\d{2}-\\d{2}$"
|
|
37
|
+
- name: author
|
|
38
|
+
type: string
|
|
39
|
+
required: false
|
|
40
|
+
help: "Filter by pusher name or email (case-insensitive substring match)"
|
|
41
|
+
|
|
42
|
+
columns:
|
|
43
|
+
- name: commitId
|
|
44
|
+
type: string
|
|
45
|
+
- name: authorName
|
|
46
|
+
type: string
|
|
47
|
+
- name: authorEmail
|
|
48
|
+
type: string
|
|
49
|
+
- name: date
|
|
50
|
+
type: string
|
|
51
|
+
- name: message
|
|
52
|
+
type: string
|
|
53
|
+
- name: filesAdded
|
|
54
|
+
type: number
|
|
55
|
+
- name: filesEdited
|
|
56
|
+
type: number
|
|
57
|
+
- name: filesDeleted
|
|
58
|
+
type: number
|
|
59
|
+
- name: isPR
|
|
60
|
+
type: string
|
|
61
|
+
- name: prId
|
|
62
|
+
type: number
|
|
63
|
+
|
|
64
|
+
pipeline:
|
|
65
|
+
- step: navigate
|
|
66
|
+
url: "https://dev.azure.com/${{ args.org }}/${{ args.project }}/_git/${{ args.repo }}/commits"
|
|
67
|
+
- step: wait
|
|
68
|
+
selector: "body"
|
|
69
|
+
timeout: 30000
|
|
70
|
+
- step: js_evaluate
|
|
71
|
+
file: ado-git-commits.eval.js
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
site: gcs
|
|
2
|
-
name: kb-content
|
|
3
|
-
version: "2.0"
|
|
4
|
-
description: "Retrieve a single GCS Knowledge Base page as Markdown"
|
|
5
|
-
access: read
|
|
6
|
-
|
|
7
|
-
domains:
|
|
8
|
-
- "pages.i.mercedes-benz.com"
|
|
9
|
-
capabilities:
|
|
10
|
-
- navigate
|
|
11
|
-
- dom_read
|
|
12
|
-
|
|
13
|
-
args:
|
|
14
|
-
- name: path
|
|
15
|
-
type: string
|
|
16
|
-
required: true
|
|
17
|
-
help: "Page path — full (gcs/KB/docs/general-security/edr/) or short (general-security/edr/)"
|
|
18
|
-
pattern: "^(gcs/KB/docs/)?[a-zA-Z0-9_.][a-zA-Z0-9_./-]*$"
|
|
19
|
-
|
|
20
|
-
columns:
|
|
21
|
-
- name: title
|
|
22
|
-
type: string
|
|
23
|
-
- name: path
|
|
24
|
-
type: string
|
|
25
|
-
- name: author
|
|
26
|
-
type: string
|
|
27
|
-
- name: lastUpdated
|
|
28
|
-
type: string
|
|
29
|
-
- name: content
|
|
30
|
-
type: string
|
|
31
|
-
|
|
32
|
-
pipeline:
|
|
33
|
-
- step: set
|
|
34
|
-
name: normalizedPath
|
|
35
|
-
value: "${{ args.path | replace('gcs/KB/docs/', '') }}"
|
|
36
|
-
- step: navigate
|
|
37
|
-
url: "https://pages.i.mercedes-benz.com/gcs/KB/docs/${{ vars.normalizedPath }}"
|
|
38
|
-
- step: wait
|
|
39
|
-
selector: "article"
|
|
40
|
-
timeout: 30000
|
|
41
|
-
- step: extract
|
|
42
|
-
selector: "article"
|
|
43
|
-
fields:
|
|
44
|
-
title: "h1"
|
|
45
|
-
authorPill: "span.inline-flex"
|
|
46
|
-
- step: extract_html
|
|
47
|
-
selector: "article"
|
|
48
|
-
as: rawHtml
|
|
49
|
-
- step: transform
|
|
50
|
-
type: html_to_markdown
|
|
51
|
-
input: rawHtml
|
|
52
|
-
as: content
|
|
53
|
-
- step: transform
|
|
54
|
-
type: split_metadata
|
|
55
|
-
input: authorPill
|
|
56
|
-
as: meta
|
|
57
|
-
options:
|
|
58
|
-
delimiter: "|"
|
|
59
|
-
fields:
|
|
60
|
-
- author
|
|
61
|
-
- lastUpdated
|
|
1
|
+
site: gcs
|
|
2
|
+
name: kb-content
|
|
3
|
+
version: "2.0"
|
|
4
|
+
description: "Retrieve a single GCS Knowledge Base page as Markdown"
|
|
5
|
+
access: read
|
|
6
|
+
|
|
7
|
+
domains:
|
|
8
|
+
- "pages.i.mercedes-benz.com"
|
|
9
|
+
capabilities:
|
|
10
|
+
- navigate
|
|
11
|
+
- dom_read
|
|
12
|
+
|
|
13
|
+
args:
|
|
14
|
+
- name: path
|
|
15
|
+
type: string
|
|
16
|
+
required: true
|
|
17
|
+
help: "Page path — full (gcs/KB/docs/general-security/edr/) or short (general-security/edr/)"
|
|
18
|
+
pattern: "^(gcs/KB/docs/)?[a-zA-Z0-9_.][a-zA-Z0-9_./-]*$"
|
|
19
|
+
|
|
20
|
+
columns:
|
|
21
|
+
- name: title
|
|
22
|
+
type: string
|
|
23
|
+
- name: path
|
|
24
|
+
type: string
|
|
25
|
+
- name: author
|
|
26
|
+
type: string
|
|
27
|
+
- name: lastUpdated
|
|
28
|
+
type: string
|
|
29
|
+
- name: content
|
|
30
|
+
type: string
|
|
31
|
+
|
|
32
|
+
pipeline:
|
|
33
|
+
- step: set
|
|
34
|
+
name: normalizedPath
|
|
35
|
+
value: "${{ args.path | replace('gcs/KB/docs/', '') }}"
|
|
36
|
+
- step: navigate
|
|
37
|
+
url: "https://pages.i.mercedes-benz.com/gcs/KB/docs/${{ vars.normalizedPath }}"
|
|
38
|
+
- step: wait
|
|
39
|
+
selector: "article"
|
|
40
|
+
timeout: 30000
|
|
41
|
+
- step: extract
|
|
42
|
+
selector: "article"
|
|
43
|
+
fields:
|
|
44
|
+
title: "h1"
|
|
45
|
+
authorPill: "span.inline-flex"
|
|
46
|
+
- step: extract_html
|
|
47
|
+
selector: "article"
|
|
48
|
+
as: rawHtml
|
|
49
|
+
- step: transform
|
|
50
|
+
type: html_to_markdown
|
|
51
|
+
input: rawHtml
|
|
52
|
+
as: content
|
|
53
|
+
- step: transform
|
|
54
|
+
type: split_metadata
|
|
55
|
+
input: authorPill
|
|
56
|
+
as: meta
|
|
57
|
+
options:
|
|
58
|
+
delimiter: "|"
|
|
59
|
+
fields:
|
|
60
|
+
- author
|
|
61
|
+
- lastUpdated
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
site: gcs
|
|
2
|
-
name: kb-pages
|
|
3
|
-
version: "2.0"
|
|
4
|
-
description: "Page index of the GCS Knowledge Base — titles, URLs, sections, and hierarchy"
|
|
5
|
-
access: read
|
|
6
|
-
|
|
7
|
-
domains:
|
|
8
|
-
- "pages.i.mercedes-benz.com"
|
|
9
|
-
capabilities:
|
|
10
|
-
- navigate
|
|
11
|
-
- dom_read
|
|
12
|
-
- dom_write
|
|
13
|
-
|
|
14
|
-
columns:
|
|
15
|
-
- name: title
|
|
16
|
-
type: string
|
|
17
|
-
- name: url
|
|
18
|
-
type: string
|
|
19
|
-
- name: section
|
|
20
|
-
type: string
|
|
21
|
-
- name: path
|
|
22
|
-
type: string
|
|
23
|
-
- name: depth
|
|
24
|
-
type: number
|
|
25
|
-
|
|
26
|
-
pipeline:
|
|
27
|
-
- step: navigate
|
|
28
|
-
url: "https://pages.i.mercedes-benz.com/gcs/KB/docs/main/"
|
|
29
|
-
- step: wait
|
|
30
|
-
selector: "aside"
|
|
31
|
-
timeout: 30000
|
|
32
|
-
- step: click_all
|
|
33
|
-
selector: "aside button[aria-expanded='false']"
|
|
34
|
-
pause: 200
|
|
35
|
-
maxRounds: 10
|
|
36
|
-
settle: 300
|
|
37
|
-
- step: extract_tree
|
|
38
|
-
root: "aside > *:nth-child(2)"
|
|
39
|
-
group:
|
|
40
|
-
match: "div:has(> button), section:has(> button)"
|
|
41
|
-
title: ":scope > button"
|
|
42
|
-
children: ":scope > div"
|
|
43
|
-
leaf:
|
|
44
|
-
match: "a[href^='/gcs/KB/']"
|
|
45
|
-
fields:
|
|
46
|
-
title: textContent
|
|
47
|
-
url: href
|
|
48
|
-
- step: map
|
|
49
|
-
fields:
|
|
50
|
-
title: "${{ row.title }}"
|
|
51
|
-
url: "${{ row.url | slice(1) }}"
|
|
52
|
-
section: "${{ row.section }}"
|
|
53
|
-
path: "${{ row.path }}"
|
|
54
|
-
depth: "${{ row.depth | number }}"
|
|
1
|
+
site: gcs
|
|
2
|
+
name: kb-pages
|
|
3
|
+
version: "2.0"
|
|
4
|
+
description: "Page index of the GCS Knowledge Base — titles, URLs, sections, and hierarchy"
|
|
5
|
+
access: read
|
|
6
|
+
|
|
7
|
+
domains:
|
|
8
|
+
- "pages.i.mercedes-benz.com"
|
|
9
|
+
capabilities:
|
|
10
|
+
- navigate
|
|
11
|
+
- dom_read
|
|
12
|
+
- dom_write
|
|
13
|
+
|
|
14
|
+
columns:
|
|
15
|
+
- name: title
|
|
16
|
+
type: string
|
|
17
|
+
- name: url
|
|
18
|
+
type: string
|
|
19
|
+
- name: section
|
|
20
|
+
type: string
|
|
21
|
+
- name: path
|
|
22
|
+
type: string
|
|
23
|
+
- name: depth
|
|
24
|
+
type: number
|
|
25
|
+
|
|
26
|
+
pipeline:
|
|
27
|
+
- step: navigate
|
|
28
|
+
url: "https://pages.i.mercedes-benz.com/gcs/KB/docs/main/"
|
|
29
|
+
- step: wait
|
|
30
|
+
selector: "aside"
|
|
31
|
+
timeout: 30000
|
|
32
|
+
- step: click_all
|
|
33
|
+
selector: "aside button[aria-expanded='false']"
|
|
34
|
+
pause: 200
|
|
35
|
+
maxRounds: 10
|
|
36
|
+
settle: 300
|
|
37
|
+
- step: extract_tree
|
|
38
|
+
root: "aside > *:nth-child(2)"
|
|
39
|
+
group:
|
|
40
|
+
match: "div:has(> button), section:has(> button)"
|
|
41
|
+
title: ":scope > button"
|
|
42
|
+
children: ":scope > div"
|
|
43
|
+
leaf:
|
|
44
|
+
match: "a[href^='/gcs/KB/']"
|
|
45
|
+
fields:
|
|
46
|
+
title: textContent
|
|
47
|
+
url: href
|
|
48
|
+
- step: map
|
|
49
|
+
fields:
|
|
50
|
+
title: "${{ row.title }}"
|
|
51
|
+
url: "${{ row.url | slice(1) }}"
|
|
52
|
+
section: "${{ row.section }}"
|
|
53
|
+
path: "${{ row.path }}"
|
|
54
|
+
depth: "${{ row.depth | number }}"
|