@commandgarden/cli 2.14.0 → 2.14.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.
Files changed (69) hide show
  1. package/dist/main.js +248 -278
  2. package/node_modules/@commandgarden/app/dist/client/assets/{Slides-DWQmJfkp.js → Slides-DMIm_HgI.js} +5 -5
  3. package/node_modules/@commandgarden/app/dist/client/assets/{index-C8yqRQk-.js → index-CupEN1w-.js} +53 -53
  4. package/node_modules/@commandgarden/app/dist/client/index.html +18 -18
  5. package/node_modules/@commandgarden/app/dist/server/daemon-client.test.js +47 -0
  6. package/node_modules/@commandgarden/app/dist/server/main.js +1 -1
  7. package/node_modules/@commandgarden/app/dist/server/routes/audit.js +16 -27
  8. package/node_modules/@commandgarden/app/dist/server/routes/config.js +2 -8
  9. package/node_modules/@commandgarden/app/dist/server/routes/connectors.js +26 -37
  10. package/node_modules/@commandgarden/app/dist/server/routes/routes.test.js +137 -0
  11. package/node_modules/@commandgarden/app/dist/server/routes/run.js +4 -3
  12. package/node_modules/@commandgarden/app/dist/server/routes/status.js +1 -2
  13. package/node_modules/@commandgarden/app/dist/server/store.js +53 -53
  14. package/node_modules/@commandgarden/app/dist/server/store.test.js +59 -0
  15. package/node_modules/@commandgarden/app/package.json +42 -42
  16. package/node_modules/@commandgarden/chrome/dist/content-script.js.map +1 -1
  17. package/node_modules/@commandgarden/chrome/dist/fetch-interceptor.js +44 -0
  18. package/node_modules/@commandgarden/chrome/dist/manifest.json +26 -26
  19. package/node_modules/@commandgarden/chrome/dist/popup.html +218 -218
  20. package/node_modules/@commandgarden/chrome/dist/popup.js.map +1 -1
  21. package/node_modules/@commandgarden/chrome/dist/service-worker.js +40 -40
  22. package/node_modules/@commandgarden/chrome/dist/service-worker.js.map +2 -2
  23. package/node_modules/@commandgarden/chrome/package.json +26 -26
  24. package/node_modules/@commandgarden/daemon/connectors/ado-git-commits.eval.js +100 -100
  25. package/node_modules/@commandgarden/daemon/connectors/ado-git-commits.yaml +71 -71
  26. package/node_modules/@commandgarden/daemon/connectors/gcs-kb-content.yaml +61 -61
  27. package/node_modules/@commandgarden/daemon/connectors/gcs-kb-pages.yaml +54 -54
  28. package/node_modules/@commandgarden/daemon/connectors/jira-my-tickets.eval.js +115 -115
  29. package/node_modules/@commandgarden/daemon/connectors/jira-my-tickets.yaml +54 -54
  30. package/node_modules/@commandgarden/daemon/connectors/lib/msal-token.js +20 -20
  31. package/node_modules/@commandgarden/daemon/connectors/outlook-my-meetings.eval.js +204 -204
  32. package/node_modules/@commandgarden/daemon/connectors/outlook-my-meetings.yaml +42 -42
  33. package/node_modules/@commandgarden/daemon/connectors/saba-pending-training.eval.js +94 -94
  34. package/node_modules/@commandgarden/daemon/connectors/saba-pending-training.yaml +34 -34
  35. package/node_modules/@commandgarden/daemon/connectors/socket-security-news.yaml +63 -63
  36. package/node_modules/@commandgarden/daemon/connectors/teams-room-availability.eval.js +437 -437
  37. package/node_modules/@commandgarden/daemon/connectors/teams-room-availability.yaml +53 -53
  38. package/node_modules/@commandgarden/daemon/connectors/teams-rooms-availability.eval.js +547 -547
  39. package/node_modules/@commandgarden/daemon/connectors/teams-rooms-availability.yaml +48 -48
  40. package/node_modules/@commandgarden/daemon/connectors/timetracking-projects.eval.js +52 -52
  41. package/node_modules/@commandgarden/daemon/connectors/timetracking-projects.yaml +42 -42
  42. package/node_modules/@commandgarden/daemon/connectors/timetracking-report.eval.js +81 -81
  43. package/node_modules/@commandgarden/daemon/connectors/timetracking-report.yaml +52 -52
  44. package/node_modules/@commandgarden/daemon/connectors/tldrsec-newsletter.eval.js +27 -27
  45. package/node_modules/@commandgarden/daemon/connectors/tldrsec-newsletter.yaml +38 -38
  46. package/node_modules/@commandgarden/daemon/connectors/tokenmaster-clients-list.yaml +55 -55
  47. package/node_modules/@commandgarden/daemon/dist/audit-store.js +8 -8
  48. package/node_modules/@commandgarden/daemon/dist/auth.d.ts +0 -1
  49. package/node_modules/@commandgarden/daemon/dist/auth.d.ts.map +1 -1
  50. package/node_modules/@commandgarden/daemon/dist/auth.js +0 -10
  51. package/node_modules/@commandgarden/daemon/dist/auth.js.map +1 -1
  52. package/node_modules/@commandgarden/daemon/dist/cdp-client.d.ts +24 -0
  53. package/node_modules/@commandgarden/daemon/dist/cdp-client.d.ts.map +1 -0
  54. package/node_modules/@commandgarden/daemon/dist/cdp-client.js +150 -0
  55. package/node_modules/@commandgarden/daemon/dist/cdp-client.js.map +1 -0
  56. package/node_modules/@commandgarden/daemon/dist/main.js +5 -12
  57. package/node_modules/@commandgarden/daemon/dist/main.js.map +1 -1
  58. package/node_modules/@commandgarden/daemon/dist/server.d.ts.map +1 -1
  59. package/node_modules/@commandgarden/daemon/dist/server.js +0 -10
  60. package/node_modules/@commandgarden/daemon/dist/server.js.map +1 -1
  61. package/node_modules/@commandgarden/daemon/package.json +32 -32
  62. package/node_modules/@commandgarden/shared/dist/daemon-client.d.ts +1 -5
  63. package/node_modules/@commandgarden/shared/dist/daemon-client.d.ts.map +1 -1
  64. package/node_modules/@commandgarden/shared/dist/daemon-client.js +14 -32
  65. package/node_modules/@commandgarden/shared/dist/daemon-client.js.map +1 -1
  66. package/node_modules/@commandgarden/shared/package.json +32 -32
  67. package/package.json +58 -58
  68. package/node_modules/@commandgarden/app/dist/server/routes/utils.d.ts +0 -2
  69. 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 }}"