feat: add Asana (CLI-first), Jira, and Google Chat connectors#180
feat: add Asana (CLI-first), Jira, and Google Chat connectors#180cvrysanek wants to merge 1 commit into
Conversation
Adds three connectors following the plugin's existing patterns: - Asana (`asana:cli`) — bundled dependency-light `asana-api` CLI (skills/asana-api/, Python stdlib only, PAT-based REST). Reads tasks/sections/comments/stories, posts comments incl. @mentions. claude.ai Asana MCP retained as runtime fallback. Bootstrap stages the script into the vault; `request` subcommand is the raw-REST hatch. - Jira (`jtk:jira`) — issue tracking, JQL search, sprint snapshot. - Google Chat (`gws:chat`) — space/DM monitoring, notifications. Includes connector phase logic, registry entries (connectors.yaml + snapshot + tests), per-connector setup docs, and scout-setup/status wiring. No changes to marketplace.json, plugin identity, or unrelated files. Tests: 870 passed. Plugin validate: passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2d1686d to
7a072a4
Compare
|
First off — thank you for this, @cvrysanek! 🙏 This is a genuinely substantial contribution: three connectors, a self-contained stdlib-only Asana CLI, setup docs, phase files, registry entries, and a snapshot test, all wired through the existing patterns. We're really happy to have it, and the CLI-first approach for Asana is a nice touch. Thanks also for the upfront offer to split into per-connector PRs and to drop the repo-local dev files — both are appreciated. I gave it a thorough review. The bones are solid (the registry↔snapshot counts line up at 14, the parser contract is untouched, and the Asana CLI itself is well-built). Two things stand out as blockers, and both trace back to what looks like a bad merge that resurrected the pre-engine manual setup wizard — None of this is a knock on the work — happy to pair on the fixes if you'd like (see the note at the bottom). Findings (most severe first)1. 2. 3. 4. 5. 6. 7. 8. Also worth addressing (lower severity)
Suggested path forwardI'd treat #1 and #2 as the blockers — everything else is very fixable. Taking you up on your offer, splitting into per-connector PRs (Asana / Jira / Google Chat) plus dropping the And genuinely — I'm happy to pair on the fixes with you if that's easier than a round-trip of review comments. I can take the |
Summary
Adds three connectors to Scout — Asana, Jira (
jtkCLI), and Google Chat (gwsCLI) — plus connector-priority sweeps and supporting docs. The Asana connector is CLI-first: it ships a bundled, dependency-lightasana-apiCLI (PAT-based REST wrapper) with the claude.ai Asana MCP as runtime fallback. Jira and Google Chat follow the existing external-CLI pattern.Connectors added
asana:cli) — bundledskills/asana-api/CLI (scripts/asana_api.py, Python stdlib only). Reads tasks/sections/comments/stories, posts comments incl.@mentions(Asana rich-text<a data-asana-gid>). MCP fallback retained. Bootstrap stages the script into the vault;requestsubcommand is the raw-REST escape hatch.jtk:jira) — issue tracking, JQL search, sprint snapshot, status sync. Setup doc covers API-token +jtk init.gws:chat) — space/DM monitoring, outbound tracking, notifications.Supporting changes
phases/connectors/{asana,jira,google-chat}.md— connector slot logic (inbound-scan / query / cross-check / update).engine/scout/connectors.yaml+connectors.snapshot.json+ snapshot test — registry entries (asana:cli,jtk:jira,gws:chat).commands/scout-setup.md,commands/scout-status.md— detection + status rows.engine/scout/docs/connectors/*-setup.md— per-connector setup walkthroughs (token acquisition + storage).templates/scout-config.yaml.tmpl— connector flags + per-connector config keys.phases/connectors/drive.md— explicit Gemini Meeting Notes sweep.Testing
cd engine && uv run pytest tests/unit/→ 870 passed (incl. newtest_install_stages_asana_api_cli).claude plugin validate .→ passed.jtkagainst real workspaces.Reviewer notes
asana_api.py(≈6.6k lines, stdlib-only, self-contained).AGENTS.md,CLAUDE.mddev notes,engine/uv.lock) — flag if you'd rather I drop them from the contribution.