@weiyentan/opencode-plugin-awx 0.2.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +262 -0
  3. package/dist/auth.d.ts +112 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +180 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +148 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +334 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/contracts/job-detail.d.ts +141 -0
  12. package/dist/contracts/job-detail.d.ts.map +1 -0
  13. package/dist/contracts/job-detail.js +98 -0
  14. package/dist/contracts/job-detail.js.map +1 -0
  15. package/dist/contracts/sync-project.d.ts +31 -0
  16. package/dist/contracts/sync-project.d.ts.map +1 -0
  17. package/dist/contracts/sync-project.js +30 -0
  18. package/dist/contracts/sync-project.js.map +1 -0
  19. package/dist/index.d.ts +16 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +754 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/job-status.d.ts +116 -0
  24. package/dist/job-status.d.ts.map +1 -0
  25. package/dist/job-status.js +168 -0
  26. package/dist/job-status.js.map +1 -0
  27. package/dist/launch.d.ts +76 -0
  28. package/dist/launch.d.ts.map +1 -0
  29. package/dist/launch.js +133 -0
  30. package/dist/launch.js.map +1 -0
  31. package/dist/list-projects.d.ts +63 -0
  32. package/dist/list-projects.d.ts.map +1 -0
  33. package/dist/list-projects.js +84 -0
  34. package/dist/list-projects.js.map +1 -0
  35. package/dist/list-templates.d.ts +60 -0
  36. package/dist/list-templates.d.ts.map +1 -0
  37. package/dist/list-templates.js +120 -0
  38. package/dist/list-templates.js.map +1 -0
  39. package/dist/metrics.d.ts +174 -0
  40. package/dist/metrics.d.ts.map +1 -0
  41. package/dist/metrics.js +275 -0
  42. package/dist/metrics.js.map +1 -0
  43. package/dist/transforms.d.ts +52 -0
  44. package/dist/transforms.d.ts.map +1 -0
  45. package/dist/transforms.js +108 -0
  46. package/dist/transforms.js.map +1 -0
  47. package/package.json +56 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * AWX Job Detail Output Contract — v1.0
3
+ *
4
+ * Canonical TypeScript representation of the `awx_job_detail.py` v1.0 output schema.
5
+ * Every job-related tool MUST return output matching this contract.
6
+ *
7
+ * This file provides **both**:
8
+ * - Zod schemas for runtime validation (e.g., API response parsing)
9
+ * - Inferred TypeScript types for static type checking
10
+ *
11
+ * The contract has been verified against fixture snapshots in `tests/contracts/__snapshots__/`.
12
+ *
13
+ * ## Schema Fields
14
+ *
15
+ * - **schema_version**: Always "1.0"
16
+ * - **job**: Core job metadata (id, name, status, timestamps, etc.)
17
+ * - **related**: Resolved names (not URLs) for related AWX resources
18
+ * - **host_status_counts**: Count of hosts in each Ansible state — NOT `host_summary`
19
+ * - **derived**: Boolean flags computed from raw data — NOT `extra_vars_summary`
20
+ * - **warnings / errors**: String arrays for user-facing messages
21
+ * - **stdout** (optional): Full job stdout text
22
+ * - **raw_events** (optional): Raw AWX job events array
23
+ *
24
+ * ## Field Naming Convention
25
+ *
26
+ * - Use `host_status_counts` — NOT `host_summary`
27
+ * - Use `derived` — NOT `extra_vars_summary`
28
+ * - `related` fields are resolved names, not raw URLs
29
+ * - `job.limit` is the AWX job limit (host pattern), not a pagination value
30
+ *
31
+ * ## Snapshot Testing
32
+ *
33
+ * Fixture JSON files in `tests/fixtures/` serve as contract snapshots.
34
+ * When the Python `awx_job_detail.py` v1.0 output contract changes,
35
+ * regenerate the fixtures (see README.md for instructions) and re-run
36
+ * tests to verify schema compatibility.
37
+ *
38
+ * ## Regeneration
39
+ *
40
+ * To regenerate the contract snapshots after fixture changes:
41
+ * ```bash
42
+ * python3 scripts/generate-snapshots.py
43
+ * ```
44
+ */
45
+ import { z } from "zod";
46
+ // ─── Sub-schemas ───────────────────────────────────────────
47
+ export const JobCoreSchema = z.object({
48
+ id: z.number().int().positive(),
49
+ name: z.string(),
50
+ status: z.string(),
51
+ failed: z.boolean(),
52
+ job_type: z.string(),
53
+ playbook: z.string(),
54
+ created: z.string(),
55
+ started: z.string().nullable(),
56
+ finished: z.string().nullable(),
57
+ elapsed: z.number().nullable(),
58
+ execution_node: z.string(),
59
+ controller_node: z.string(),
60
+ scm_branch: z.string(),
61
+ verbosity: z.number().int().min(0),
62
+ forks: z.number().int().min(0).nullable(),
63
+ limit: z.string(),
64
+ });
65
+ export const RelatedSchema = z.object({
66
+ inventory_name: z.string(),
67
+ project_name: z.string(),
68
+ job_template_name: z.string(),
69
+ instance_group_name: z.string(),
70
+ created_by: z.string(),
71
+ credential_names: z.array(z.string()),
72
+ label_names: z.array(z.string()),
73
+ });
74
+ export const HostStatusCountsSchema = z.object({
75
+ ok: z.number().int().min(0),
76
+ failed: z.number().int().min(0),
77
+ skipped: z.number().int().min(0),
78
+ changed: z.number().int().min(0),
79
+ unreachable: z.number().int().min(0),
80
+ });
81
+ export const DerivedSchema = z.object({
82
+ is_successful: z.boolean(),
83
+ is_failed: z.boolean(),
84
+ has_unreachable_hosts: z.boolean(),
85
+ });
86
+ // ─── Top-level schema ──────────────────────────────────────
87
+ export const JobDetailOutputSchema = z.object({
88
+ schema_version: z.literal("1.0"),
89
+ job: JobCoreSchema,
90
+ related: RelatedSchema,
91
+ host_status_counts: HostStatusCountsSchema,
92
+ derived: DerivedSchema,
93
+ warnings: z.array(z.string()),
94
+ errors: z.array(z.string()),
95
+ stdout: z.string().optional(),
96
+ raw_events: z.array(z.unknown()).optional(),
97
+ });
98
+ //# sourceMappingURL=job-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-detail.js","sourceRoot":"","sources":["../../src/contracts/job-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Sync Project Output Contract
3
+ *
4
+ * Canonical schema for the `awx-sync-project` tool's return value.
5
+ * Defines both:
6
+ * - Zod schema for runtime validation
7
+ * - Inferred TypeScript types for static type checking
8
+ *
9
+ * ## Schema Fields
10
+ *
11
+ * - **project_update_id**: The AWX project update record ID
12
+ * - **status**: Status of the triggered sync (e.g., "running", "successful", "failed")
13
+ * - **project_name**: Resolved name of the AWX project
14
+ * - **project_id**: The AWX project ID (echoed from input)
15
+ * - **url**: API URL of the project
16
+ * - **scm_type**: SCM type (e.g., "git", "svn")
17
+ * - **last_updated**: Timestamp of last project update
18
+ */
19
+ import { z } from "zod";
20
+ export declare const ProjectSyncOutputSchema: z.ZodObject<{
21
+ project_update_id: z.ZodNumber;
22
+ status: z.ZodString;
23
+ project_name: z.ZodString;
24
+ project_id: z.ZodNumber;
25
+ url: z.ZodString;
26
+ scm_type: z.ZodString;
27
+ last_updated: z.ZodString;
28
+ }, z.core.$strip>;
29
+ /** Structured output returned by the awx-sync-project tool */
30
+ export type ProjectSyncOutput = z.infer<typeof ProjectSyncOutputSchema>;
31
+ //# sourceMappingURL=sync-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-project.d.ts","sourceRoot":"","sources":["../../src/contracts/sync-project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,uBAAuB;;;;;;;;iBAQlC,CAAC;AAIH,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Sync Project Output Contract
3
+ *
4
+ * Canonical schema for the `awx-sync-project` tool's return value.
5
+ * Defines both:
6
+ * - Zod schema for runtime validation
7
+ * - Inferred TypeScript types for static type checking
8
+ *
9
+ * ## Schema Fields
10
+ *
11
+ * - **project_update_id**: The AWX project update record ID
12
+ * - **status**: Status of the triggered sync (e.g., "running", "successful", "failed")
13
+ * - **project_name**: Resolved name of the AWX project
14
+ * - **project_id**: The AWX project ID (echoed from input)
15
+ * - **url**: API URL of the project
16
+ * - **scm_type**: SCM type (e.g., "git", "svn")
17
+ * - **last_updated**: Timestamp of last project update
18
+ */
19
+ import { z } from "zod";
20
+ // ─── Top-level schema ──────────────────────────────────────
21
+ export const ProjectSyncOutputSchema = z.object({
22
+ project_update_id: z.number().int().positive(),
23
+ status: z.string(),
24
+ project_name: z.string(),
25
+ project_id: z.number().int().positive(),
26
+ url: z.string(),
27
+ scm_type: z.string(),
28
+ last_updated: z.string(),
29
+ });
30
+ //# sourceMappingURL=sync-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-project.js","sourceRoot":"","sources":["../../src/contracts/sync-project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8DAA8D;AAE9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { PluginModule } from "@opencode-ai/plugin";
2
+ /** Plugin-specific configuration from opencode.jsonc */
3
+ export interface AwxPluginOptions {
4
+ /**
5
+ * Base URL of the AAP/AWX instance.
6
+ * Must include protocol (https://) and hostname.
7
+ * Example: "https://example.com"
8
+ */
9
+ baseUrl?: string;
10
+ }
11
+ /**
12
+ * Plugin module — the default export consumed by the OpenCode plugin server.
13
+ */
14
+ declare const pluginModule: PluginModule;
15
+ export default pluginModule;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAmC5E,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsyBD;;GAEG;AACH,QAAA,MAAM,YAAY,EAAE,YAGnB,CAAC;AAEF,eAAe,YAAY,CAAC"}