From 6e268fade7827cff0f3ec11b413822ff8a1861c0 Mon Sep 17 00:00:00 2001 From: oderajoseph95 Date: Tue, 29 Sep 2026 01:40:40 +0800 Subject: [PATCH] Rename repository to Claude-Intercom-HelpCenter-Article-Writer and add contribution guides (3.0.1) - Point every link, badge, install command, manifest URL and workflow template at the new repository name. - Release pin is on the marketplace: /plugin marketplace add #v3.0.1. Templates pin ref v3.0.1. - Shorten the deepest example path so a Windows install no longer fails on the path-length limit, and document core.longpaths for anyone who still hits it. - Issue forms for bugs, feature requests and docs improvements; discussion forms for Q&A and Ideas. - CONTRIBUTING explains how to get help, report a bug, suggest a feature, start a discussion and send a pull request; linked from the README. --- .claude-plugin/plugin.json | 6 +- .github/DISCUSSION_TEMPLATE/ideas.yml | 19 +++++ .github/DISCUSSION_TEMPLATE/q-a.yml | 26 ++++++ .github/ISSUE_TEMPLATE/bug_report.md | 24 ------ .github/ISSUE_TEMPLATE/bug_report.yml | 80 +++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 8 +- .github/ISSUE_TEMPLATE/docs_improvement.yml | 36 +++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 13 --- .github/ISSUE_TEMPLATE/feature_request.yml | 44 ++++++++++ CHANGELOG.md | 35 ++++++-- CONTRIBUTING.md | 29 ++++++- README.md | 23 ++++-- SECURITY.md | 2 +- docs/SETUP.md | 10 ++- docs/TROUBLESHOOTING.md | 1 + ...port-my-orders-to-csv.md => export-csv.md} | 0 examples/help-articles/coverage-manifest.mjs | 2 +- templates/github/help-center-audit.yml | 4 +- templates/github/help-center-draft-fixes.yml | 6 +- templates/github/help-center-gate.yml | 4 +- test/hooks-gate-meta.test.mjs | 2 +- test/publish.test.mjs | 4 +- 22 files changed, 307 insertions(+), 71 deletions(-) create mode 100644 .github/DISCUSSION_TEMPLATE/ideas.yml create mode 100644 .github/DISCUSSION_TEMPLATE/q-a.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/docs_improvement.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml rename examples/help-articles/articles/getting-started/{how-do-i-export-my-orders-to-csv.md => export-csv.md} (100%) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index fb1afa9..07a9519 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,14 +1,14 @@ { "name": "intercom-help-center", "displayName": "Intercom Help Center Article Writer for Claude Code", - "version": "3.0.0", + "version": "3.0.1", "description": "Keep your Intercom help center true to your code: audit every article, map it to your features, plan fixes, write grounded articles, open PRs, and publish only what a human approved.", "author": { "name": "Odera Joseph", "url": "https://github.com/oderajoseph95" }, - "homepage": "https://github.com/oderajoseph95/claude-intercom-help-center#readme", - "repository": "https://github.com/oderajoseph95/claude-intercom-help-center", + "homepage": "https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer#readme", + "repository": "https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer", "license": "MIT", "keywords": ["intercom", "help-center", "documentation", "knowledge-base", "support", "seo", "github-actions", "technical-writing"] } diff --git a/.github/DISCUSSION_TEMPLATE/ideas.yml b/.github/DISCUSSION_TEMPLATE/ideas.yml new file mode 100644 index 0000000..a4a0a2c --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/ideas.yml @@ -0,0 +1,19 @@ +title: "[Idea]: " +labels: ["idea"] +body: + - type: markdown + attributes: + value: | + Share an idea or suggestion. Once it is clear what should happen, it can become a [feature request](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/issues/new/choose). + - type: textarea + id: idea + attributes: + label: The idea + description: What should the plugin do, and why would it help you? + validations: + required: true + - type: textarea + id: context + attributes: + label: How you use the plugin today + description: Optional. Your setup and workflow, so the idea can be judged against real use. diff --git a/.github/DISCUSSION_TEMPLATE/q-a.yml b/.github/DISCUSSION_TEMPLATE/q-a.yml new file mode 100644 index 0000000..fbbe306 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/q-a.yml @@ -0,0 +1,26 @@ +title: "[Q&A]: " +labels: ["question"] +body: + - type: markdown + attributes: + value: | + Ask anything about installing, configuring or running the plugin. If it is clearly a bug, [open a bug report](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/issues/new/choose) instead. + + **Never paste your Intercom token, an API key or private article content.** + - type: textarea + id: question + attributes: + label: Your question + validations: + required: true + - type: textarea + id: tried + attributes: + label: What you tried + description: Commands you ran and what they printed (the IHC code if there was one). + render: text + - type: input + id: versions + attributes: + label: Plugin and Claude Code versions + placeholder: "plugin 3.0.1, Claude Code 2.x, macOS" diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index c2d5f2b..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Bug report -about: Something the plugin did wrong, or an error you could not fix from its message -labels: bug ---- - -**What happened** - -**What you expected** - -**The command and its output** (the `IHC` code if there was one). Remove anything private. - -``` -``` - -**Environment** -- Plugin version (from `.claude-plugin/plugin.json` or `/plugin`): -- Claude Code version (`claude --version`): -- Node version (`node --version`): -- OS: -- Intercom region (us / eu / au): -- Git host (GitHub / GitLab / other), and is `gh` installed? - -**Never paste your Intercom token, an API key, or private article content.** diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..df781a0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,80 @@ +name: Bug report +description: Something the plugin did wrong, or an error you could not fix from its message. +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for reporting. Before you start: check [docs/TROUBLESHOOTING.md](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/blob/main/docs/TROUBLESHOOTING.md), since every error code (IHCxxx) has a cause and a fix there. + + **Never paste your Intercom token, an API key, a real workspace id or private article content.** For a security problem, use the private security advisory link instead of this form. + - type: input + id: plugin-version + attributes: + label: Plugin version + description: From `/plugin` in Claude Code, or `version` in `.claude-plugin/plugin.json`. + placeholder: "3.0.1" + validations: + required: true + - type: input + id: claude-version + attributes: + label: Claude Code version + description: Output of `claude --version`. + validations: + required: true + - type: dropdown + id: os + attributes: + label: Operating system + options: + - macOS + - Linux + - Windows + - Windows (WSL) + - Other + validations: + required: true + - type: input + id: node-version + attributes: + label: Node version + description: Output of `node --version`. + - type: textarea + id: command + attributes: + label: Command you ran + description: The slash command or script, with its arguments (for example `/intercom-help-center:audit` or `node scripts/publish.mjs --dry-run`). + render: text + validations: + required: true + - type: textarea + id: expected + attributes: + label: What you expected + validations: + required: true + - type: textarea + id: actual + attributes: + label: What actually happened + description: Include the full output and the IHC code if there was one. Remove anything private. + render: text + validations: + required: true + - type: textarea + id: doctor + attributes: + label: Doctor output + description: Run `/intercom-help-center:setup`, or `node scripts/doctor.mjs` from the plugin folder, and paste the result. Doctor never prints the token, but check and redact anything private (workspace ids, article titles) before posting. + render: text + - type: checkboxes + id: checks + attributes: + label: Before submitting + options: + - label: I removed tokens, API keys and private content from everything above. + required: true + - label: I searched existing issues and this is not a duplicate. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index cc36c1c..53d7196 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,11 @@ blank_issues_enabled: false contact_links: + - name: Question or help using the plugin + url: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/q-a + about: Ask in Discussions (Q&A). Someone can mark the answer that solved it. + - name: Idea or early suggestion + url: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/ideas + about: Talk an idea through in Discussions (Ideas) before it becomes a feature request. - name: Security issue - url: https://github.com/oderajoseph95/claude-intercom-help-center/security/advisories/new + url: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/security/advisories/new about: Report a vulnerability privately. Please do not open a public issue. diff --git a/.github/ISSUE_TEMPLATE/docs_improvement.yml b/.github/ISSUE_TEMPLATE/docs_improvement.yml new file mode 100644 index 0000000..90258b3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs_improvement.yml @@ -0,0 +1,36 @@ +name: Docs improvement +description: Something in the README, docs/ or the skill references is wrong, unclear or missing. +title: "[Docs]: " +labels: ["documentation"] +body: + - type: input + id: location + attributes: + label: Where + description: The file and section, or a link to it. + placeholder: "docs/SETUP.md, section 'Install'" + validations: + required: true + - type: dropdown + id: kind + attributes: + label: What kind of problem + options: + - It is wrong (does not match what the plugin does) + - It is unclear + - Something is missing + - A link or command is broken + - Other + validations: + required: true + - type: textarea + id: problem + attributes: + label: What is wrong or missing + validations: + required: true + - type: textarea + id: suggestion + attributes: + label: Suggested wording + description: Optional. If you have a fix in mind, paste it here, or open a pull request against `dev`. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 622fe16..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Feature request -about: Something the plugin should do -labels: enhancement ---- - -**The problem** (what you were trying to do, and where the plugin got in the way) - -**What you would like to happen** - -**Would it touch Intercom?** (read-only, or would it write? writes need the same guards as publishing: dry run, approved plan, cap) - -**Anything you tried instead** diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..56aef5a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,44 @@ +name: Feature request or suggestion +description: Something the plugin should do, or do differently. +title: "[Feature]: " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Not sure yet, or want to talk it through first? Start a thread in [Discussions > Ideas](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/ideas) instead. + - type: textarea + id: problem + attributes: + label: The problem + description: What were you trying to do, and where did the plugin get in the way? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: What you would like to happen + validations: + required: true + - type: dropdown + id: intercom-writes + attributes: + label: Would it touch Intercom? + description: Anything that writes needs the same guards as publishing (dry run by default, an approved plan, the cap). + options: + - No, it only reads my repo + - It reads from Intercom + - It writes to Intercom + - Not sure + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Anything you tried instead + - type: checkboxes + id: contribute + attributes: + label: Contributing + options: + - label: I would like to open a pull request for this myself. diff --git a/CHANGELOG.md b/CHANGELOG.md index e52549b..056f4b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,28 @@ All notable changes to this project. The format follows [Keep a Changelog](https ## [Unreleased] +## [3.0.1] - 2026-09-29 + +The repository is renamed to `Claude-Intercom-HelpCenter-Article-Writer`. Links and docs only; the plugin itself is unchanged. + +### Changed +- **Repository**: now [oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer) (was `oderajoseph95/claude-intercom-help-center`; GitHub redirects the old URL). Every link, badge, install command and manifest URL points at the new name. +- **Install**: `/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer`, then `/plugin install intercom-help-center@claude-intercom-help-center`. The plugin name and the marketplace name are unchanged. +- **GitHub Actions templates** check out `oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer` at `ref: v3.0.1`. + +### Fixed +- **Windows install**: `/plugin marketplace add` could fail with a misleading "SSH/HTTPS authentication failed" because git hit Windows' path-length limit on a deep example file. The example article is now `examples/help-articles/articles/getting-started/export-csv.md`, and the README, setup guide and troubleshooting page say to run `git config --global core.longpaths true` if it still happens. +- **Release pin**: the pin goes on the marketplace, `/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer#v3.0.1`. The `@v3.0.0` form shown in 3.0.0 does not work. + +### Added +- **Issue forms** for bug reports, feature requests and docs improvements. Blank issues stay off. +- **Discussions** are open, with forms for Q&A and Ideas. +- **CONTRIBUTING.md** explains how to get help, report a bug, suggest a feature, start a discussion and send a pull request. The README links to it. + +### Upgrading from 3.0.0 +- Nothing to do if you installed from the marketplace: the old URL redirects. To point at the new name, run `/plugin marketplace remove claude-intercom-help-center`, then the two install commands above. +- If you copied a workflow from `templates/github/`, change `repository:` to `oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer` and `ref:` to `v3.0.1`. + ## [3.0.0] - 2026-09-29 The display name changes to "Intercom Help Center Article Writer for Claude Code". Nothing else about installing or running the plugin changes. @@ -21,7 +43,7 @@ The display name changes to "Intercom Help Center Article Writer for Claude Code ### Upgrading from 2.x - No breaking change. The install commands are the same: - `/plugin marketplace add oderajoseph95/claude-intercom-help-center` and `/plugin install intercom-help-center@claude-intercom-help-center`. + `/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer` and `/plugin install intercom-help-center@claude-intercom-help-center`. - If you copied a workflow from `templates/github/`, you can change its `ref: v2.0.0` to `ref: v3.0.0`. The v2.0.0 tag stays available. ## [2.0.0] - 2026-09-29 @@ -29,7 +51,7 @@ The display name changes to "Intercom Help Center Article Writer for Claude Code The skill becomes a Claude Code plugin that manages the whole Help Center, not only new articles. ### Added -- **Plugin packaging**: `.claude-plugin/plugin.json` and a marketplace in the same repo. Install with `/plugin marketplace add oderajoseph95/claude-intercom-help-center` and `/plugin install intercom-help-center@claude-intercom-help-center`. +- **Plugin packaging**: `.claude-plugin/plugin.json` and a marketplace in the same repo. Install with `/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer` and `/plugin install intercom-help-center@claude-intercom-help-center`. - **Commands**: `/intercom-help-center:setup`, `:audit`, `:plan`, `:fix`, `:publish`. - **Agents**: `help-center-auditor` (verifies findings against the code), `help-center-writer` (writes strictly from code and strings), `help-center-reviewer` (adversarial, read-only). - **Hooks**: a publish guard (approved plan and cap), a secret guard (no Intercom token in files), and a stale-article reminder when cited code changes. @@ -63,7 +85,8 @@ The skill becomes a Claude Code plugin that manages the whole Help Center, not o ### Added - The `intercom-article-writer` skill: write help articles from code, a coverage manifest and CI gate (`coverage-check.mjs`), and a markdown-to-Intercom publisher (`publish.mjs`) with spacer paragraphs, H1 stripping, paginated collections, create-or-update by id with write-back, `--create-sections`, `--parity`, a dry-run default and a 20-article cap. -[Unreleased]: https://github.com/oderajoseph95/claude-intercom-help-center/compare/v3.0.0...dev -[3.0.0]: https://github.com/oderajoseph95/claude-intercom-help-center/compare/v2.0.0...v3.0.0 -[2.0.0]: https://github.com/oderajoseph95/claude-intercom-help-center/compare/881238a...v2.0.0 -[1.0.0]: https://github.com/oderajoseph95/claude-intercom-help-center/tree/881238a +[Unreleased]: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/compare/v3.0.1...dev +[3.0.1]: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/compare/v3.0.0...v3.0.1 +[3.0.0]: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/compare/v2.0.0...v3.0.0 +[2.0.0]: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/compare/881238a...v2.0.0 +[1.0.0]: https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/tree/881238a diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4d21a64..fbd6a66 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,29 @@ # Contributing -Thanks for helping. Issues and pull requests are welcome. +Thanks for helping. Questions, bug reports, suggestions and pull requests are all welcome. + +## How to get help, report a bug, or suggest a feature + +| You want to | Go here | +|---|---| +| **Get help** using the plugin (install, setup, an error you do not understand) | [Discussions > Q&A](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/q-a). Check [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) first: every IHC error code has a cause and a fix. | +| **Report a bug** (the plugin did something wrong) | [Open a bug report](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/issues/new?template=bug_report.yml). The form asks for the plugin version, Claude Code version, OS, the command you ran, what you expected and what happened, and the `doctor` output. | +| **Suggest a feature** you already know you want | [Open a feature request](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/issues/new?template=feature_request.yml). | +| **Float an idea** you want to talk through first | [Discussions > Ideas](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/ideas). A clear idea can become a feature request later. | +| **Fix the docs** (wrong, unclear, missing, broken link) | [Open a docs improvement](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/issues/new?template=docs_improvement.yml), or send a pull request directly. | +| **Report a security problem** | [Open a private security advisory](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/security/advisories/new). Never a public issue. See [SECURITY.md](SECURITY.md). | +| **Share how you use it** | [Discussions > Show and tell](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/show-and-tell). | + +Before posting anything: **remove your Intercom token, API keys, real workspace ids and private article content.** `doctor` never prints the token, but check its output anyway. + +## Contributing a pull request + +1. Fork the repo and branch from `dev`. +2. Make your change, with a test (see the rules below). +3. Run `node scripts/selftest.mjs`; it must end with `0 failed`. +4. Open the pull request **against `dev`**, never `main`. Fill in the pull request template. +5. CI must pass: the selftest on Linux and Windows with Node 18 and 22, the example coverage gate, and the docs check. +6. The maintainer reviews every pull request (see [.github/CODEOWNERS](.github/CODEOWNERS)) and merges it into `dev`. Releases then go from `dev` to `main`. ## Branches @@ -13,8 +36,8 @@ Thanks for helping. Issues and pull requests are welcome. No dependencies. You need Node 18+ and git. ```bash -git clone https://github.com/oderajoseph95/claude-intercom-help-center -cd claude-intercom-help-center +git clone https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer +cd Claude-Intercom-HelpCenter-Article-Writer node scripts/selftest.mjs claude --plugin-dir . # try your changes in Claude Code ``` diff --git a/README.md b/README.md index ef0b4d7..db1798f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Keep your Intercom help center true to your code.** -[![CI](https://github.com/oderajoseph95/claude-intercom-help-center/actions/workflows/ci.yml/badge.svg)](https://github.com/oderajoseph95/claude-intercom-help-center/actions/workflows/ci.yml) +[![CI](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/actions/workflows/ci.yml/badge.svg)](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) ![Node 18+](https://img.shields.io/badge/node-18%2B-brightgreen) ![Zero dependencies](https://img.shields.io/badge/dependencies-0-brightgreen) @@ -85,7 +85,7 @@ A real report, generated from the test fixtures: [examples/sample-output/help-ce ## Quick start (60 seconds) ```text -/plugin marketplace add oderajoseph95/claude-intercom-help-center +/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer /plugin install intercom-help-center@claude-intercom-help-center ``` @@ -109,23 +109,25 @@ You get `.help-center/help-center-audit.md`. From there: `/intercom-help-center: **From the plugin marketplace** (recommended): ```text -/plugin marketplace add oderajoseph95/claude-intercom-help-center +/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer /plugin install intercom-help-center@claude-intercom-help-center ``` -Pin a release instead of following `main`: `/plugin marketplace add oderajoseph95/claude-intercom-help-center@v3.0.0`. From a shell: `claude plugin marketplace add ...` and `claude plugin install ...` work the same way. +Pin a release instead of following `main`: `/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer#v3.0.1`. From a shell: `claude plugin marketplace add ...` and `claude plugin install ...` work the same way. + +**Windows:** if `marketplace add` fails with "SSH/HTTPS authentication failed" or "Filename too long", git hit Windows' 260-character path limit while cloning (the auth message is misleading). Run `git config --global core.longpaths true` once, then retry. **Without the marketplace** (try it, or develop on it): ```bash -git clone https://github.com/oderajoseph95/claude-intercom-help-center -claude --plugin-dir ./claude-intercom-help-center +git clone https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer +claude --plugin-dir ./Claude-Intercom-HelpCenter-Article-Writer ``` **As a plain skill** (no commands, agents or hooks; the core skill and its scripts only): ```bash -git clone https://github.com/oderajoseph95/claude-intercom-help-center /tmp/ihc +git clone https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer /tmp/ihc mkdir -p .claude/skills/intercom-help-center cp -r /tmp/ihc/skills/intercom-help-center/. /tmp/ihc/scripts /tmp/ihc/templates .claude/skills/intercom-help-center/ ``` @@ -296,6 +298,13 @@ Every error prints a code, its cause and its fix. The full list, generated from Then delete `.help-center/` and your copies of the workflow templates if you do not want them. Your articles stay in your repo and on Intercom. +## Contributing and support + +- **Questions and help:** [Discussions > Q&A](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/q-a) +- **Ideas:** [Discussions > Ideas](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/discussions/categories/ideas) +- **Bugs, feature requests, docs fixes:** [open an issue](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/issues/new/choose) (each has a short form) +- **Pull requests:** branch from `dev` and target `dev`; CI must pass and the maintainer reviews every change. Details in [CONTRIBUTING.md](CONTRIBUTING.md). + ## Contributing, security, license [CONTRIBUTING.md](CONTRIBUTING.md) · [SECURITY.md](SECURITY.md) (never commit tokens; report privately) · [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) · [CHANGELOG.md](CHANGELOG.md) · [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) diff --git a/SECURITY.md b/SECURITY.md index bcd1dbb..c5c99a5 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Reporting a vulnerability -Please report it privately: [open a security advisory](https://github.com/oderajoseph95/claude-intercom-help-center/security/advisories/new). Do not open a public issue. You will get an answer within a few days. +Please report it privately: [open a security advisory](https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer/security/advisories/new). Do not open a public issue. You will get an answer within a few days. Useful things to include: what an attacker could do, the steps to reproduce, and the version. diff --git a/docs/SETUP.md b/docs/SETUP.md index 37c736e..7d5c3a9 100644 --- a/docs/SETUP.md +++ b/docs/SETUP.md @@ -19,13 +19,19 @@ Without `gh`, branches are still pushed and you get a link to open the PR. Witho In Claude Code, from any folder: ```text -/plugin marketplace add oderajoseph95/claude-intercom-help-center +/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer /plugin install intercom-help-center@claude-intercom-help-center ``` What you see: `/plugin install` opens the plugin's details in the `/plugin` panel; choose install (user scope is fine). Check it loaded with `/plugin` (it lists 6 skills, 3 agents, 3 hooks) or `claude plugin details intercom-help-center` in a shell. -To pin a release instead of following `main`: `/plugin marketplace add oderajoseph95/claude-intercom-help-center@v3.0.0`. +To pin a release instead of following `main`: `/plugin marketplace add oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer#v3.0.1`. + +**If the install fails on Windows** with "SSH/HTTPS authentication failed" or "Filename too long": the real cause is git refusing a checkout path longer than Windows' 260-character limit, not your credentials. Run this once, then run the two commands again: + +```bash +git config --global core.longpaths true +``` ## 3. Create an Intercom access token diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 0944167..1dc4be7 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -17,6 +17,7 @@ Set `HELP_CENTER_DEBUG=1` to also print the stack trace of an unexpected error. | The stale reminder never fires | The edited file is not listed in any article's `sources:`, or `.help-center/config.json` does not exist | Add `sources:`; run setup | | The audit says every feature is uncovered | The features have no `label`, `keywords` or `strings` that appear in your articles | Add them to the manifest (see docs/CONFIG.md) | | Orphans that are clearly about a real feature | Same cause: the feature's words do not appear in the article | Add `keywords`/`strings` to that feature, or map the file with an `article:` cell | +| Windows: `/plugin marketplace add` fails with "SSH/HTTPS authentication failed" or "Filename too long" | git hit Windows' 260-character path limit while cloning into Claude Code's plugin folder; the authentication message is misleading | `git config --global core.longpaths true`, then retry the install | | `gh` works in your terminal but not for Claude | Claude Code started from a different shell or environment | Start `claude` from the terminal where `gh auth status` works | | Setup finds no strings | Your strings live in an unusual place or format | Pass `--strings path1,path2`; supported: JSON, YAML, .po, .strings, Android XML | diff --git a/examples/help-articles/articles/getting-started/how-do-i-export-my-orders-to-csv.md b/examples/help-articles/articles/getting-started/export-csv.md similarity index 100% rename from examples/help-articles/articles/getting-started/how-do-i-export-my-orders-to-csv.md rename to examples/help-articles/articles/getting-started/export-csv.md diff --git a/examples/help-articles/coverage-manifest.mjs b/examples/help-articles/coverage-manifest.mjs index 5488678..6e963bc 100644 --- a/examples/help-articles/coverage-manifest.mjs +++ b/examples/help-articles/coverage-manifest.mjs @@ -29,7 +29,7 @@ export function shipped({ root }) { return JSON.parse(readFileSync(join(root, "src/features.json"), "utf8")).shipped; } -const EXPORT_ARTICLE = "help-articles/articles/getting-started/how-do-i-export-my-orders-to-csv.md"; +const EXPORT_ARTICLE = "help-articles/articles/getting-started/export-csv.md"; export const FEATURES = { "csv-export": { diff --git a/templates/github/help-center-audit.yml b/templates/github/help-center-audit.yml index bbaa022..ed95b18 100644 --- a/templates/github/help-center-audit.yml +++ b/templates/github/help-center-audit.yml @@ -28,8 +28,8 @@ jobs: - uses: actions/checkout@v4 with: - repository: oderajoseph95/claude-intercom-help-center - ref: v3.0.0 + repository: oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer + ref: v3.0.1 path: .help-center-tool - uses: actions/setup-node@v4 diff --git a/templates/github/help-center-draft-fixes.yml b/templates/github/help-center-draft-fixes.yml index dc818f0..32eb916 100644 --- a/templates/github/help-center-draft-fixes.yml +++ b/templates/github/help-center-draft-fixes.yml @@ -51,8 +51,8 @@ jobs: - uses: actions/checkout@v4 with: - repository: oderajoseph95/claude-intercom-help-center - ref: v3.0.0 + repository: oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer + ref: v3.0.1 path: .help-center-tool - uses: actions/setup-node@v4 @@ -84,7 +84,7 @@ jobs: uses: anthropics/claude-code-action@v1 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} - plugin_marketplaces: "https://github.com/oderajoseph95/claude-intercom-help-center.git" + plugin_marketplaces: "https://github.com/oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer.git" plugins: "intercom-help-center@claude-intercom-help-center" prompt: | Use the intercom-help-center plugin. This is a non-interactive CI run: follow the diff --git a/templates/github/help-center-gate.yml b/templates/github/help-center-gate.yml index 0aeca48..da1d0b4 100644 --- a/templates/github/help-center-gate.yml +++ b/templates/github/help-center-gate.yml @@ -27,8 +27,8 @@ jobs: # The plugin's scripts, pinned to a release. Zero npm dependencies. - uses: actions/checkout@v4 with: - repository: oderajoseph95/claude-intercom-help-center - ref: v3.0.0 + repository: oderajoseph95/Claude-Intercom-HelpCenter-Article-Writer + ref: v3.0.1 path: .help-center-tool - uses: actions/setup-node@v4 diff --git a/test/hooks-gate-meta.test.mjs b/test/hooks-gate-meta.test.mjs index fac0d35..3db9264 100644 --- a/test/hooks-gate-meta.test.mjs +++ b/test/hooks-gate-meta.test.mjs @@ -60,7 +60,7 @@ export const tests = [ assert.match(onPost(input), /IHC083 1 help article/); assert.equal(onPost(input), null, "once per article per session"); assert.equal(onPost({ ...input, tool_input: { file_path: join(work, "src/other.js") } }), null); - assert.match(onStop({ cwd: work, session_id: "s1" }), /how-do-i-export-my-orders-to-csv\.md/); + assert.match(onStop({ cwd: work, session_id: "s1" }), /export-csv\.md/); assert.equal(onStop({ cwd: work, session_id: "s1" }), null, "cleared after Stop"); } finally { cleanup(work); } }], diff --git a/test/publish.test.mjs b/test/publish.test.mjs index 2d9940a..b0c6beb 100644 --- a/test/publish.test.mjs +++ b/test/publish.test.mjs @@ -5,7 +5,7 @@ import { createFakeIntercom } from "./fake-intercom.mjs"; import { makeWork, cleanup, capture, approvedPlan, noSleep, write } from "./helpers.mjs"; import { run as publish } from "../scripts/publish.mjs"; -const ARTICLE = "help-articles/articles/getting-started/how-do-i-export-my-orders-to-csv.md"; +const ARTICLE = "help-articles/articles/getting-started/export-csv.md"; const cols = () => [ { id: "1", name: "Billing", parent_id: null }, { id: "2", name: "Getting Started", parent_id: null }, @@ -181,7 +181,7 @@ export const tests = [ ["publish: a translation goes into the source article's translated_content", () => withFake({}, async ({ fake, work, pub }) => { approvedPlan(work); - write(join(work, "help-articles/articles/getting-started/how-do-i-export-my-orders-to-csv.fr.md"), `---\ntitle: "Comment exporter mes commandes ?"\nlocale: fr\ntranslation_of: "help-articles/articles/getting-started/how-do-i-export-my-orders-to-csv.md"\nstate: published\n---\n\nBonjour.\n`); + write(join(work, "help-articles/articles/getting-started/export-csv.fr.md"), `---\ntitle: "Comment exporter mes commandes ?"\nlocale: fr\ntranslation_of: "help-articles/articles/getting-started/export-csv.md"\nstate: published\n---\n\nBonjour.\n`); const r = await pub(["--publish"]); assert.equal(r.result, 0, r.out); const put = fake.writes().find((c) => c.method === "PUT" && c.body.translated_content);