diff --git a/.claude/plugins/stackone-connector-builder/skills/build-config/SKILL.md b/.claude/plugins/stackone-connector-builder/skills/build-config/SKILL.md index 70f01f0..24331ac 100644 --- a/.claude/plugins/stackone-connector-builder/skills/build-config/SKILL.md +++ b/.claude/plugins/stackone-connector-builder/skills/build-config/SKILL.md @@ -179,8 +179,8 @@ Read `src/configs/{{provider}}/{{provider}}.connector.s1.yaml` and add a `$ref` ```yaml actions: - $ref: {{provider}}.employees - $ref: {{provider}}.departments + - $ref: {{provider}}.employees.s1.partial.yaml + - $ref: {{provider}}.departments.s1.partial.yaml ``` --- diff --git a/.claude/plugins/stackone-connector-builder/skills/setup-connector/SKILL.md b/.claude/plugins/stackone-connector-builder/skills/setup-connector/SKILL.md index cf1a1c1..6b3ec99 100644 --- a/.claude/plugins/stackone-connector-builder/skills/setup-connector/SKILL.md +++ b/.claude/plugins/stackone-connector-builder/skills/setup-connector/SKILL.md @@ -61,9 +61,9 @@ If unavailable: **If CLI available, first check if a pullable connector exists:** ```bash -npx @stackone/cli list | grep -iw {{provider}} +npx @stackone/cli list | grep -ix "{{provider}}" ``` -Use `-w` for word-boundary matching to avoid substring matches (e.g., `bamboo` matching `bamboohr`). If found in the CLI list, pull it: +Use `-x` for full-line matching to avoid false positives from substring or hyphenated-name matches. If found in the CLI list, pull it: ```bash npx @stackone/cli pull {{provider}} ``` diff --git a/.claude/plugins/stackone-connector-builder/skills/stackone-connector-builder/SKILL.md b/.claude/plugins/stackone-connector-builder/skills/stackone-connector-builder/SKILL.md index d7963bc..d3efae5 100644 --- a/.claude/plugins/stackone-connector-builder/skills/stackone-connector-builder/SKILL.md +++ b/.claude/plugins/stackone-connector-builder/skills/stackone-connector-builder/SKILL.md @@ -15,7 +15,7 @@ For connectors that normalise data to a standard schema, use `/build-unified-con | Step | Command | What it does | |------|---------|-------------| | 1 | `/setup-connector` | Provider name, index check, CLI pull or scaffold | -| 2 | `/configure-auth` | Set up authentication (API key, OAuth2, Basic Auth) | +| 2 | `/configure-auth` | Set up authentication (custom or OAuth2) | | 3 | `/discover-actions` | Choose scoped actions or discover everything | | 4 | `/build-config` | Generate YAML for all confirmed actions | | 5 | `/validate-connector` | Validate the YAML config | @@ -95,7 +95,7 @@ Execute `/test-connector` logic. Saves: `tested: true`, `test_artifacts`, `compl ## Rules -- Do not write YAML until Step 4 (`build-config`) +- Do not write action YAML until Step 4 (`build-config`) — auth config written in Step 2 is the exception - Do not run tests until Step 5 (`validate-connector`) passes - Always clean up test records — log anything that cannot be removed - Always run `scramble_credentials` after testing diff --git a/.claude/plugins/stackone-connector-builder/skills/validate-connector/SKILL.md b/.claude/plugins/stackone-connector-builder/skills/validate-connector/SKILL.md index f57a2e1..9ec7b57 100644 --- a/.claude/plugins/stackone-connector-builder/skills/validate-connector/SKILL.md +++ b/.claude/plugins/stackone-connector-builder/skills/validate-connector/SKILL.md @@ -73,29 +73,7 @@ For each error from the CLI output or the manual checklist, identify the cause a **`Missing required field: entrypointUrl`** -Cause: A non-custom action (e.g., `actionType: list`) is missing the `entrypointUrl` key. Note: this error does not apply to `actionType: custom` actions, which do not require `entrypointUrl`. - -Fix — add the field to the non-custom action: -```yaml -- actionId: list_employees - categories: - - {{category}} - actionType: list - entrypointUrl: /employees # <-- add this - entrypointHttpMethod: get # <-- add this - label: List Employees - description: List all employees - steps: - - stepId: fetch_employees - description: Retrieve all employees - stepFunction: - functionName: request - parameters: - url: '/employees' - method: get - result: - data: $.steps.fetch_employees.output.data -``` +Cause: This error applies to non-custom actions (`actionType: list`, `get`, etc.) that are missing the `entrypointUrl` key. This error should not occur in this plugin's workflow since all actions use `actionType: custom`, which does not require `entrypointUrl`. If you see this error, check that the action has `actionType: custom`. --- diff --git a/.claude/plugins/stackone-unified-builder/references/field-mapping-guide.md b/.claude/plugins/stackone-unified-builder/references/field-mapping-guide.md index 4e98c83..11f4e75 100644 --- a/.claude/plugins/stackone-unified-builder/references/field-mapping-guide.md +++ b/.claude/plugins/stackone-unified-builder/references/field-mapping-guide.md @@ -1,4 +1,3 @@ -````markdown # Field Mapping Guide Detailed reference for writing `fieldConfigs` in unified connectors. @@ -318,4 +317,3 @@ This shows exactly what the provider returns before any mapping. Use it to find - Do NOT use `objectMapping` — it is not supported by the validator - Use the inline block scalar `expression: |` pattern instead - In `group_data` context, confirm the step ID prefix is correct -```` diff --git a/.claude/plugins/stackone-unified-builder/references/schemas/hris.md b/.claude/plugins/stackone-unified-builder/references/schemas/hris.md index ca374fd..700bd3d 100644 --- a/.claude/plugins/stackone-unified-builder/references/schemas/hris.md +++ b/.claude/plugins/stackone-unified-builder/references/schemas/hris.md @@ -728,7 +728,7 @@ | `remote_policy_id` | `string` | Provider's unique identifier of the time off policy id associated with this balance | | `policy` | `TimeOffPolicies` | The time off policy associated with this balance | | `current_balance` | `number` | The current numeric balance for the associated employee and time off policy | -| `initial_balance` | `number` | The initial numeric balance for the associated employee and time off policy as of the balance sta... | +| `initial_balance` | `number` | The initial numeric balance for the associated employee and time off policy as of the balance start date | | `balance_unit` | `TimeOffBalanceUnitEnum` | The duration unit of the current balance | | `balance_start_date` | `string` | The date of when the initial balance quantity was set | | `balance_expiry_date` | `string` | The date of when the current balance expires | diff --git a/.claude/plugins/stackone-unified-builder/references/schemas/iam.md b/.claude/plugins/stackone-unified-builder/references/schemas/iam.md index 4ee8714..8e4bb17 100644 --- a/.claude/plugins/stackone-unified-builder/references/schemas/iam.md +++ b/.claude/plugins/stackone-unified-builder/references/schemas/iam.md @@ -131,7 +131,7 @@ | `last_active_at` | `string` | The date this user was last active | | `last_login_at` | `string` | The date this user last logged in | | `created_at` | `string` | The date the user was created | -| `updated_at` | `string` | The date the user was created | +| `updated_at` | `string` | The date the user was last updated | | `multi_factor_enabled` | `array` | The list of Multi-Factor Authentication (MFA) types enabled for the user. | | `avatar` | `File` | The user's avatar data. This generally contains a URL within this property's 'contents' array. | diff --git a/.claude/plugins/stackone-unified-builder/skills/import-schema/SKILL.md b/.claude/plugins/stackone-unified-builder/skills/import-schema/SKILL.md index 847b469..30e1fb4 100644 --- a/.claude/plugins/stackone-unified-builder/skills/import-schema/SKILL.md +++ b/.claude/plugins/stackone-unified-builder/skills/import-schema/SKILL.md @@ -169,9 +169,12 @@ Once confirmed, save to `.connector-build-session.json`: > > These fields will be used as your `targetFieldKey` names in `/map-fields`. The next step is deciding which provider operations to build. > -> - If you haven't set a provider yet: tell me which provider you're building for (ask directly — do not redirect to `/choose-schema`), then run `/check-connector` -> - If provider is already set but connector hasn't been pulled/scaffolded: run `/check-connector` -> - If provider + connector + actions are already set: run `/map-fields` directly" +> - If you haven't set a provider yet: tell me which provider you're building for" +> +> If the builder provides a provider name, **save it to session as `provider` immediately**, then run `/check-connector`. +> If provider is already set but connector hasn't been pulled/scaffolded: run `/check-connector`. +> If provider + connector + actions are already set: run `/map-fields` directly. Update session: -- `session_step` → `"map-fields"` (if provider, connector, and action_scope are all set) or `"check-connector"` (if provider is set but connector not yet pulled/scaffolded) or `"choose-schema"` (if provider is not set — ask for provider name directly before redirecting) +- `provider` → the builder's answer (if just collected) +- `session_step` → `"map-fields"` (if provider, connector, and action_scope are all set) or `"check-connector"` (if provider is set but connector not yet pulled/scaffolded) or `"choose-schema"` (if provider is still not set after prompting) diff --git a/.claude/plugins/stackone-unified-builder/skills/test-connector/SKILL.md b/.claude/plugins/stackone-unified-builder/skills/test-connector/SKILL.md index ba96a96..bbe4b46 100644 --- a/.claude/plugins/stackone-unified-builder/skills/test-connector/SKILL.md +++ b/.claude/plugins/stackone-unified-builder/skills/test-connector/SKILL.md @@ -88,7 +88,7 @@ npx @stackone/cli test {{provider}} unified_{{action}}_{{resource}} **Field is null or missing in output:** > "Field `{{field}}` is missing. Let's debug: -> 1. Run with `--debug` to see the raw provider response: `npx @stackone/cli test {{provider}} {{action}} --debug` +> 1. Run with `--debug` to see the raw provider response: `npx @stackone/cli test {{provider}} unified_{{action}}_{{resource}} --debug` > 2. Find `{{field}}` in the raw response — what is the actual JSONPath? > 3. Update the `expression` in `fieldConfigs` to match."