Commit Graph

23 Commits (d2b59bb5e69e13b5dd782b0dd9c316f6d06ba709)

Author SHA1 Message Date
PeninsulaInd d2b59bb5e6 Use single Cora-For-Human folder for all xlsx reads
All handlers (BLM, content, OPT) now read Cora xlsx from one shared
folder (//PennQnap1/SHARE1/Cora-For-Human). Files stay in place after
processing so multiple task types can share the same report.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 15:46:43 -05:00
PeninsulaInd f4e642240c Add direct BLM handler for Link Building build stage
Replace Claude-based link building with direct subprocess calls to
Big-Link-Man CLI. The build stage now runs ingest-cora + generate-batch
deterministically without LLM involvement.

- New clickup_runner/blm.py: BLM subprocess runner (ported from old linkbuilding.py)
- New handler="blm" in skill_map for Link Building build stage
- Add BLMConfig to config.py (blm_dir, cora_inbox, timeout)
- Add task-specific fields (Keyword, CLIFlags, etc.) to build_prompt
- Strip YAML frontmatter from skill files in read_skill_file
- Skip orphaned AutoCora results with no state DB entry

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 15:22:55 -05:00
PeninsulaInd e0c19705b1 Add company name alias matching to PR pipeline
PR skill now matches ClickUp Client names against Aliases field in
companies.md and uses the canonical ## heading as the company name.
Fixes issue where PRs used ClickUp dropdown names (e.g. "Elasto Valve
Rubber (EVR)") instead of the correct company name ("EVR Products").
Added James Eagen Sons stub entry.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 10:49:39 -05:00
PeninsulaInd 80535d6c9e Add client delivery pipeline: Google Drive upload + Gmail drafts + reply tracking
Automates the PR delivery workflow: uploads .docx to Google Drive as Google Docs,
creates Gmail drafts with template-based emails and Ref: CU-<task_id> tracking tags,
and polls for client replies to update ClickUp tasks. Includes contact directory
with alias support, email template system, and manual CLI scripts for retries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 10:26:17 -05:00
PeninsulaInd e0388b1f6f Fix --tier1-count CLI flag + set Stage on task creation + update docs
- Fix --tier-1 -> --tier1-count in create_task_set.py and create-task-set.md skill
- Set initial Stage field when creating tasks (run_cora for most, draft for PR)
- Add Quick Reference section to clickup_runner README with stage tables
- Add Stage field docs to clickup-task-creation.md
- Remove stale xlsx_urls tests from test_claude_runner.py

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 10:17:52 -05:00
PeninsulaInd e4c7bc8e02 Add create_task_set CLI script + update company directory
New script replaces inline task creation commands with a proper CLI.
Supports all task types (NEW/OPT/LINKS/PR) with validation, dependencies,
per-type tag/date overrides, and custom fields.

Updated companies.md: renamed RPM Mechanical to RPM Industrial Rubber Parts,
added Royal Purple Industrial entry.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 09:40:31 -05:00
PeninsulaInd 935ab2d772 Add task set creation skill + ClickUp dependency support
Add add_dependency() to ClickUpClient and clickup_add_dependency chat tool
for setting "blocked by" relationships between tasks. New create-task-set
skill enables bundled task creation (LINKS, PR, NEW, OPT) with correct
fields, time estimates, due date offsets, and automatic dependencies.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:23:53 -05:00
PeninsulaInd bba634a63e Download ClickUp attachments to work dir before running Claude
- Added ClickUpClient.download_attachment() for fetching attachment files
- Runner now downloads all task attachments to the temp work dir before
  dispatching to claude -p. Claude reads local files instead of URLs.
- build_prompt() now lists local filenames, not ClickUp attachment URLs
- _collect_output_files() excludes pre-existing attachments so they
  don't get re-uploaded back to ClickUp
- Removed optimizer script steps from content_draft.md -- the outline
  stage already handles Cora parsing, draft just follows the outline

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:49:05 -05:00
PeninsulaInd 7679467bf8 Add content_draft.md skill + tighten entity correlation to -0.199
- New skills/content_draft.md: reads outline, writes full content draft
  with Cora-driven variation/entity/LSI optimization, generates meta tags
  (keyword | company | related searches format, 400-500 char description)
- Changed entity correlation threshold from -0.19 to -0.199 in
  cora_parser.py and all referencing docs
- Updated content_outline.md to match new threshold

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:34:56 -05:00
PeninsulaInd 9550d31190 Rewrite content_outline.md to single-file format
Clean editable outline on top (headings, word counts, section briefs),
writer's reference data on bottom (variation map, entity checklist,
top 20 LSI terms, entity rules). One file instead of two -- easier to
review on mobile via ClickUp attachments.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:04:08 -05:00
PeninsulaInd cf9d4da7c0 Add content_outline.md skill -- two-file version (outline + data)
First pass at the content outline skill for clickup_runner. Parses Cora
xlsx via cora_parser.py scripts, researches competitors, builds structured
outline with per-section word counts and variation placement. Produces
two output files: clean outline and Cora data reference.

May be reworked to single-file format after testing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 17:05:20 -05:00
PeninsulaInd cd0fea094c Rewrite PR skill for clickup_runner autonomous pipeline
- Rewrote skills/press_release_prompt.md for headless claude -p execution:
  generates 7 headlines, self-judges top 2, writes TWO complete press
  releases with different angles, generates JSON-LD schema for each
- Output: 5 files named by headline (e.g. "Company Headline Here.txt/.json")
- Merged schema generation from press-release-schema.md into single skill
- Added "Introduces" to headline tone trigger words
- Removed --bare flag from claude_runner.py (breaks OAuth auth)
- Documented headline tone trigger words in clickup-task-creation.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 14:24:36 -05:00
PeninsulaInd 0d5450fb65 Add ClickUp task creation via chat tool, skill, and CLI script
New create_task() and find_list_in_folder() methods on ClickUpClient,
clickup_create_task chat tool, create-task skill, and CLI script for
creating tasks in a client's Overall list with Client/Work Category fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:19:54 -05:00
PeninsulaInd 236b64c11c Add Cora report distribution watcher to route xlsx to pipeline inboxes
New watcher thread scans Z:/Cora-For-Human for post-macro Cora xlsx files,
matches them to ClickUp tasks by keyword, and copies to the appropriate
pipeline inbox (Z:/cora-inbox for Link Building, Z:/content-cora-inbox for
Content/OPO). Fixes issue where shared Cora reports left one pipeline's
tasks stuck in automation underway forever.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:07:03 -06:00
PeninsulaInd 84c81b6df4 Default PR headlines to awareness framing, only allow announcement language for actual news
- Added _is_actual_news() detection based on PR Topic field signals
  (e.g. "Actual News", "New Product", "Launch")
- Headline generator defaults to awareness verbs (Highlights, Reinforces,
  Delivers) and bans announcement verbs (Announces, Launches, Expands)
- Judge prompt disqualifies fabricated events for non-news topics
- Body writer prompt explicitly forbids inventing expansions, milestones,
  or demand claims — frames as existing capabilities
- Updated skill file to match awareness-by-default approach

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 08:54:06 -06:00
PeninsulaInd 0e3e3bc945 Wire scheduler to API/UI and improve loop control and PR headlines
- Pass scheduler instance to API router and UI for loop timestamps
  and force-run endpoints
- Add interruptible waits and force_heartbeat/force_poll methods
- Record last_run timestamps for all scheduler loops in KV store
- Update press release headline examples with real client headlines

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 21:18:29 -06:00
PeninsulaInd 0f4c77adc9 Add link building API endpoint and skill file
- /api/linkbuilding/status endpoint returns pending, in-progress,
  completed, and failed pipeline states for dashboard consumption
- skills/linkbuilding.md with YAML frontmatter linking tools and agents
- Skill body documents workflow, triggers, default flags, and ClickUp fields

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:09:00 -06:00
PeninsulaInd 0becf1dd89 Revert "Add link building agent with content generation pipeline"
This reverts commit 8a98b37725.
2026-02-19 18:38:51 -06:00
PeninsulaInd 8a98b37725 Add link building agent with content generation pipeline
New linkbuilder agent that handles ClickUp "Link Building" tasks.
For each keyword/company, generates three content pieces via the
execution brain: a guest article (500-700 words), a directory
listing, and a social media post — each with proper SEO anchor
text and backlinks. Integrates with ClickUp for status updates,
comments, and file attachments.

- cheddahbot/tools/linkbuilding.py: build_links tool with full pipeline
- skills/linkbuilding.md: skill prompt for SEO content generation
- config.yaml: linkbuilder agent config + Link Building skill_map entry
- tests/test_linkbuilding.py: 36 tests covering helpers, prompts,
  pipeline, file output, error handling, and ClickUp sync

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 11:52:06 -06:00
PeninsulaInd b18855f068 2.5: Add tools and agents fields to skill frontmatter
Both press release skill files now include:
- tools: lists which tool functions they relate to
- agents: [writer, default] for future multi-agent filtering

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 10:04:11 -06:00
PeninsulaInd 0bef1e71b3 1.1: Delete dead code and fix all lint errors
Remove unused modules that were never called at startup:
- cheddahbot/skills/__init__.py (dead @skill decorator system)
- cheddahbot/providers/__init__.py (empty placeholder)
- cheddahbot/tools/build_skill.py (depends on dead skills system)
- cheddahbot/tools/build_tool.py (security risk: generates arbitrary Python)

Also fix all pre-existing ruff lint errors across the codebase:
- Fix import sorting, unused imports, line length violations
- Fix type comparisons (use `is` instead of `==`)
- Fix implicit Optional types (dict -> dict | None)
- Fix unused variables, ambiguous variable names
- Apply ruff format for consistent style

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:56:36 -06:00
PeninsulaInd 5e9cef5e39 Add submit_press_release tool with Press Advantage API integration
Adds PressAdvantageClient API wrapper and submit_press_release tool that
posts finished press releases to PA as drafts. Auto-constructs SEO links
(brand+keyword → IMSURL, company name → SocialURL/GBP/homepage) with
fuzzy anchor matching and warnings when phrases can't be found. The PR
writing prompt now requests anchor text phrases and validates them after
generation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:37:41 -06:00
PeninsulaInd b3140d3522 Add autonomous press release pipeline tool
Implements write_press_releases tool that generates 7 headlines via chat
brain, AI-judges the best 2, writes 2 full press releases via execution
brain, and generates JSON-LD schemas via Sonnet with WebSearch. Saves all
output files to data/generated/press_releases/.

Also adds tools/model pass-through in agent and LLM layers, fixes Windows
command line length limit by piping prompts via stdin, and updates model
references to current versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:04:29 -06:00