@nuvlore/extension-bds 0.1.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 (109) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +3 -0
  3. package/agents/bds-airflow-job-status-readonly.yaml +123 -0
  4. package/agents/bds-disk-investigator.yaml +112 -0
  5. package/agents/bds-inventory-readonly.yaml +60 -0
  6. package/agents/bds-oncall-reporter.yaml +113 -0
  7. package/agents/bds-prism-service-proxy-timeout-readonly.yaml +105 -0
  8. package/agents/bds-scylla-tenant-bucket-readonly.yaml +104 -0
  9. package/agents/bds-tenant-data-operation-log-readonly.yaml +98 -0
  10. package/agents/bds-yarn-app-health-readonly.yaml +114 -0
  11. package/agents/pharos-alert-investigator.yaml +81 -0
  12. package/package.json +60 -0
  13. package/skills/bds-airflow-job-status-investigation/SKILL.md +104 -0
  14. package/skills/bds-airflow-job-status-investigation/references/airflow-access-runbook.md +35 -0
  15. package/skills/bds-airflow-job-status-investigation/references/airflow-bas-dr-runbook.md +42 -0
  16. package/skills/bds-airflow-job-status-investigation/references/airflow-copy-and-migration-runbook.md +63 -0
  17. package/skills/bds-airflow-job-status-investigation/references/airflow-job-status-runbook.md +15 -0
  18. package/skills/bds-airflow-job-status-investigation/references/airflow-output-runbook.md +28 -0
  19. package/skills/bds-airflow-job-status-investigation/references/airflow-snapshot-runbook.md +38 -0
  20. package/skills/bds-disk-io-alert-investigation/SKILL.md +116 -0
  21. package/skills/bds-hadoop-review/SKILL.md +66 -0
  22. package/skills/bds-machine-inventory/SKILL.md +48 -0
  23. package/skills/bds-oncall-followup/SKILL.md +71 -0
  24. package/skills/bds-oncall-followup/references/oncall-followup-runbook.md +58 -0
  25. package/skills/bds-prism-service-proxy-timeout-investigation/SKILL.md +73 -0
  26. package/skills/bds-prism-service-proxy-timeout-investigation/references/service-proxy-timeout-runbook.md +48 -0
  27. package/skills/bds-scylla-tenant-bucket-investigation/SKILL.md +73 -0
  28. package/skills/bds-scylla-tenant-bucket-investigation/references/tenant-bucket-runbook.md +91 -0
  29. package/skills/bds-tenant-data-operation-log-investigation/SKILL.md +89 -0
  30. package/skills/bds-yarn-app-health-investigation/SKILL.md +77 -0
  31. package/skills/bds-yarn-app-health-investigation/references/yarn-app-health-runbook.md +53 -0
  32. package/skills/pharos-alert-investigation/SKILL.md +80 -0
  33. package/src/bds-atomic-log-tools.mjs +300 -0
  34. package/src/bds-team-membership-claude-output.mjs +36 -0
  35. package/src/bds-team-membership-quality.mjs +90 -0
  36. package/tools/bds_airflow_dag_log_read.mjs +24 -0
  37. package/tools/bds_airflow_job_status_command_pack.mjs +587 -0
  38. package/tools/bds_bas_log_read.mjs +23 -0
  39. package/tools/bds_bdm_httpd_log_read.mjs +24 -0
  40. package/tools/bds_chef_client_log_read.mjs +23 -0
  41. package/tools/bds_dashboard_links.mjs +178 -0
  42. package/tools/bds_dashboard_query_knowledge.mjs +258 -0
  43. package/tools/bds_dashboard_query_read.mjs +120 -0
  44. package/tools/bds_disk_io_alert_command_pack.mjs +287 -0
  45. package/tools/bds_environment_host_lookup.mjs +741 -0
  46. package/tools/bds_hdfs_datanode_log_read.mjs +23 -0
  47. package/tools/bds_hdfs_journalnode_log_read.mjs +23 -0
  48. package/tools/bds_hdfs_namenode_log_read.mjs +23 -0
  49. package/tools/bds_hdfs_path_knowledge.mjs +324 -0
  50. package/tools/bds_information_source_knowledge.mjs +356 -0
  51. package/tools/bds_kms_log_read.mjs +23 -0
  52. package/tools/bds_log_path_knowledge.mjs +267 -0
  53. package/tools/bds_machine_inventory.mjs +434 -0
  54. package/tools/bds_mapreduce_historyserver_log_read.mjs +23 -0
  55. package/tools/bds_migration_service_operation_command_pack.mjs +233 -0
  56. package/tools/bds_oncall_followup_payload_draft.mjs +285 -0
  57. package/tools/bds_pharos_query_pack.mjs +218 -0
  58. package/tools/bds_portal_operation_knowledge.mjs +212 -0
  59. package/tools/bds_prism_clone_status_links.mjs +129 -0
  60. package/tools/bds_prism_service_proxy_timeout_query_pack.mjs +224 -0
  61. package/tools/bds_public_cloud_pod_log_read.mjs +18 -0
  62. package/tools/bds_scylla_tenant_bucket_command_pack.mjs +323 -0
  63. package/tools/bds_service_proxy_log_read.mjs +23 -0
  64. package/tools/bds_spark_historyserver_log_read.mjs +32 -0
  65. package/tools/bds_spas_mt_log_read.mjs +23 -0
  66. package/tools/bds_tenant_data_operation_log_command_pack.mjs +321 -0
  67. package/tools/bds_yarn_app_health_command_pack.mjs +529 -0
  68. package/tools/bds_yarn_nodemanager_log_read.mjs +23 -0
  69. package/tools/bds_yarn_resourcemanager_log_read.mjs +23 -0
  70. package/tools/bds_zookeeper_log_read.mjs +23 -0
  71. package/tools/confluence_handoff_page_draft.mjs +173 -0
  72. package/vendor/dashboard/src/grafana-dashboard-query.mjs +61 -0
  73. package/vendor/extension-read-only-toolkit/LICENSE +202 -0
  74. package/vendor/extension-read-only-toolkit/README.md +29 -0
  75. package/vendor/extension-read-only-toolkit/package.json +46 -0
  76. package/vendor/extension-read-only-toolkit/src/devops-data-paths.mjs +222 -0
  77. package/vendor/extension-read-only-toolkit/src/devops-diagnostics.mjs +440 -0
  78. package/vendor/extension-read-only-toolkit/src/enterprise-api-read.mjs +180 -0
  79. package/vendor/extension-read-only-toolkit/src/read-only-command-pack.mjs +1 -0
  80. package/vendor/extension-read-only-toolkit/src/read-only-plan.mjs +45 -0
  81. package/vendor/extension-read-only-toolkit/src/read-only-shell-policy.d.mts +26 -0
  82. package/vendor/extension-read-only-toolkit/src/read-only-shell-policy.mjs +170 -0
  83. package/vendor/extension-workday-infra-access/LICENSE +202 -0
  84. package/vendor/extension-workday-infra-access/README.md +3 -0
  85. package/vendor/extension-workday-infra-access/agents/workday-infra-access-readonly.yaml +183 -0
  86. package/vendor/extension-workday-infra-access/package.json +49 -0
  87. package/vendor/extension-workday-infra-access/skills/workday-infra-access/SKILL.md +102 -0
  88. package/vendor/extension-workday-infra-access/skills/workday-infra-access/references/access-boundary-runbook.md +43 -0
  89. package/vendor/extension-workday-infra-access/skills/workday-infra-access/references/access-runbook.md +15 -0
  90. package/vendor/extension-workday-infra-access/skills/workday-infra-access/references/access-scylla-cloud-runbook.md +39 -0
  91. package/vendor/extension-workday-infra-access/skills/workday-infra-access/references/access-spc-argo-runbook.md +99 -0
  92. package/vendor/extension-workday-infra-access/src/workday-access-profiles.mjs +194 -0
  93. package/vendor/extension-workday-infra-access/tools/aws_cust_federated_readonly_command_pack.mjs +234 -0
  94. package/vendor/extension-workday-infra-access/tools/gcp_readonly_command_pack.mjs +167 -0
  95. package/vendor/extension-workday-infra-access/tools/public_cloud_access_status.mjs +48 -0
  96. package/vendor/extension-workday-infra-access/tools/workday_boundary_login.mjs +460 -0
  97. package/vendor/extension-workday-infra-access/tools/workday_private_cloud_sudo_readonly_command.mjs +386 -0
  98. package/vendor/extension-workday-infra-access/tools/workday_public_cloud_environment_map.mjs +189 -0
  99. package/vendor/extension-workday-infra-access/tools/workday_public_cloud_kubernetes_read.mjs +297 -0
  100. package/vendor/extension-workday-infra-access/tools/workday_public_cloud_spc_login.mjs +505 -0
  101. package/vendor/extension-workday-infra-access/tools/workday_spc_argo_readonly_command_pack.mjs +215 -0
  102. package/vendor/extension-workday-infra-access/workflows/public-cloud-readonly-investigation.js +99 -0
  103. package/workflows/bds-airflow-job-status-investigation.js +168 -0
  104. package/workflows/bds-disk-io-alert-investigation.js +173 -0
  105. package/workflows/bds-oncall-followup.js +112 -0
  106. package/workflows/bds-prism-service-proxy-timeout-investigation.js +69 -0
  107. package/workflows/bds-scylla-tenant-bucket-investigation.js +139 -0
  108. package/workflows/bds-tenant-data-operation-log-investigation.js +189 -0
  109. package/workflows/bds-yarn-app-health-investigation.js +217 -0
@@ -0,0 +1,356 @@
1
+ export const description = "Return read-only BDS information-source collection guidance across logs, dashboards, tickets, repos, incidents, and collaboration systems.";
2
+
3
+ import { z } from "zod";
4
+ import { defineReadOnlyTool, fail, ok } from "@nuvlore/extension-read-only-toolkit/devops-diagnostics";
5
+
6
+ export const BDS_INFORMATION_SOURCES = {
7
+ private_cloud_host_logs: {
8
+ purpose: "Private-cloud host and service log discovery through Boundary plus read-only sudo.",
9
+ tools: [
10
+ "workday_boundary_login",
11
+ "bds_environment_host_lookup",
12
+ "bds_log_path_knowledge",
13
+ "workday_private_cloud_sudo_readonly_command"
14
+ ],
15
+ examples: [
16
+ "bds_environment_host_lookup({ environment, cluster, roles })",
17
+ "bds_log_path_knowledge({ machineType: \"hdfs\" })",
18
+ "workday_private_cloud_sudo_readonly_command({ host, command: \"sudo tail -n 200 <path>\", humanApprovedSudoRead: true })"
19
+ ]
20
+ },
21
+ public_cloud_pod_logs: {
22
+ purpose: "Public-cloud Kubernetes pod, deployment, statefulset, and sidecar log collection.",
23
+ tools: [
24
+ "workday_public_cloud_spc_login",
25
+ "workday_spc_argo_readonly_command_pack",
26
+ "bds_log_path_knowledge"
27
+ ],
28
+ examples: [
29
+ "workday_public_cloud_spc_login({ action: \"login\", cluster })",
30
+ "kubectl logs -n <namespace> <pod> -c <container> --since=<window>",
31
+ "kubectl logs -n <namespace> <pod> -c <sidecar-container> --previous --since=<window>"
32
+ ]
33
+ },
34
+ hadoop_stack: {
35
+ purpose: "HDFS, YARN, Hadoop KMS, ZooKeeper, MapReduce history, Spark history, and application logs.",
36
+ tools: [
37
+ "bds_log_path_knowledge",
38
+ "bds_yarn_app_health_command_pack",
39
+ "workday_private_cloud_sudo_readonly_command"
40
+ ],
41
+ examples: [
42
+ "bds_log_path_knowledge({ machineType: \"hdfs\" })",
43
+ "bds_log_path_knowledge({ machineType: \"spark history server\" })",
44
+ "yarn logs -applicationId <applicationId>"
45
+ ]
46
+ },
47
+ airflow: {
48
+ purpose: "Airflow scheduler, webserver, worker, DAG run, task, retry, tenant clone, DR pull, finalizer, and tenant data operation log collection.",
49
+ tools: [
50
+ "bds_airflow_job_status_command_pack",
51
+ "bds_log_path_knowledge",
52
+ "workday_private_cloud_sudo_readonly_command"
53
+ ],
54
+ examples: [
55
+ "bds_airflow_job_status_command_pack({ dagId, taskId, runId })",
56
+ "bds_log_path_knowledge({ machineType: \"airflow dag\" })",
57
+ "bds_log_path_knowledge({ machineType: \"tenant clone\" })",
58
+ "tail -n 200 /data/workday-bds-airflow/logs/<dag_id>/<run_id>/<task_id>/<try_number>.log"
59
+ ]
60
+ },
61
+ bds_services: {
62
+ purpose: "BDM, BAS status/API/DB evidence, service proxy, migration service, and BDS portal operation context. Current tenant clone, DR, finalizer, and tenant data operation execution logs are Airflow/Kubernetes evidence, not Oozie workflow evidence.",
63
+ tools: [
64
+ "bds_log_path_knowledge",
65
+ "bds_tenant_data_operation_log_command_pack",
66
+ "bds_migration_service_operation_command_pack",
67
+ "bds_portal_operation_knowledge",
68
+ "bds_scylla_tenant_bucket_command_pack"
69
+ ],
70
+ examples: [
71
+ "bds_log_path_knowledge({ machineType: \"bdm\" })",
72
+ "bds_log_path_knowledge({ machineType: \"bas\" })",
73
+ "bds_log_path_knowledge({ machineType: \"tenant data operation\" })",
74
+ "bds_tenant_data_operation_log_command_pack({ tenantName, environmentName })"
75
+ ]
76
+ },
77
+ automation_runs: {
78
+ purpose: "SPAS-MT, Chef cookbook, and Ansible playbook logs from hosts, runners, or pods.",
79
+ tools: [
80
+ "bds_log_path_knowledge",
81
+ "workday_private_cloud_sudo_readonly_command",
82
+ "workday_public_cloud_spc_login"
83
+ ],
84
+ examples: [
85
+ "bds_log_path_knowledge({ machineType: \"spas-mt\" })",
86
+ "bds_log_path_knowledge({ machineType: \"chef cookbook\" })",
87
+ "bds_log_path_knowledge({ machineType: \"ansible playbook\" })"
88
+ ]
89
+ },
90
+ pharos: {
91
+ purpose: "Pharos service reads, searches, health, datasources, and BDS Pharos query packs.",
92
+ tools: [
93
+ "pharos_sso_read",
94
+ "pharos_sso_search",
95
+ "pharos_sso_health",
96
+ "pharos_sso_datasources",
97
+ "bds_pharos_query_pack"
98
+ ],
99
+ examples: [
100
+ "pharos_sso_search({ query })",
101
+ "bds_pharos_query_pack({ cluster, metric })"
102
+ ]
103
+ },
104
+ grafana_prometheus: {
105
+ purpose: "Grafana dashboard discovery, dashboard reads, and Prometheus-style metric query planning.",
106
+ tools: [
107
+ "dashboard_sso_discover",
108
+ "dashboard_sso_read",
109
+ "dashboard_sso_path",
110
+ "bds_dashboard_links",
111
+ "bds_dashboard_query_read",
112
+ "bds_dashboard_query_knowledge"
113
+ ],
114
+ examples: [
115
+ "bds_dashboard_links({ cluster })",
116
+ "bds_dashboard_query_read({ dashboardUrl, query })"
117
+ ]
118
+ },
119
+ slack: {
120
+ purpose: "Slack message, bot history, AI capability, and Okta sync status reads.",
121
+ tools: [
122
+ "slack_okta_search_messages",
123
+ "slack_okta_bot_history",
124
+ "slack_okta_ai_capabilities",
125
+ "slack_okta_sync_status"
126
+ ],
127
+ examples: [
128
+ "slack_okta_search_messages({ query })",
129
+ "slack_okta_bot_history({ channel, threadTs })"
130
+ ]
131
+ },
132
+ sana_meetings: {
133
+ purpose: "Sana meeting, transcript, summary, action-item, and related meeting context reads through the Workday Okta Sana access path.",
134
+ tools: [
135
+ "okta_sana_okta_read",
136
+ "okta_sana_ask",
137
+ "slack_okta_search_messages",
138
+ "confluence_sso_search",
139
+ "jira_sso_search"
140
+ ],
141
+ examples: [
142
+ "okta_sana_okta_read({ pathOrUrl })",
143
+ "okta_sana_ask({ question })",
144
+ "slack_okta_search_messages({ query: \"<meeting title or participant>\" })"
145
+ ]
146
+ },
147
+ confluence: {
148
+ purpose: "Confluence spaces, pages, content, and search reads for operational docs and handoffs.",
149
+ tools: [
150
+ "confluence_sso_search",
151
+ "confluence_sso_read",
152
+ "confluence_sso_content",
153
+ "confluence_sso_space_content",
154
+ "confluence_handoff_page_draft"
155
+ ],
156
+ examples: [
157
+ "confluence_sso_search({ query })",
158
+ "confluence_sso_content({ contentId })"
159
+ ]
160
+ },
161
+ jira: {
162
+ purpose: "Jira issue, project, version, search, and user metadata reads.",
163
+ tools: [
164
+ "jira_sso_search",
165
+ "jira_sso_issue",
166
+ "jira_sso_project",
167
+ "jira_sso_project_versions",
168
+ "jira_sso_user_assignable_search"
169
+ ],
170
+ examples: [
171
+ "jira_sso_search({ jql })",
172
+ "jira_sso_issue({ issueKey })"
173
+ ]
174
+ },
175
+ bitbucket: {
176
+ purpose: "Bitbucket repository, branch, commit, pull request, and project reads.",
177
+ tools: [
178
+ "bitbucket_sso_read",
179
+ "bitbucket_sso_repo",
180
+ "bitbucket_sso_repos",
181
+ "bitbucket_sso_commits",
182
+ "bitbucket_sso_pull_request",
183
+ "bitbucket_sso_pull_requests"
184
+ ],
185
+ examples: [
186
+ "bitbucket_sso_repo({ projectKey, repoSlug })",
187
+ "bitbucket_sso_pull_request({ projectKey, repoSlug, pullRequestId })"
188
+ ]
189
+ },
190
+ bamboo: {
191
+ purpose: "Bamboo plan, result, latest-result, plan-results, and RCA evidence reads.",
192
+ tools: [
193
+ "bamboo_sso_plan",
194
+ "bamboo_sso_result",
195
+ "bamboo_sso_latest_result",
196
+ "bamboo_sso_plan_results",
197
+ "bamboo_result_query_paths",
198
+ "bamboo_rca_evidence_read"
199
+ ],
200
+ examples: [
201
+ "bamboo_sso_result({ planKey, resultNumber })",
202
+ "bamboo_result_query_paths({ bambooUrl })"
203
+ ]
204
+ },
205
+ pagerduty: {
206
+ purpose: "PagerDuty incidents, incident detail, services, and on-call reads.",
207
+ tools: [
208
+ "pagerduty_sso_incidents",
209
+ "pagerduty_sso_incident",
210
+ "pagerduty_sso_services",
211
+ "pagerduty_sso_oncalls"
212
+ ],
213
+ examples: [
214
+ "pagerduty_sso_incidents({ query })",
215
+ "pagerduty_sso_oncalls({ scheduleOrEscalationPolicy })"
216
+ ]
217
+ },
218
+ toolcity: {
219
+ purpose: "ToolCity context should start from Workday SSO/Okta app access plus repository or documentation discovery until a dedicated ToolCity reader exists.",
220
+ tools: [
221
+ "workday_okta_login",
222
+ "repository_sso_read",
223
+ "repository_sso_search_gavc",
224
+ "confluence_sso_search"
225
+ ],
226
+ examples: [
227
+ "confluence_sso_search({ query: \"ToolCity <service or error>\" })",
228
+ "repository_sso_search_gavc({ query: \"toolcity\" })"
229
+ ]
230
+ }
231
+ };
232
+
233
+ export const BDS_INFORMATION_SOURCE_ALIASES = {
234
+ host: "private_cloud_host_logs",
235
+ host_logs: "private_cloud_host_logs",
236
+ private_cloud: "private_cloud_host_logs",
237
+ private_cloud_logs: "private_cloud_host_logs",
238
+ pod: "public_cloud_pod_logs",
239
+ pod_logs: "public_cloud_pod_logs",
240
+ pods: "public_cloud_pod_logs",
241
+ sidecar: "public_cloud_pod_logs",
242
+ side_car: "public_cloud_pod_logs",
243
+ public_cloud: "public_cloud_pod_logs",
244
+ public_cloud_logs: "public_cloud_pod_logs",
245
+ hadoop: "hadoop_stack",
246
+ hdfs: "hadoop_stack",
247
+ yarn: "hadoop_stack",
248
+ spark: "hadoop_stack",
249
+ spark_history_server: "hadoop_stack",
250
+ zookeeper: "hadoop_stack",
251
+ kms: "hadoop_stack",
252
+ airflow_dag: "airflow",
253
+ dag: "airflow",
254
+ tenant_data: "airflow",
255
+ tenant_data_operation: "airflow",
256
+ tenant_data_operations: "airflow",
257
+ tenant_clone: "airflow",
258
+ tenant_clone_dr: "airflow",
259
+ tenant_dr: "airflow",
260
+ dr_pull: "airflow",
261
+ finalizer: "airflow",
262
+ bdm: "bds_services",
263
+ bas: "bds_services",
264
+ service_proxy: "bds_services",
265
+ spas_mt: "automation_runs",
266
+ spasmt: "automation_runs",
267
+ chef: "automation_runs",
268
+ cookbook: "automation_runs",
269
+ chef_cookbook: "automation_runs",
270
+ ansible: "automation_runs",
271
+ playbook: "automation_runs",
272
+ ansible_playbook: "automation_runs",
273
+ grafana: "grafana_prometheus",
274
+ prometheus: "grafana_prometheus",
275
+ promethus: "grafana_prometheus",
276
+ dashboard: "grafana_prometheus",
277
+ confluence: "confluence",
278
+ conflucen: "confluence",
279
+ bitbucket: "bitbucket",
280
+ bamboo: "bamboo",
281
+ pagerduty: "pagerduty",
282
+ pager_duty: "pagerduty",
283
+ sana: "sana_meetings",
284
+ sana_meeting: "sana_meetings",
285
+ sana_meetings: "sana_meetings",
286
+ meetings: "sana_meetings",
287
+ meeting_logs: "sana_meetings",
288
+ transcript: "sana_meetings",
289
+ transcripts: "sana_meetings"
290
+ };
291
+
292
+ function normalizeText(value) {
293
+ return typeof value === "string" ? value.trim() : "";
294
+ }
295
+
296
+ function normalizeSource(value) {
297
+ return normalizeText(value).toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
298
+ }
299
+
300
+ export class BdsInformationSourceKnowledgeService {
301
+ constructor({ sources = BDS_INFORMATION_SOURCES, aliases = BDS_INFORMATION_SOURCE_ALIASES } = {}) {
302
+ this.sources = sources;
303
+ this.aliases = aliases;
304
+ }
305
+
306
+ resolveSource(value) {
307
+ const normalized = normalizeSource(value);
308
+ return this.aliases[normalized] ?? normalized;
309
+ }
310
+
311
+ invoke(input) {
312
+ const requestedSource = normalizeSource(input.source);
313
+ const resolvedSource = this.resolveSource(input.source);
314
+ const entries = resolvedSource ? { [resolvedSource]: this.sources[resolvedSource] ?? null } : this.sources;
315
+ return JSON.stringify({
316
+ source: requestedSource,
317
+ resolvedSource,
318
+ entries,
319
+ note: "This is a read-only collection catalog. It identifies existing read tools and safe inspection commands; it does not grant credentials or perform writes."
320
+ }, null, 2);
321
+ }
322
+ }
323
+
324
+ const defaultService = new BdsInformationSourceKnowledgeService();
325
+
326
+ export function bdsInformationSourceKnowledge(input) {
327
+ return defaultService.invoke(input);
328
+ }
329
+
330
+ export const __test = {
331
+ BDS_INFORMATION_SOURCES,
332
+ BDS_INFORMATION_SOURCE_ALIASES,
333
+ BdsInformationSourceKnowledgeService,
334
+ bdsInformationSourceKnowledge
335
+ };
336
+
337
+ const sharedTool = defineReadOnlyTool({
338
+ name: "bds_information_source_knowledge",
339
+ description: "Return read-only BDS information-source collection guidance across logs, dashboards, tickets, repos, incidents, and collaboration systems.",
340
+ inputSchema: {
341
+ source: z.string().trim().max(128).default("")
342
+ },
343
+ async handler(input) {
344
+ try { return ok(defaultService.invoke(input)); } catch (error) { return fail(error); }
345
+ }
346
+ });
347
+
348
+ export default {
349
+ name: sharedTool.name,
350
+ description,
351
+ inputSchema: sharedTool.inputSchema,
352
+ meta: sharedTool.meta,
353
+ annotations: sharedTool.annotations,
354
+ invoke: sharedTool.invoke,
355
+ handler: sharedTool.handler
356
+ };
@@ -0,0 +1,23 @@
1
+ export const description = "Read Hadoop KMS audit logs from a private-cloud KMS/admin host through the approved Boundary sudo read tool.";
2
+
3
+ import { createPrivateCloudLogReadTool, globPrivateLogSpec } from "../src/bds-atomic-log-tools.mjs";
4
+
5
+ const spec = globPrivateLogSpec({
6
+ toolName: "bds_kms_log_read",
7
+ description: "Read Hadoop KMS audit logs from a private-cloud KMS/admin host through the approved Boundary sudo read tool.",
8
+ glob: "/var/log/hadoop-kms/kms-audit.log"
9
+ });
10
+
11
+ export const __test = spec;
12
+
13
+ const sharedTool = createPrivateCloudLogReadTool(spec);
14
+
15
+ export default {
16
+ name: sharedTool.name,
17
+ description,
18
+ inputSchema: sharedTool.inputSchema,
19
+ meta: sharedTool.meta,
20
+ annotations: sharedTool.annotations,
21
+ invoke: sharedTool.invoke,
22
+ handler: sharedTool.handler
23
+ };
@@ -0,0 +1,267 @@
1
+ export const description = "Return static BDS server-type log path guidance for read-only host inspection planning.";
2
+
3
+ import { z } from "zod";
4
+ import { defineReadOnlyTool, fail, ok } from "@nuvlore/extension-read-only-toolkit/devops-diagnostics";
5
+
6
+ export const BDS_LOG_PATHS = {
7
+ bdm: [
8
+ "kcsb logs deploy/bdm -c bdm --since=<window>",
9
+ "kcsb logs statefulset/bdm -c bdm --since=<window>",
10
+ "kcsb logs <bdm-pod> -c bdm --since=<window>",
11
+ "/var/log/httpd/access.log",
12
+ "/var/log/httpd/error.log"
13
+ ],
14
+ bas: [
15
+ "kcsb logs deploy/bas -c bas --since=<window>",
16
+ "kcsb logs <bas-pod> -c bas --since=<window>",
17
+ "/data/workday-bas/logs/bas.log"
18
+ ],
19
+ kms: ["/var/log/hadoop-kms/kms-audit.log", "/var/log/hadoop-kms/*.log"],
20
+ resource_manager: [
21
+ "/var/log/hadoop-yarn/yarn-yarn-resourcemanager-*.log",
22
+ "/var/log/hadoop-yarn/yarn-yarn-resourcemanager-*.out"
23
+ ],
24
+ node_manager: [
25
+ "/var/log/hadoop-yarn/yarn-yarn-nodemanager-*.log",
26
+ "/var/log/hadoop-yarn/yarn-yarn-nodemanager-*.out"
27
+ ],
28
+ name_node: [
29
+ "/var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.log",
30
+ "/var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.out"
31
+ ],
32
+ data_node: [
33
+ "/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log",
34
+ "/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.out"
35
+ ],
36
+ journal_node: ["/var/log/hadoop-hdfs/hadoop-hdfs-journalnode-*.log", "/var/log/hadoop-hdfs/hadoop-hdfs-journalnode-*.out"],
37
+ zkfc: ["/var/log/hadoop-hdfs/hadoop-hdfs-zkfc-*.log", "/var/log/hadoop-hdfs/hadoop-hdfs-zkfc-*.out"],
38
+ hdfs: [
39
+ "/var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.log",
40
+ "/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log",
41
+ "/var/log/hadoop-hdfs/hadoop-hdfs-journalnode-*.log",
42
+ "/var/log/hadoop-hdfs/hadoop-hdfs-zkfc-*.log",
43
+ "/var/log/hadoop-hdfs/hdfs-audit.log"
44
+ ],
45
+ yarn: [
46
+ "/var/log/hadoop-yarn/yarn-yarn-resourcemanager-*.log",
47
+ "/var/log/hadoop-yarn/yarn-yarn-nodemanager-*.log",
48
+ "/var/log/hadoop-yarn/yarn-yarn-timelineserver-*.log",
49
+ "yarn logs -show_application_log_info -applicationId <applicationId>",
50
+ "yarn logs -applicationId <applicationId>"
51
+ ],
52
+ hadoop: [
53
+ "/var/log/hadoop-hdfs/*.log",
54
+ "/var/log/hadoop-yarn/*.log",
55
+ "/var/log/hadoop-mapreduce/*.log",
56
+ "/var/log/hadoop-kms/*.log"
57
+ ],
58
+ application: [
59
+ "yarn logs -show_application_log_info -applicationId <applicationId>",
60
+ "yarn logs -applicationId <applicationId>",
61
+ "hdfs dfs -ls /app-logs/<owner>/logs/<applicationId>",
62
+ "hdfs dfs -ls /app-logs/<owner>/logs-tfile/<applicationId>",
63
+ "hdfs dfs -ls /app-logs/<owner>/bucket-logs-tfile/<last4>/<applicationId>"
64
+ ],
65
+ mapreduce_history_server: ["/var/log/hadoop-mapreduce/mapred-mapred-historyserver-*.log", "/var/log/hadoop-mapreduce/mapred-mapred-historyserver-*.out"],
66
+ spark_history_server: [
67
+ "private cloud: kubectl logs -n bds-k8s-services <bds-shs-pod> -c bds-shs --tail=<lines>",
68
+ "public cloud: kubectl logs -n bds <bds-shs-pod> -c bds-shs --tail=<lines>"
69
+ ],
70
+ spark_application: [
71
+ "yarn logs -applicationId <applicationId>",
72
+ "hdfs dfs -ls <spark.eventLog.dir>",
73
+ "hdfs dfs -cat <spark.eventLog.dir>/<applicationId>*"
74
+ ],
75
+ airflow: [
76
+ "/hadoop/disk2/workday-bds-airflow/logs/scheduler/<yyyy-mm-dd>/<dag_id>.py.log",
77
+ "/hadoop/disk2/workday-bds-airflow/logs/<dag_id>/<run_id>/<task_id>/<try_number>.log",
78
+ "/data/workday-bds-airflow/logs/scheduler/<yyyy-mm-dd>/<dag_id>.py.log",
79
+ "/data/airflow/logs/<dag_id>/<run_id>/<task_id>/<try_number>.log",
80
+ "kcsb logs deploy/airflow-scheduler -c scheduler --since=<window>",
81
+ "kcsb logs deploy/airflow-webserver -c webserver --since=<window>",
82
+ "kcsb logs <airflow-worker-pod> -c worker --since=<window>"
83
+ ],
84
+ airflow_dag: [
85
+ "/hadoop/disk2/workday-bds-airflow/logs/scheduler/<yyyy-mm-dd>/<dag_id>.py.log",
86
+ "/hadoop/disk2/workday-bds-airflow/logs/<dag_id>/<run_id>/<task_id>/<try_number>.log",
87
+ "/data/workday-bds-airflow/logs/scheduler/<yyyy-mm-dd>/<dag_id>.py.log",
88
+ "airflow tasks logs <dag_id> <task_id> <run_id> --try-number <try_number>",
89
+ "airflow dags list-runs -d <dag_id>",
90
+ "airflow tasks states-for-dag-run <dag_id> <run_id>"
91
+ ],
92
+ tenant_data_operation: [
93
+ "/hadoop/disk2/workday-bds-airflow/logs/dag_tenant_data_copy_on_demand.py.log",
94
+ "/hadoop/disk2/workday-bds-airflow/logs/dag_tenant_data_dr_pull.py.log",
95
+ "/hadoop/disk2/workday-bds-airflow/logs/dag_tenant_data_finalizer.py.log",
96
+ "/hadoop/disk2/workday-bds-airflow/logs/dag_service_data_finalizer.py.log",
97
+ "/hadoop/disk2/workday-bds-airflow/logs/dag_tenant_data_copy_on_demand/<run_id>/run_tenant_data_ondemand_restore_copy/<try_number>.log",
98
+ "kubectl -n airflow logs deploy/airflow-scheduler --since=<window>",
99
+ "kubectl -n airflow logs deploy/airflow-webserver --since=<window>",
100
+ "kubectl -n airflow logs <dag-task-pod> --tail=-1",
101
+ "kubectl -n airflow get pods -o wide | grep -E 'dag-tenant-data|tenant-data|drpull|finalizer|copy'",
102
+ "airflow dags list-runs -d dag_tenant_data_copy_on_demand -s <start-date>",
103
+ "airflow dags list-runs -d dag_tenant_data_dr_pull -s <start-date>"
104
+ ],
105
+ zookeeper: ["/var/log/zookeeper/zookeeper-zookeeper-server-*.log"],
106
+ oozie: ["LEGACY only for retired Oozie workflows; current tenant clone, DR, and tenant data operations run through Airflow.", "/var/log/oozie/oozie.log"],
107
+ mysql: ["/var/log/mysql/error.log", "/var/log/mysqld.log"],
108
+ ldap: ["/var/log/dirsrv/slapd-*/errors", "/var/log/dirsrv/slapd-*/access"],
109
+ service_proxy: ["/var/log/haproxy.log"],
110
+ public_cloud_pod: [
111
+ "kubectl logs -n <namespace> <pod> -c <container> --since=<window>",
112
+ "kubectl logs -n <namespace> deploy/<deployment> -c <container> --since=<window>",
113
+ "kubectl logs -n <namespace> statefulset/<statefulset> -c <container> --since=<window>",
114
+ "kubectl logs -n <namespace> <pod> -c <sidecar-container> --previous --since=<window>",
115
+ "kubectl describe pod -n <namespace> <pod>"
116
+ ],
117
+ sidecar: [
118
+ "kubectl get pod -n <namespace> <pod> -o jsonpath='{.spec.containers[*].name}'",
119
+ "kubectl logs -n <namespace> <pod> -c <sidecar-container> --since=<window>",
120
+ "kubectl logs -n <namespace> <pod> -c <sidecar-container> --previous --since=<window>"
121
+ ],
122
+ spas_mt: [
123
+ "/data/workday-spas-mt/1.0.0/log/spas.log",
124
+ "kcsb logs deploy/spas-mt -c spas-mt --since=<window>",
125
+ "kubectl logs -n <namespace> deploy/spas-mt -c spas-mt --since=<window>"
126
+ ],
127
+ chef_cookbook: [
128
+ "/var/log/chef/client.log",
129
+ "/var/chef/cache/chef-stacktrace.out",
130
+ "/var/chef/cache/cookbooks/<cookbook>/",
131
+ "sudo chef-client --why-run"
132
+ ],
133
+ ansible_playbook: [
134
+ "/var/log/ansible.log",
135
+ "<workspace-or-runner>/ansible.log",
136
+ "<workspace-or-runner>/*.retry",
137
+ "ansible-playbook <playbook>.yml --check --diff"
138
+ ]
139
+ };
140
+
141
+ export const BDS_LOG_TYPE_ALIASES = {
142
+ app: "application",
143
+ apps: "application",
144
+ yarn_app: "application",
145
+ application_log: "application",
146
+ applications: "application",
147
+ rm: "resource_manager",
148
+ resourcemanager: "resource_manager",
149
+ yarn_rm: "resource_manager",
150
+ nm: "node_manager",
151
+ nodemanager: "node_manager",
152
+ yarn_nm: "node_manager",
153
+ nn: "name_node",
154
+ namenode: "name_node",
155
+ hdfs_namenode: "name_node",
156
+ dn: "data_node",
157
+ datanode: "data_node",
158
+ hdfs_datanode: "data_node",
159
+ jn: "journal_node",
160
+ journalnode: "journal_node",
161
+ jobhistory: "mapreduce_history_server",
162
+ history_server: "mapreduce_history_server",
163
+ mapred_history_server: "mapreduce_history_server",
164
+ spark_history: "spark_history_server",
165
+ spark_history_server: "spark_history_server",
166
+ shs: "spark_history_server",
167
+ spark: "spark_application",
168
+ spark_app: "spark_application",
169
+ airflow_logs: "airflow",
170
+ airflow_task: "airflow_dag",
171
+ dag: "airflow_dag",
172
+ tenant_data: "tenant_data_operation",
173
+ tenant_data_operation: "tenant_data_operation",
174
+ tenant_data_operations: "tenant_data_operation",
175
+ tenant_clone: "tenant_data_operation",
176
+ clone: "tenant_data_operation",
177
+ dr_pull: "tenant_data_operation",
178
+ tenant_dr: "tenant_data_operation",
179
+ finalizer: "tenant_data_operation",
180
+ zk: "zookeeper",
181
+ zookeeper_server: "zookeeper",
182
+ serviceproxy: "service_proxy",
183
+ bds_service_proxy: "service_proxy",
184
+ pod: "public_cloud_pod",
185
+ pods: "public_cloud_pod",
186
+ kubernetes_pod: "public_cloud_pod",
187
+ public_cloud_pods: "public_cloud_pod",
188
+ k8s: "public_cloud_pod",
189
+ k8s_pod: "public_cloud_pod",
190
+ side_car: "sidecar",
191
+ sidecars: "sidecar",
192
+ spasmt: "spas_mt",
193
+ chef: "chef_cookbook",
194
+ chef_log: "chef_cookbook",
195
+ cookbook: "chef_cookbook",
196
+ ansible: "ansible_playbook",
197
+ playbook: "ansible_playbook"
198
+ };
199
+
200
+ function normalizeText(value) {
201
+ return typeof value === "string" ? value.trim() : "";
202
+ }
203
+
204
+ function normalizeType(value) {
205
+ return normalizeText(value).toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
206
+ }
207
+
208
+ export class BdsLogPathKnowledgeService {
209
+ constructor({ paths = BDS_LOG_PATHS } = {}) {
210
+ this.paths = paths;
211
+ }
212
+
213
+ normalizeType(value) {
214
+ return normalizeType(value);
215
+ }
216
+
217
+ resolveType(value) {
218
+ const normalized = this.normalizeType(value);
219
+ return BDS_LOG_TYPE_ALIASES[normalized] ?? normalized;
220
+ }
221
+
222
+ invoke(input) {
223
+ const requestedType = this.normalizeType(input.machineType);
224
+ const resolvedType = this.resolveType(input.machineType);
225
+ const entries = resolvedType ? { [resolvedType]: this.paths[resolvedType] ?? [] } : this.paths;
226
+ return JSON.stringify({
227
+ machineType: requestedType,
228
+ resolvedType,
229
+ entries,
230
+ note: "Path knowledge is static read-only guidance. Verify on the host, pod, or service UI with read-only ls/stat/tail/kubectl/yarn commands before relying on it."
231
+ }, null, 2);
232
+ }
233
+ }
234
+
235
+ const defaultService = new BdsLogPathKnowledgeService();
236
+
237
+ export function bdsLogPathKnowledge(input) {
238
+ return defaultService.invoke(input);
239
+ }
240
+
241
+ export const __test = {
242
+ BDS_LOG_PATHS,
243
+ BDS_LOG_TYPE_ALIASES,
244
+ BdsLogPathKnowledgeService,
245
+ bdsLogPathKnowledge
246
+ };
247
+
248
+ const sharedTool = defineReadOnlyTool({
249
+ name: "bds_log_path_knowledge",
250
+ description: "Return static BDS server-type log path guidance for read-only host inspection planning.",
251
+ inputSchema: {
252
+ machineType: z.string().trim().max(128).default("")
253
+ },
254
+ async handler(input) {
255
+ try { return ok(defaultService.invoke(input)); } catch (error) { return fail(error); }
256
+ }
257
+ });
258
+
259
+ export default {
260
+ name: sharedTool.name,
261
+ description,
262
+ inputSchema: sharedTool.inputSchema,
263
+ meta: sharedTool.meta,
264
+ annotations: sharedTool.annotations,
265
+ invoke: sharedTool.invoke,
266
+ handler: sharedTool.handler
267
+ };