@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.
- package/LICENSE +21 -0
- package/README.md +262 -0
- package/dist/auth.d.ts +112 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +180 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +148 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +334 -0
- package/dist/client.js.map +1 -0
- package/dist/contracts/job-detail.d.ts +141 -0
- package/dist/contracts/job-detail.d.ts.map +1 -0
- package/dist/contracts/job-detail.js +98 -0
- package/dist/contracts/job-detail.js.map +1 -0
- package/dist/contracts/sync-project.d.ts +31 -0
- package/dist/contracts/sync-project.d.ts.map +1 -0
- package/dist/contracts/sync-project.js +30 -0
- package/dist/contracts/sync-project.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +754 -0
- package/dist/index.js.map +1 -0
- package/dist/job-status.d.ts +116 -0
- package/dist/job-status.d.ts.map +1 -0
- package/dist/job-status.js +168 -0
- package/dist/job-status.js.map +1 -0
- package/dist/launch.d.ts +76 -0
- package/dist/launch.d.ts.map +1 -0
- package/dist/launch.js +133 -0
- package/dist/launch.js.map +1 -0
- package/dist/list-projects.d.ts +63 -0
- package/dist/list-projects.d.ts.map +1 -0
- package/dist/list-projects.js +84 -0
- package/dist/list-projects.js.map +1 -0
- package/dist/list-templates.d.ts +60 -0
- package/dist/list-templates.d.ts.map +1 -0
- package/dist/list-templates.js +120 -0
- package/dist/list-templates.js.map +1 -0
- package/dist/metrics.d.ts +174 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +275 -0
- package/dist/metrics.js.map +1 -0
- package/dist/transforms.d.ts +52 -0
- package/dist/transforms.d.ts.map +1 -0
- package/dist/transforms.js +108 -0
- package/dist/transforms.js.map +1 -0
- 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8DAA8D;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;IAC1B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE;CACnC,CAAC,CAAC;AAEH,8DAA8D;AAE9D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,aAAa;IACtB,kBAAkB,EAAE,sBAAsB;IAC1C,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC"}
|
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|