Compare commits

..

31 Commits

Author SHA1 Message Date
github-actions[bot]
bfafc291c9 chore(release): Update version to v1.4.396 2026-01-30 06:10:15 +00:00
Kayvan Sylvan
6ad895ba12 Merge pull request #1978 from ksylvan/kayvan/no-anthropic-oauth
chore: remove OAuth support from Anthropic client
2026-01-29 22:07:53 -08:00
Kayvan Sylvan
55c6092899 chore: incoming 1978 changelog entry 2026-01-29 20:00:17 -08:00
Kayvan Sylvan
9f752f45af chore: remove OAuth support from Anthropic client
- Remove OAuth support from Anthropic client
- Delete `oauth.go` and related test files
- Simplify `IsConfigured` to check only API key
- Update configuration handling to remove OAuth references
- Clean up imports and unused variables in `anthropic.go`
- Adjust `GetConfig` and `UpdateConfig` methods in server configuration
- Remove OAuth-related environment variables from configuration
2026-01-29 19:49:50 -08:00
Kayvan Sylvan
25738f0de4 docs: fix ChangeLog snippet for PR 1975 2026-01-27 23:31:59 -08:00
Kayvan Sylvan
5330d9c173 Merge pull request #1975 from koriyoshi2041/add-suggest-clawdbot-command-pattern
feat: add suggest_moltbot_command pattern for Moltbot (formerly Clawdbot) CLI
2026-01-27 23:23:03 -08:00
Kayvan Sylvan
99b426a2af chore: incoming 1975 changelog entry 2026-01-27 23:14:10 -08:00
Kayvan Sylvan
7a5bf27bd2 refactor: rename clawdbot pattern to moltbot across the codebase
## CHANGES

- Rename `suggest_clawdbot_command` pattern to `suggest_moltbot_command`
- Replace all `clawdbot` CLI references with `moltbot` in pattern docs
- Update command examples to use new `moltbot` binary name
- Add new dictionary words for VSCode spellcheck (Moltbot, schtasks, etc.)
- Fix markdown formatting with proper table alignment
2026-01-27 23:13:33 -08:00
kigland
c0d92ff1d7 fix: resolve multi-command output format inconsistency
Address Copilot review: clarify that multiple commands should be
combined on a single line with && to preserve head -1 behavior,
with follow-up steps described in the explanation section.
2026-01-28 02:24:06 +08:00
kigland
906c648d9f chore: incoming 1975 changelog entry 2026-01-28 02:16:43 +08:00
kigland
be7af5191e feat: add suggest_clawdbot_command pattern
Add a new pattern for suggesting Clawdbot CLI commands based on
natural language intent. Clawdbot is an open-source AI agent framework
(github.com/clawdbot/clawdbot) that connects LLMs to messaging
platforms, devices, and developer tools.

This follows the same structure as suggest_gt_command: command
reference tables, intent mapping, and a pipe-friendly output format
where the first line is the executable command.

All commands verified against clawdbot help and subcommand --help
output (v2026.1.23).
2026-01-28 01:48:35 +08:00
github-actions[bot]
92818294cf chore(release): Update version to v1.4.395 2026-01-25 23:18:34 +00:00
Kayvan Sylvan
1af12c5d98 Merge pull request #1972 from ksylvan/kayvan/more-dependabot-fixes
More node package updates: remove cn, fix string and request vulnerabilities
2026-01-25 15:16:14 -08:00
Kayvan Sylvan
f80663c771 chore: incoming 1972 changelog entry 2026-01-25 15:12:45 -08:00
Kayvan Sylvan
5d93f126d4 security: remove cn package to fix string and request vulnerabilities
Removes the cn (Chuck Norris jokes) package which was pulling in
vulnerable versions of string and request packages with no patches
available. This resolves 5 Dependabot alerts:
- Alert #52: string package (HIGH) - ReDoS
- Alert #35: string package (HIGH) - ReDoS
- Alert #61: request package (MEDIUM) - SSRF
- Alert #44: request package (MEDIUM) - SSRF
- Alert #38: request package (MEDIUM) - Remote Memory Exposure

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 15:07:41 -08:00
github-actions[bot]
4d60f24517 chore(release): Update version to v1.4.394 2026-01-25 22:49:06 +00:00
Kayvan Sylvan
c902e34f0f Merge pull request #1971 from ksylvan/kayvan/dependabot-security-fixes
Security fix high medium low priority dependabot alerts for npm dependencies
2026-01-25 14:46:46 -08:00
Kayvan Sylvan
b41bd17caf chore: incoming 1971 changelog entry 2026-01-25 14:44:08 -08:00
Kayvan Sylvan
876f2ab82e Merge branch 'main' into kayvan/dependabot-security-fixes 2026-01-25 14:38:47 -08:00
Kayvan Sylvan
5220f89706 security: fix low severity @eslint/plugin-kit ReDoS vulnerability
Fix Dependabot alert #94 (LOW):
- @eslint/plugin-kit vulnerability: Regular Expression Denial of Service
  through ConfigCommentParser
- Updated from 0.2.8 (vulnerable) to 0.5.1 via pnpm/npm overrides

Build verified successful. All tests pass.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 14:36:47 -08:00
Kayvan Sylvan
f151646838 security: fix medium severity esbuild vulnerability
Fix Dependabot alert #76 (MEDIUM):
- esbuild vulnerability: allows any website to send requests to
  development server and read responses
- Updated from 0.21.5 (vulnerable) to 0.27.2 via pnpm/npm overrides

Build verified successful. All tests pass.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 14:26:27 -08:00
github-actions[bot]
f87f6b5d95 chore(release): Update version to v1.4.393 2026-01-25 22:04:02 +00:00
Kayvan Sylvan
7e2656bfa5 Merge pull request #1969 from ksylvan/kayvan/dependabot-security-fixes
Critical and High Impact NPM dependabot issues fixed
2026-01-25 14:01:35 -08:00
Kayvan Sylvan
e7367ded17 chore: incoming 1969 changelog entry 2026-01-25 13:56:10 -08:00
Kayvan Sylvan
03a496912f security: add npm support with package-lock.json for dual package manager compatibility
Changes:
- Added npm "overrides" section to package.json alongside existing pnpm overrides
- Generated and tracked package-lock.json with security fixes applied
- Removed web/package-lock.json from .gitignore to support npm users
- Both npm and pnpm now enforce secure dependency versions

This enables developers to use either pnpm or npm while maintaining
consistent security posture across both package managers.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 13:53:00 -08:00
Kayvan Sylvan
b59f381aac security: fix critical ollama authentication vulnerability
Fix Dependabot alert #107 (CRITICAL):
- github.com/ollama/ollama vulnerability: missing authentication enabling
  unauthorized model management operations
- Updated from v0.13.5 (vulnerable) to v0.15.1 (latest stable)

All Go tests pass. Build verified successful.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 13:30:28 -08:00
Kayvan Sylvan
75c2e16a90 security: fix critical and high priority npm vulnerabilities
Fix Dependabot alerts:
- Alert #92 (CRITICAL): form-data < 2.5.4 → upgraded to 4.0.5
- Alert #103 (HIGH): glob vulnerable to command injection → ≥10.5.0
- Alert #108 (HIGH): qs DoS vulnerability → upgraded to 6.14.1

Added pnpm overrides to enforce secure versions across dependency tree.
Build and dependency installation verified successful.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 13:29:25 -08:00
Kayvan Sylvan
9c2fc25872 chore: remove deprecated wisdom extraction patterns from pattern libraries
- Remove extract_wisdom_short from pattern descriptions catalog
- Drop extract_wisdomjm pattern extract definition
- Delete extract_wisdom_short extract template block
2026-01-25 13:18:15 -08:00
github-actions[bot]
fe4f729eae chore(release): Update version to v1.4.392 2026-01-25 18:18:03 +00:00
Kayvan Sylvan
7f15553c71 Merge pull request #1968 from ksylvan/kayvan/add-extract-all-quotes
New `extract_all_quotes` and move misplaced patterns
2026-01-25 10:15:41 -08:00
Kayvan Sylvan
8075209d9e fix: New extract_all_quotes and move misplaced patterns
- Move pattern files from patterns/ to data/patterns/
- Add create_bd_issue pattern for issue tracking commands
- Add extract_all_quotes pattern for quote extraction
- Add extract_bd_ideas pattern for actionable idea extraction
- Add suggest_gt_command pattern for GT command suggestions
- Update pattern_explanations.md with new pattern entries
- Update suggest_pattern system.md with new categories
- Add new pattern descriptions and extracts in scripts/
- chore: incoming 1968 changelog entry
2026-01-25 10:11:33 -08:00
28 changed files with 7782 additions and 1736 deletions

31
.gitignore vendored
View File

@@ -91,35 +91,6 @@ target/
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
@@ -342,8 +313,6 @@ web/.svelte-kit
# End of https://www.toptal.com/developers/gitignore/api/node
web/myfiles/Obsidian_perso_not_share/
ENV
web/package-lock.json
.gitignore_backup
web/static/*.png

View File

@@ -30,6 +30,7 @@
"creatordate",
"curcontext",
"custompatterns",
"Daemonized",
"danielmiessler",
"davidanson",
"Debugf",
@@ -128,8 +129,11 @@
"Miessler",
"modeline",
"modelines",
"Moltbot",
"mpga",
"mvdan",
"mychat",
"mygroup",
"nicksnyder",
"nixpkgs",
"nometa",
@@ -167,6 +171,7 @@
"Sadaltager",
"samber",
"sashabaranov",
"schtasks",
"sdist",
"seaborn",
"semgrep",

View File

@@ -1,8 +1,75 @@
# Changelog
## v1.4.396 (2026-01-30)
### PR [#1975](https://github.com/danielmiessler/Fabric/pull/1975) by [koriyoshi2041](https://github.com/koriyoshi2041): feat: add suggest_moltbot_command pattern for Moltbot (formerly Clawdbot) CLI
- Added new pattern for suggesting Moltbot CLI commands based on natural language intent
- Fixed multi-command output format inconsistency to preserve pipe-friendly behavior
- Updated all CLI references and command examples to use new `moltbot` binary name
- Added new dictionary words for VSCode spellcheck and fixed markdown table formatting
### PR [#1978](https://github.com/danielmiessler/Fabric/pull/1978) by [ksylvan](https://github.com/ksylvan): chore: remove OAuth support from Anthropic client
- Remove OAuth support from Anthropic client and delete related OAuth files
- Simplify configuration handling to check only API key instead of OAuth credentials
- Clean up imports and unused variables in anthropic.go
- Update server configuration methods to remove OAuth references
- Remove OAuth-related environment variables from configuration
### Direct commits
- Docs: fix ChangeLog snippet for PR 1975
## v1.4.395 (2026-01-25)
### PR [#1972](https://github.com/danielmiessler/Fabric/pull/1972) by [ksylvan](https://github.com/ksylvan): More node package updates: remove cn, fix string and request vulnerabilities
- Removed cn (Chuck Norris jokes) package to resolve security vulnerabilities
- Fixed 5 Dependabot alerts including ReDoS vulnerabilities in string package and SSRF/Remote Memory Exposure issues in request package
- Enhanced security posture by eliminating vulnerable dependencies with no available patches
## v1.4.394 (2026-01-25)
### PR [#1971](https://github.com/danielmiessler/Fabric/pull/1971) by [ksylvan](https://github.com/ksylvan): Security fix high medium low priority dependabot alerts for npm dependencies
- Fixed medium severity esbuild vulnerability that allowed websites to send requests to development server and read responses
- Updated esbuild from vulnerable version 0.21.5 to secure version 0.27.2
- Fixed low severity @eslint/plugin-kit ReDoS vulnerability through ConfigCommentParser
- Updated @eslint/plugin-kit from vulnerable version 0.2.8 to secure version 0.5.1
- Verified all builds and tests pass successfully after security updates
## v1.4.393 (2026-01-25)
### PR [#1969](https://github.com/danielmiessler/Fabric/pull/1969) by [ksylvan](https://github.com/ksylvan): Critical and High Impact NPM dependabot issues fixed
- Security: fix critical and high priority npm vulnerabilities including form-data upgrade to 4.0.5, glob upgrade to ≥10.5.0, and qs upgrade to 6.14.1
- Security: fix critical ollama authentication vulnerability by updating from v0.13.5 to v0.15.1 to prevent unauthorized model management operations
- Security: add npm support with package-lock.json for dual package manager compatibility, enabling both npm and pnpm users to maintain consistent security posture
### Direct commits
- Chore: remove deprecated wisdom extraction patterns from pattern libraries
- Remove extract_wisdom_short from pattern descriptions catalog
- Drop extract_wisdomjm pattern extract definition
- Delete extract_wisdom_short extract template block
## v1.4.392 (2026-01-25)
### PR [#1968](https://github.com/danielmiessler/Fabric/pull/1968) by [ksylvan](https://github.com/ksylvan): New `extract_all_quotes` and move misplaced patterns
- Move orphaned pattern files from patterns/ to data/patterns/
- Add extract_all_quotes pattern for quote extraction
- The extract_all_quotes is originally from [PR #176](https://github.com/danielmiessler/Fabric/pull/176) by [@CPAtoCybersecurity](https://github.com/CPAtoCybersecurity)
- The `suggest_pattern` pattern is updated with the following additions.
- extract_bd_ideas for actionable idea extraction
- suggest_gt_command for GT command suggestions
- create_bd_issue for issue tracking commands
## v1.4.391 (2026-01-24)
MiniMax unexpected status code: 404 from provider MiniMax, response body: 404 page not found
### PR [#1965](https://github.com/danielmiessler/Fabric/pull/1965) by [infinitelyloopy-bt](https://github.com/infinitelyloopy-bt): fix(azure): Fix deployment URL path for Azure OpenAI API
- Fixed deployment URL path construction for Azure OpenAI API to correctly include deployment names in request URLs
@@ -13,11 +80,10 @@ MiniMax unexpected status code: 404 from provider MiniMax, response body: 404 pa
## v1.4.390 (2026-01-24)
MiniMax unexpected status code: 404 from provider MiniMax, response body: 404 page not found
### PR [#1964](https://github.com/danielmiessler/Fabric/pull/1964) by [jessesep](https://github.com/jessesep): feat: add design system, golden rules, and discord structure patterns
- Added create_design_system pattern to generate CSS design systems with tokens, typography scales, and dark/light mode support from requirements
- Added create_golden_rules pattern to extract implicit and explicit rules from codebases into testable, enforceable guidelines
- Added create_golden_rules pattern to extract implicit and explicit rules from codebases into testable, enforceable guidelines
- Added analyze_discord_structure pattern to audit Discord server organization, permissions, and naming conventions
### PR [#1967](https://github.com/danielmiessler/Fabric/pull/1967) by [ksylvan](https://github.com/ksylvan): chore: add MiniMax provider support and update API endpoints

View File

@@ -114,7 +114,6 @@ Below are the **new features and capabilities** we've added (newest first):
- [v1.4.246](https://github.com/danielmiessler/fabric/releases/tag/v1.4.246) (Jul 14, 2025) — **Automatic ChangeLog Updates**: Add AI-powered changelog generation with high-performance Go tool and comprehensive caching
- [v1.4.245](https://github.com/danielmiessler/fabric/releases/tag/v1.4.245) (Jul 11, 2025) — **Together AI**: Together AI Support with OpenAI Fallback Mechanism Added
- [v1.4.232](https://github.com/danielmiessler/fabric/releases/tag/v1.4.232) (Jul 6, 2025) — **Add Custom**: Add Custom Patterns Directory Support
- [v1.4.231](https://github.com/danielmiessler/fabric/releases/tag/v1.4.231) (Jul 5, 2025) — **OAuth Auto-Auth**: OAuth Authentication Support for Anthropic (Use your Max Subscription)
- [v1.4.230](https://github.com/danielmiessler/fabric/releases/tag/v1.4.230) (Jul 5, 2025) — **Model Management**: Add advanced image generation parameters for OpenAI models with four new CLI flags
- [v1.4.227](https://github.com/danielmiessler/fabric/releases/tag/v1.4.227) (Jul 4, 2025) — **Add Image**: Add Image Generation Support to Fabric
- [v1.4.226](https://github.com/danielmiessler/fabric/releases/tag/v1.4.226) (Jul 4, 2025) — **Web Search**: OpenAI Plugin Now Supports Web Search Functionality

View File

@@ -1,3 +1,3 @@
package main
var version = "v1.4.391"
var version = "v1.4.396"

Binary file not shown.

View File

@@ -0,0 +1,69 @@
# IDENTITY and PURPOSE
You are an expert at extracting all of the inspirational, educational quotes and aphorisms from Founders or notable individuals quoted in their biographies, from a given transcript such a from a podcast, video transcript, essay, or whatever.
# Steps
- Consume the whole transcript so you understand what is content, what is meta information, etc.
- Output the following:
## QUOTES
- $Quote1$
- $Quote2$
- $Quote3$
- And so on…
## EXAMPLE OUTPUT
## QUOTES
1. "It sometimes pays an agency to be imaginative and unorthodox in hiring."
2. "The best ideas come as jokes."
3. "If it doesn't sell, it isn't creative."
4. "Hire people who are better than you are, then leave them to get on with it."
5. "Every ad must tell the wholesale story."
6. "Permanent success has rarely been built on frivolity and that people do not buy from clowns."
7. "Superlatives have no place in a serious advertisement."
8. "In general, study the methods of your competitors and do the exact opposite."
9. "The worst fault a salesman can commit is to be a bore."
10. "Quality of salesmanship involves energy, time, and knowledge of the product."
11. "Appeal to the interest of the person you're selling to."
12. "Use social proof and then avoid mentioning your competitors."
13. "Pay peanuts and you get monkeys."
14. "A blind pig can sometimes find truffles, but it helps to know that they're found in oak forests."
15. "Search all the parks in your cities, you'll find no statues of committees."
16. "Hire gentlemen with brains and be one too."
17. "You train an animal. You teach a person."
18. "Ogilvy and Mather does two things. We look after clients and we teach young advertising people."
19. "Always think service first."
20. "Make it memorable."
21. "Unless your advertising contains a big idea, it will pass like a ship in the night."
22. "You cannot bore people into buying your product."
23. "I prefer a posture of confident authority."
24. "You have a first-class mind. Stretch it."
25. "I wrote what I really believe, my last will and testament."
26. "I have outlived all my competitors."
27. "Don't be a dull bore. We can't save souls in an empty church."
28. "Change the name of your agency to Ogilvy."
29. "Decide what you want to be known for and then stick to it."
30. "Any damn fool can put on a deal. But it takes genius, faith, and perseverance to create a brand."
31. "If you ever find a man who is better than you are, hire him."
32. "Raise your sights, blaze new trails, compete with the immortals."
33. "I prefer the discipline of knowledge to the anarchy of ignorance."
34. "Only first-class business and that in a first-class way."
35. "Never run an advertisement you would not want your own family to see."
36. "The line between pride in our work and neurotic obstinacy is a narrow one."
37. "We have a habit of divine discontent with our performance."
38. "We like reports and correspondence to be well written, easy to read and short."
## END EXAMPLE OUTPUT
# OUTPUT INSTRUCTIONS
- List all quotes
- Do not output warnings or notes—just the requested sections
# INPUT:
INPUT:

View File

@@ -55,185 +55,191 @@
51. **create_aphorisms**: Find and generate a list of brief, witty statements.
52. **create_art_prompt**: Generates a detailed, compelling visual description of a concept, including stylistic references and direct AI instructions for creating art.
53. **create_better_frame**: Identifies and analyzes different frames of interpreting reality, emphasizing the power of positive, productive lenses in shaping outcomes.
54. **create_coding_feature**: Generates secure and composable code features using modern technology and best practices from project specifications.
55. **create_coding_project**: Generate wireframes and starter code for any coding ideas that you have.
56. **create_command**: Helps determine the correct parameters and switches for penetration testing tools based on a brief description of the objective.
57. **create_conceptmap**: Transforms unstructured text or markdown content into an interactive HTML concept map using Vis.js by extracting key concepts and their logical relationships.
58. **create_cyber_summary**: Summarizes cybersecurity threats, vulnerabilities, incidents, and malware with a 25-word summary and categorized bullet points, after thoroughly analyzing and mapping the provided input.
59. **create_design_system**: Create comprehensive CSS design systems with tokens, typography, spacing, and components.
60. **create_design_document**: Creates a detailed design document for a system using the C4 model, addressing business and security postures, and including a system context diagram.
61. **create_diy**: Creates structured "Do It Yourself" tutorial patterns by analyzing prompts, organizing requirements, and providing step-by-step instructions in Markdown format.
62. **create_excalidraw_visualization**: Creates complex Excalidraw diagrams to visualize relationships between concepts and ideas in structured format.
63. **create_flash_cards**: Creates flashcards for key concepts, definitions, and terms with question-answer format for educational purposes.
64. **create_formal_email**: Crafts professional, clear, and respectful emails by analyzing context, tone, and purpose, ensuring proper structure and formatting.
65. **create_git_diff_commit**: Generates Git commands and commit messages for reflecting changes in a repository, using conventional commits and providing concise shell commands for updates.
66. **create_golden_rules**: Extract enforceable rules from codebases to prevent common mistakes and ensure consistency.
67. **create_graph_from_input**: Generates a CSV file with progress-over-time data for a security program, focusing on relevant metrics and KPIs.
68. **create_hormozi_offer**: Creates a customized business offer based on principles from Alex Hormozi's book, "$100M Offers."
69. **create_idea_compass**: Organizes and structures ideas by exploring their definition, evidence, sources, and related themes or consequences.
70. **create_investigation_visualization**: Creates detailed Graphviz visualizations of complex input, highlighting key aspects and providing clear, well-annotated diagrams for investigative analysis and conclusions.
71. **create_keynote**: Creates TED-style keynote presentations with a clear narrative, structured slides, and speaker notes, emphasizing impactful takeaways and cohesive flow.
72. **create_loe_document**: Creates detailed Level of Effort documents for estimating work effort, resources, and costs for tasks or projects.
73. **create_logo**: Creates simple, minimalist company logos without text, generating AI prompts for vector graphic logos based on input.
74. **create_markmap_visualization**: Transforms complex ideas into clear visualizations using MarkMap syntax, simplifying concepts into diagrams with relationships, boxes, arrows, and labels.
75. **create_mermaid_visualization**: Creates detailed, standalone visualizations of concepts using Mermaid (Markdown) syntax, ensuring clarity and coherence in diagrams.
76. **create_mermaid_visualization_for_github**: Creates standalone, detailed visualizations using Mermaid (Markdown) syntax to effectively explain complex concepts, ensuring clarity and precision.
77. **create_micro_summary**: Summarizes content into a concise, 20-word summary with main points and takeaways, formatted in Markdown.
78. **create_mnemonic_phrases**: Creates memorable mnemonic sentences from given words to aid in memory retention and learning.
79. **create_network_threat_landscape**: Analyzes open ports and services from a network scan and generates a comprehensive, insightful, and detailed security threat report in Markdown.
80. **create_newsletter_entry**: Condenses provided article text into a concise, objective, newsletter-style summary with a title in the style of Frontend Weekly.
81. **create_npc**: Generates a detailed D&D 5E NPC, including background, flaws, stats, appearance, personality, goals, and more in Markdown format.
82. **create_pattern**: Extracts, organizes, and formats LLM/AI prompts into structured sections, detailing the AI's role, instructions, output format, and any provided examples for clarity and accuracy.
83. **create_prd**: Creates a precise Product Requirements Document (PRD) in Markdown based on input.
84. **create_prediction_block**: Extracts and formats predictions from input into a structured Markdown block for a blog post.
85. **create_quiz**: Creates a three-phase reading plan based on an author or topic to help the user become significantly knowledgeable, including core, extended, and supplementary readings.
86. **create_reading_plan**: Generates review questions based on learning objectives from the input, adapted to the specified student level, and outputs them in a clear markdown format.
87. **create_recursive_outline**: Breaks down complex tasks or projects into manageable, hierarchical components with recursive outlining for clarity and simplicity.
88. **create_report_finding**: Creates a detailed, structured security finding report in markdown, including sections on Description, Risk, Recommendations, References, One-Sentence-Summary, and Quotes.
89. **create_rpg_summary**: Summarizes an in-person RPG session with key events, combat details, player stats, and role-playing highlights in a structured format.
90. **create_security_update**: Creates concise security updates for newsletters, covering stories, threats, advisories, vulnerabilities, and a summary of key issues.
91. **create_show_intro**: Creates compelling short intros for podcasts, summarizing key topics and themes discussed in the episode.
92. **create_sigma_rules**: Extracts Tactics, Techniques, and Procedures (TTPs) from security news and converts them into Sigma detection rules for host-based detections.
93. **create_story_about_people_interaction**: Analyze two personas, compare their dynamics, and craft a realistic, character-driven story from those insights.
94. **create_story_about_person**: Creates compelling, realistic short stories based on psychological profiles, showing how characters navigate everyday problems using strategies consistent with their personality traits.
95. **create_story_explanation**: Summarizes complex content in a clear, approachable story format that makes the concepts easy to understand.
96. **create_stride_threat_model**: Create a STRIDE-based threat model for a system design, identifying assets, trust boundaries, data flows, and prioritizing threats with mitigations.
97. **create_summary**: Summarizes content into a 20-word sentence, 10 main points (16 words max), and 5 key takeaways in Markdown format.
98. **create_tags**: Identifies at least 5 tags from text content for mind mapping tools, including authors and existing tags if present.
99. **create_threat_scenarios**: Identifies likely attack methods for any system by providing a narrative-based threat model, balancing risk and opportunity.
100. **create_ttrc_graph**: Creates a CSV file showing the progress of Time to Remediate Critical Vulnerabilities over time using given data.
101. **create_ttrc_narrative**: Creates a persuasive narrative highlighting progress in reducing the Time to Remediate Critical Vulnerabilities metric over time.
102. **create_upgrade_pack**: Extracts world model and task algorithm updates from content, providing beliefs about how the world works and task performance.
103. **create_user_story**: Writes concise and clear technical user stories for new features in complex software programs, formatted for all stakeholders.
104. **create_video_chapters**: Extracts interesting topics and timestamps from a transcript, providing concise summaries of key moments.
105. **create_visualization**: Transforms complex ideas into visualizations using intricate ASCII art, simplifying concepts where necessary.
106. **dialog_with_socrates**: Engages in deep, meaningful dialogues to explore and challenge beliefs using the Socratic method.
107. **enrich_blog_post**: Enhances Markdown blog files by applying instructions to improve structure, visuals, and readability for HTML rendering.
108. **explain_code**: Explains code, security tool output, configuration text, and answers questions based on the provided input.
109. **explain_docs**: Improves and restructures tool documentation into clear, concise instructions, including overviews, usage, use cases, and key features.
110. **explain_math**: Helps you understand mathematical concepts in a clear and engaging way.
111. **explain_project**: Summarizes project documentation into clear, concise sections covering the project, problem, solution, installation, usage, and examples.
112. **explain_terms**: Produces a glossary of advanced terms from content, providing a definition, analogy, and explanation of why each term matters.
113. **export_data_as_csv**: Extracts and outputs all data structures from the input in properly formatted CSV data.
114. **extract_algorithm_update_recommendations**: Extracts concise, practical algorithm update recommendations from the input and outputs them in a bulleted list.
115. **extract_article_wisdom**: Extracts surprising, insightful, and interesting information from content, categorizing it into sections like summary, ideas, quotes, facts, references, and recommendations.
116. **extract_book_ideas**: Extracts and outputs 50 to 100 of the most surprising, insightful, and interesting ideas from a book's content.
117. **extract_book_recommendations**: Extracts and outputs 50 to 100 practical, actionable recommendations from a book's content.
118. **extract_business_ideas**: Extracts top business ideas from content and elaborates on the best 10 with unique differentiators.
119. **extract_characters**: Identify all characters (human and non-human), resolve their aliases and pronouns into canonical names, and produce detailed descriptions of each character's role, motivations, and interactions ranked by narrative importance.
120. **extract_controversial_ideas**: Extracts and outputs controversial statements and supporting quotes from the input in a structured Markdown list.
121. **extract_core_message**: Extracts and outputs a clear, concise sentence that articulates the core message of a given text or body of work.
122. **extract_ctf_writeup**: Extracts a short writeup from a warstory-like text about a cyber security engagement.
123. **extract_domains**: Extracts domains and URLs from content to identify sources used for articles, newsletters, and other publications.
124. **extract_extraordinary_claims**: Extracts and outputs a list of extraordinary claims from conversations, focusing on scientifically disputed or false statements.
125. **extract_ideas**: Extracts and outputs all the key ideas from input, presented as 15-word bullet points in Markdown.
126. **extract_insights**: Extracts and outputs the most powerful and insightful ideas from text, formatted as 16-word bullet points in the INSIGHTS section, also IDEAS section.
127. **extract_insights_dm**: Extracts and outputs all valuable insights and a concise summary of the content, including key points and topics discussed.
128. **extract_instructions**: Extracts clear, actionable step-by-step instructions and main objectives from instructional video transcripts, organizing them into a concise list.
129. **extract_jokes**: Extracts jokes from text content, presenting each joke with its punchline in separate bullet points.
130. **extract_latest_video**: Extracts the latest video URL from a YouTube RSS feed and outputs the URL only.
131. **extract_main_activities**: Extracts key events and activities from transcripts or logs, providing a summary of what happened.
132. **extract_main_idea**: Extracts the main idea and key recommendation from the input, summarizing them in 15-word sentences.
133. **extract_mcp_servers**: Identify and summarize Model Context Protocol (MCP) servers referenced in the input along with their key details.
134. **extract_most_redeeming_thing**: Extracts the most redeeming aspect from an input, summarizing it in a single 15-word sentence.
135. **extract_patterns**: Extracts and analyzes recurring, surprising, and insightful patterns from input, providing detailed analysis and advice for builders.
136. **extract_poc**: Extracts proof of concept URLs and validation methods from security reports, providing the URL and command to run.
137. **extract_predictions**: Extracts predictions from input, including specific details such as date, confidence level, and verification method.
138. **extract_primary_problem**: Extracts the primary problem with the world as presented in a given text or body of work.
139. **extract_primary_solution**: Extracts the primary solution for the world as presented in a given text or body of work.
140. **extract_product_features**: Extracts and outputs a list of product features from the provided input in a bulleted format.
141. **extract_questions**: Extracts and outputs all questions asked by the interviewer in a conversation or interview.
142. **extract_recipe**: Extracts and outputs a recipe with a short meal description, ingredients with measurements, and preparation steps.
143. **extract_recommendations**: Extracts and outputs concise, practical recommendations from a given piece of content in a bulleted list.
144. **extract_references**: Extracts and outputs a bulleted list of references to art, stories, books, literature, and other sources from content.
145. **extract_skills**: Extracts and classifies skills from a job description into a table, separating each skill and classifying it as either hard or soft.
146. **extract_song_meaning**: Analyzes a song to provide a summary of its meaning, supported by detailed evidence from lyrics, artist commentary, and fan analysis.
147. **extract_sponsors**: Extracts and lists official sponsors and potential sponsors from a provided transcript.
148. **extract_videoid**: Extracts and outputs the video ID from any given URL.
149. **extract_wisdom**: Extracts surprising, insightful, and interesting information from text on topics like human flourishing, AI, learning, and more.
150. **extract_wisdom_agents**: Extracts valuable insights, ideas, quotes, and references from content, emphasizing topics like human flourishing, AI, learning, and technology.
151. **extract_wisdom_with_attribution**: Extracts insightful ideas and recommendations with speaker attribution for quotes, focusing on life wisdom and human flourishing.
152. **extract_wisdom_dm**: Extracts all valuable, insightful, and thought-provoking information from content, focusing on topics like human flourishing, AI, learning, and technology.
153. **extract_wisdom_nometa**: Extracts insights, ideas, quotes, habits, facts, references, and recommendations from content, focusing on human flourishing, AI, technology, and related topics.
154. **find_female_life_partner**: Analyzes criteria for finding a female life partner and provides clear, direct, and poetic descriptions.
155. **find_hidden_message**: Extracts overt and hidden political messages, justifications, audience actions, and a cynical analysis from content.
156. **find_logical_fallacies**: Identifies and analyzes fallacies in arguments, classifying them as formal or informal with detailed reasoning.
157. **fix_typos**: Proofreads and corrects typos, spelling, grammar, and punctuation errors in text.
158. **generate_code_rules**: Compile best-practice coding rules and guardrails for AI-assisted development workflows from the provided content.
159. **get_wow_per_minute**: Determines the wow-factor of content per minute based on surprise, novelty, insight, value, and wisdom, measuring how rewarding the content is for the viewer.
160. **greybeard_secure_prompt_engineer**: Creates secure, production-grade system prompts with NASA-style mission assurance, outputting hardened prompts, injection test suites, and evaluation rubrics.
161. **heal_person**: Develops a comprehensive plan for spiritual and mental healing based on psychological profiles, providing personalized recommendations for mental health improvement and overall life enhancement.
162. **humanize**: Rewrites AI-generated text to sound natural, conversational, and easy to understand, maintaining clarity and simplicity.
163. **identify_dsrp_distinctions**: Encourages creative, systems-based thinking by exploring distinctions, boundaries, and their implications, drawing on insights from prominent systems thinkers.
164. **identify_dsrp_perspectives**: Explores the concept of distinctions in systems thinking, focusing on how boundaries define ideas, influence understanding, and reveal or obscure insights.
165. **identify_dsrp_relationships**: Encourages exploration of connections, distinctions, and boundaries between ideas, inspired by systems thinkers to reveal new insights and patterns in complex systems.
166. **identify_dsrp_systems**: Encourages organizing ideas into systems of parts and wholes, inspired by systems thinkers to explore relationships and how changes in organization impact meaning and understanding.
167. **identify_job_stories**: Identifies key job stories or requirements for roles.
168. **improve_academic_writing**: Refines text into clear, concise academic language while improving grammar, coherence, and clarity, with a list of changes.
169. **improve_prompt**: Improves an LLM/AI prompt by applying expert prompt writing strategies for better results and clarity.
170. **improve_report_finding**: Improves a penetration test security finding by providing detailed descriptions, risks, recommendations, references, quotes, and a concise summary in markdown format.
171. **improve_writing**: Refines text by correcting grammar, enhancing style, improving clarity, and maintaining the original meaning. skills.
172. **judge_output**: Evaluates Honeycomb queries by judging their effectiveness, providing critiques and outcomes based on language nuances and analytics relevance.
173. **label_and_rate**: Labels content with up to 20 single-word tags and rates it based on idea count and relevance to human meaning, AI, and other related themes, assigning a tier (S, A, B, C, D) and a quality score.
174. **md_callout**: Classifies content and generates a markdown callout based on the provided text, selecting the most appropriate type.
175. **model_as_sherlock_freud**: Builds psychological models using detective reasoning and psychoanalytic insight to understand human behavior.
176. **official_pattern_template**: Template to use if you want to create new fabric patterns.
177. **predict_person_actions**: Predicts behavioral responses based on psychological profiles and challenges.
178. **prepare_7s_strategy**: Prepares a comprehensive briefing document from 7S's strategy capturing organizational profile, strategic elements, and market dynamics with clear, concise, and organized content.
179. **provide_guidance**: Provides psychological and life coaching advice, including analysis, recommendations, and potential diagnoses, with a compassionate and honest tone.
180. **rate_ai_response**: Rates the quality of AI responses by comparing them to top human expert performance, assigning a letter grade, reasoning, and providing a 1-100 score based on the evaluation.
181. **rate_ai_result**: Assesses the quality of AI/ML/LLM work by deeply analyzing content, instructions, and output, then rates performance based on multiple dimensions, including coverage, creativity, and interdisciplinary thinking.
182. **rate_content**: Labels content with up to 20 single-word tags and rates it based on idea count and relevance to human meaning, AI, and other related themes, assigning a tier (S, A, B, C, D) and a quality score.
183. **rate_value**: Produces the best possible output by deeply analyzing and understanding the input and its intended purpose.
184. **raw_query**: Fully digests and contemplates the input to produce the best possible result based on understanding the sender's intent.
185. **recommend_artists**: Recommends a personalized festival schedule with artists aligned to your favorite styles and interests, including rationale.
186. **recommend_pipeline_upgrades**: Optimizes vulnerability-checking pipelines by incorporating new information and improving their efficiency, with detailed explanations of changes.
187. **recommend_talkpanel_topics**: Produces a clean set of proposed talks or panel talking points for a person based on their interests and goals, formatted for submission to a conference organizer.
188. **recommend_yoga_practice**: Provides personalized yoga sequences, meditation guidance, and holistic lifestyle advice based on individual profiles.
189. **refine_design_document**: Refines a design document based on a design review by analyzing, mapping concepts, and implementing changes using valid Markdown.
190. **review_design**: Reviews and analyzes architecture design, focusing on clarity, component design, system integrations, security, performance, scalability, and data management.
191. **sanitize_broken_html_to_markdown**: Converts messy HTML into clean, properly formatted Markdown, applying custom styling and ensuring compatibility with Vite.
192. **suggest_pattern**: Suggests appropriate fabric patterns or commands based on user input, providing clear explanations and options for users.
193. **summarize**: Summarizes content into a 20-word sentence, main points, and takeaways, formatted with numbered lists in Markdown.
194. **summarize_board_meeting**: Creates formal meeting notes from board meeting transcripts for corporate governance documentation.
195. **summarize_debate**: Summarizes debates, identifies primary disagreement, extracts arguments, and provides analysis of evidence and argument strength to predict outcomes.
196. **summarize_git_changes**: Summarizes recent project updates from the last 7 days, focusing on key changes with enthusiasm.
197. **summarize_git_diff**: Summarizes and organizes Git diff changes with clear, succinct commit messages and bullet points.
198. **summarize_lecture**: Extracts relevant topics, definitions, and tools from lecture transcripts, providing structured summaries with timestamps and key takeaways.
199. **summarize_legislation**: Summarizes complex political proposals and legislation by analyzing key points, proposed changes, and providing balanced, positive, and cynical characterizations.
200. **summarize_meeting**: Analyzes meeting transcripts to extract a structured summary, including an overview, key points, tasks, decisions, challenges, timeline, references, and next steps.
201. **summarize_micro**: Summarizes content into a 20-word sentence, 3 main points, and 3 takeaways, formatted in clear, concise Markdown.
202. **summarize_newsletter**: Extracts the most meaningful, interesting, and useful content from a newsletter, summarizing key sections such as content, opinions, tools, companies, and follow-up items in clear, structured Markdown.
203. **summarize_paper**: Summarizes an academic paper by detailing its title, authors, technical approach, distinctive features, experimental setup, results, advantages, limitations, and conclusion in a clear, structured format using human-readable Markdown.
204. **summarize_prompt**: Summarizes AI chat prompts by describing the primary function, unique approach, and expected output in a concise paragraph. The summary is focused on the prompt's purpose without unnecessary details or formatting.
205. **summarize_pull-requests**: Summarizes pull requests for a coding project by providing a summary and listing the top PRs with human-readable descriptions.
206. **summarize_rpg_session**: Summarizes a role-playing game session by extracting key events, combat stats, character changes, quotes, and more.
207. **t_analyze_challenge_handling**: Provides 8-16 word bullet points evaluating how well challenges are being addressed, calling out any lack of effort.
208. **t_check_dunning_kruger**: Assess narratives for Dunning-Kruger patterns by contrasting self-perception with demonstrated competence and confidence cues.
209. **t_check_metrics**: Analyzes deep context from the TELOS file and input instruction, then provides a wisdom-based output while considering metrics and KPIs to assess recent improvements.
210. **t_create_h3_career**: Summarizes context and produces wisdom-based output by deeply analyzing both the TELOS File and the input instruction, considering the relationship between the two.
211. **t_create_opening_sentences**: Describes from TELOS file the person's identity, goals, and actions in 4 concise, 32-word bullet points, humbly.
212. **t_describe_life_outlook**: Describes from TELOS file a person's life outlook in 5 concise, 16-word bullet points.
213. **t_extract_intro_sentences**: Summarizes from TELOS file a person's identity, work, and current projects in 5 concise and grounded bullet points.
214. **t_extract_panel_topics**: Creates 5 panel ideas with titles and descriptions based on deep context from a TELOS file and input.
215. **t_find_blindspots**: Identify potential blindspots in thinking, frames, or models that may expose the individual to error or risk.
216. **t_find_negative_thinking**: Analyze a TELOS file and input to identify negative thinking in documents or journals, followed by tough love encouragement.
217. **t_find_neglected_goals**: Analyze a TELOS file and input instructions to identify goals or projects that have not been worked on recently.
218. **t_give_encouragement**: Analyze a TELOS file and input instructions to evaluate progress, provide encouragement, and offer recommendations for continued effort.
219. **t_red_team_thinking**: Analyze a TELOS file and input instructions to red-team thinking, models, and frames, then provide recommendations for improvement.
220. **t_threat_model_plans**: Analyze a TELOS file and input instructions to create threat models for a life plan and recommend improvements.
221. **t_visualize_mission_goals_projects**: Analyze a TELOS file and input instructions to create an ASCII art diagram illustrating the relationship of missions, goals, and projects.
222. **t_year_in_review**: Analyze a TELOS file to create insights about a person or entity, then summarize accomplishments and visualizations in bullet points.
223. **to_flashcards**: Create Anki flashcards from a given text, focusing on concise, optimized questions and answers without external context.
224. **transcribe_minutes**: Extracts (from meeting transcription) meeting minutes, identifying actionables, insightful ideas, decisions, challenges, and next steps in a structured format.
225. **translate**: Translates sentences or documentation into the specified language code while maintaining the original formatting and tone.
226. **tweet**: Provides a step-by-step guide on crafting engaging tweets with emojis, covering Twitter basics, account creation, features, and audience targeting.
227. **write_essay**: Writes essays in the style of a specified author, embodying their unique voice, vocabulary, and approach. Uses `author_name` variable.
228. **write_essay_pg**: Writes concise, clear essays in the style of Paul Graham, focusing on simplicity, clarity, and illumination of the provided topic.
229. **write_hackerone_report**: Generates concise, clear, and reproducible bug bounty reports, detailing vulnerability impact, steps to reproduce, and exploit details for triagers.
230. **write_latex**: Generates syntactically correct LaTeX code for a new.tex document, ensuring proper formatting and compatibility with pdflatex.
231. **write_micro_essay**: Writes concise, clear, and illuminating essays on the given topic in the style of Paul Graham.
232. **write_nuclei_template_rule**: Generates Nuclei YAML templates for detecting vulnerabilities using HTTP requests, matchers, extractors, and dynamic data extraction.
233. **write_pull-request**: Drafts detailed pull request descriptions, explaining changes, providing reasoning, and identifying potential bugs from the git diff command output.
234. **write_semgrep_rule**: Creates accurate and working Semgrep rules based on input, following syntax guidelines and specific language considerations.
235. **youtube_summary**: Create concise, timestamped Youtube video summaries that highlight key points.
54. **create_bd_issue**: Transform natural language descriptions into optimal bd create commands for issue tracking.
55. **create_coding_feature**: Generates secure and composable code features using modern technology and best practices from project specifications.
56. **create_coding_project**: Generate wireframes and starter code for any coding ideas that you have.
57. **create_command**: Helps determine the correct parameters and switches for penetration testing tools based on a brief description of the objective.
58. **create_conceptmap**: Transforms unstructured text or markdown content into an interactive HTML concept map using Vis.js by extracting key concepts and their logical relationships.
59. **create_cyber_summary**: Summarizes cybersecurity threats, vulnerabilities, incidents, and malware with a 25-word summary and categorized bullet points, after thoroughly analyzing and mapping the provided input.
60. **create_design_system**: Create comprehensive CSS design systems with tokens, typography, spacing, and components.
61. **create_design_document**: Creates a detailed design document for a system using the C4 model, addressing business and security postures, and including a system context diagram.
62. **create_diy**: Creates structured "Do It Yourself" tutorial patterns by analyzing prompts, organizing requirements, and providing step-by-step instructions in Markdown format.
63. **create_excalidraw_visualization**: Creates complex Excalidraw diagrams to visualize relationships between concepts and ideas in structured format.
64. **create_flash_cards**: Creates flashcards for key concepts, definitions, and terms with question-answer format for educational purposes.
65. **create_formal_email**: Crafts professional, clear, and respectful emails by analyzing context, tone, and purpose, ensuring proper structure and formatting.
66. **create_git_diff_commit**: Generates Git commands and commit messages for reflecting changes in a repository, using conventional commits and providing concise shell commands for updates.
67. **create_golden_rules**: Extract enforceable rules from codebases to prevent common mistakes and ensure consistency.
68. **create_graph_from_input**: Generates a CSV file with progress-over-time data for a security program, focusing on relevant metrics and KPIs.
69. **create_hormozi_offer**: Creates a customized business offer based on principles from Alex Hormozi's book, "$100M Offers."
70. **create_idea_compass**: Organizes and structures ideas by exploring their definition, evidence, sources, and related themes or consequences.
71. **create_investigation_visualization**: Creates detailed Graphviz visualizations of complex input, highlighting key aspects and providing clear, well-annotated diagrams for investigative analysis and conclusions.
72. **create_keynote**: Creates TED-style keynote presentations with a clear narrative, structured slides, and speaker notes, emphasizing impactful takeaways and cohesive flow.
73. **create_loe_document**: Creates detailed Level of Effort documents for estimating work effort, resources, and costs for tasks or projects.
74. **create_logo**: Creates simple, minimalist company logos without text, generating AI prompts for vector graphic logos based on input.
75. **create_markmap_visualization**: Transforms complex ideas into clear visualizations using MarkMap syntax, simplifying concepts into diagrams with relationships, boxes, arrows, and labels.
76. **create_mermaid_visualization**: Creates detailed, standalone visualizations of concepts using Mermaid (Markdown) syntax, ensuring clarity and coherence in diagrams.
77. **create_mermaid_visualization_for_github**: Creates standalone, detailed visualizations using Mermaid (Markdown) syntax to effectively explain complex concepts, ensuring clarity and precision.
78. **create_micro_summary**: Summarizes content into a concise, 20-word summary with main points and takeaways, formatted in Markdown.
79. **create_mnemonic_phrases**: Creates memorable mnemonic sentences from given words to aid in memory retention and learning.
80. **create_network_threat_landscape**: Analyzes open ports and services from a network scan and generates a comprehensive, insightful, and detailed security threat report in Markdown.
81. **create_newsletter_entry**: Condenses provided article text into a concise, objective, newsletter-style summary with a title in the style of Frontend Weekly.
82. **create_npc**: Generates a detailed D&D 5E NPC, including background, flaws, stats, appearance, personality, goals, and more in Markdown format.
83. **create_pattern**: Extracts, organizes, and formats LLM/AI prompts into structured sections, detailing the AI's role, instructions, output format, and any provided examples for clarity and accuracy.
84. **create_prd**: Creates a precise Product Requirements Document (PRD) in Markdown based on input.
85. **create_prediction_block**: Extracts and formats predictions from input into a structured Markdown block for a blog post.
86. **create_quiz**: Creates a three-phase reading plan based on an author or topic to help the user become significantly knowledgeable, including core, extended, and supplementary readings.
87. **create_reading_plan**: Generates review questions based on learning objectives from the input, adapted to the specified student level, and outputs them in a clear markdown format.
88. **create_recursive_outline**: Breaks down complex tasks or projects into manageable, hierarchical components with recursive outlining for clarity and simplicity.
89. **create_report_finding**: Creates a detailed, structured security finding report in markdown, including sections on Description, Risk, Recommendations, References, One-Sentence-Summary, and Quotes.
90. **create_rpg_summary**: Summarizes an in-person RPG session with key events, combat details, player stats, and role-playing highlights in a structured format.
91. **create_security_update**: Creates concise security updates for newsletters, covering stories, threats, advisories, vulnerabilities, and a summary of key issues.
92. **create_show_intro**: Creates compelling short intros for podcasts, summarizing key topics and themes discussed in the episode.
93. **create_sigma_rules**: Extracts Tactics, Techniques, and Procedures (TTPs) from security news and converts them into Sigma detection rules for host-based detections.
94. **create_story_about_people_interaction**: Analyze two personas, compare their dynamics, and craft a realistic, character-driven story from those insights.
95. **create_story_about_person**: Creates compelling, realistic short stories based on psychological profiles, showing how characters navigate everyday problems using strategies consistent with their personality traits.
96. **create_story_explanation**: Summarizes complex content in a clear, approachable story format that makes the concepts easy to understand.
97. **create_stride_threat_model**: Create a STRIDE-based threat model for a system design, identifying assets, trust boundaries, data flows, and prioritizing threats with mitigations.
98. **create_summary**: Summarizes content into a 20-word sentence, 10 main points (16 words max), and 5 key takeaways in Markdown format.
99. **create_tags**: Identifies at least 5 tags from text content for mind mapping tools, including authors and existing tags if present.
100. **create_threat_scenarios**: Identifies likely attack methods for any system by providing a narrative-based threat model, balancing risk and opportunity.
101. **create_ttrc_graph**: Creates a CSV file showing the progress of Time to Remediate Critical Vulnerabilities over time using given data.
102. **create_ttrc_narrative**: Creates a persuasive narrative highlighting progress in reducing the Time to Remediate Critical Vulnerabilities metric over time.
103. **create_upgrade_pack**: Extracts world model and task algorithm updates from content, providing beliefs about how the world works and task performance.
104. **create_user_story**: Writes concise and clear technical user stories for new features in complex software programs, formatted for all stakeholders.
105. **create_video_chapters**: Extracts interesting topics and timestamps from a transcript, providing concise summaries of key moments.
106. **create_visualization**: Transforms complex ideas into visualizations using intricate ASCII art, simplifying concepts where necessary.
107. **dialog_with_socrates**: Engages in deep, meaningful dialogues to explore and challenge beliefs using the Socratic method.
108. **enrich_blog_post**: Enhances Markdown blog files by applying instructions to improve structure, visuals, and readability for HTML rendering.
109. **explain_code**: Explains code, security tool output, configuration text, and answers questions based on the provided input.
110. **explain_docs**: Improves and restructures tool documentation into clear, concise instructions, including overviews, usage, use cases, and key features.
111. **explain_math**: Helps you understand mathematical concepts in a clear and engaging way.
112. **explain_project**: Summarizes project documentation into clear, concise sections covering the project, problem, solution, installation, usage, and examples.
113. **explain_terms**: Produces a glossary of advanced terms from content, providing a definition, analogy, and explanation of why each term matters.
114. **export_data_as_csv**: Extracts and outputs all data structures from the input in properly formatted CSV data.
115. **extract_algorithm_update_recommendations**: Extracts concise, practical algorithm update recommendations from the input and outputs them in a bulleted list.
116. **extract_all_quotes**: Extract all inspirational and educational quotes from content including podcasts and essays.
117. **extract_alpha**: Extracts the most novel and surprising ideas ("alpha") from content, inspired by information theory.
118. **extract_article_wisdom**: Extracts surprising, insightful, and interesting information from content, categorizing it into sections like summary, ideas, quotes, facts, references, and recommendations.
119. **extract_book_ideas**: Extracts and outputs 50 to 100 of the most surprising, insightful, and interesting ideas from a book's content.
120. **extract_book_recommendations**: Extracts and outputs 50 to 100 practical, actionable recommendations from a book's content.
121. **extract_bd_ideas**: Extract actionable ideas from content and transform into bd create commands.
122. **extract_business_ideas**: Extracts top business ideas from content and elaborates on the best 10 with unique differentiators.
123. **extract_characters**: Identify all characters (human and non-human), resolve their aliases and pronouns into canonical names, and produce detailed descriptions of each character's role, motivations, and interactions ranked by narrative importance.
124. **extract_controversial_ideas**: Extracts and outputs controversial statements and supporting quotes from the input in a structured Markdown list.
125. **extract_core_message**: Extracts and outputs a clear, concise sentence that articulates the core message of a given text or body of work.
126. **extract_ctf_writeup**: Extracts a short writeup from a warstory-like text about a cyber security engagement.
127. **extract_domains**: Extracts domains and URLs from content to identify sources used for articles, newsletters, and other publications.
128. **extract_extraordinary_claims**: Extracts and outputs a list of extraordinary claims from conversations, focusing on scientifically disputed or false statements.
129. **extract_ideas**: Extracts and outputs all the key ideas from input, presented as 15-word bullet points in Markdown.
130. **extract_insights**: Extracts and outputs the most powerful and insightful ideas from text, formatted as 16-word bullet points in the INSIGHTS section, also IDEAS section.
131. **extract_insights_dm**: Extracts and outputs all valuable insights and a concise summary of the content, including key points and topics discussed.
132. **extract_instructions**: Extracts clear, actionable step-by-step instructions and main objectives from instructional video transcripts, organizing them into a concise list.
133. **extract_jokes**: Extracts jokes from text content, presenting each joke with its punchline in separate bullet points.
134. **extract_latest_video**: Extracts the latest video URL from a YouTube RSS feed and outputs the URL only.
135. **extract_main_activities**: Extracts key events and activities from transcripts or logs, providing a summary of what happened.
136. **extract_main_idea**: Extracts the main idea and key recommendation from the input, summarizing them in 15-word sentences.
137. **extract_mcp_servers**: Identify and summarize Model Context Protocol (MCP) servers referenced in the input along with their key details.
138. **extract_most_redeeming_thing**: Extracts the most redeeming aspect from an input, summarizing it in a single 15-word sentence.
139. **extract_patterns**: Extracts and analyzes recurring, surprising, and insightful patterns from input, providing detailed analysis and advice for builders.
140. **extract_poc**: Extracts proof of concept URLs and validation methods from security reports, providing the URL and command to run.
141. **extract_predictions**: Extracts predictions from input, including specific details such as date, confidence level, and verification method.
142. **extract_primary_problem**: Extracts the primary problem with the world as presented in a given text or body of work.
143. **extract_primary_solution**: Extracts the primary solution for the world as presented in a given text or body of work.
144. **extract_product_features**: Extracts and outputs a list of product features from the provided input in a bulleted format.
145. **extract_questions**: Extracts and outputs all questions asked by the interviewer in a conversation or interview.
146. **extract_recipe**: Extracts and outputs a recipe with a short meal description, ingredients with measurements, and preparation steps.
147. **extract_recommendations**: Extracts and outputs concise, practical recommendations from a given piece of content in a bulleted list.
148. **extract_references**: Extracts and outputs a bulleted list of references to art, stories, books, literature, and other sources from content.
149. **extract_skills**: Extracts and classifies skills from a job description into a table, separating each skill and classifying it as either hard or soft.
150. **extract_song_meaning**: Analyzes a song to provide a summary of its meaning, supported by detailed evidence from lyrics, artist commentary, and fan analysis.
151. **extract_sponsors**: Extracts and lists official sponsors and potential sponsors from a provided transcript.
152. **extract_videoid**: Extracts and outputs the video ID from any given URL.
153. **extract_wisdom**: Extracts surprising, insightful, and interesting information from text on topics like human flourishing, AI, learning, and more.
154. **extract_wisdom_agents**: Extracts valuable insights, ideas, quotes, and references from content, emphasizing topics like human flourishing, AI, learning, and technology.
155. **extract_wisdom_with_attribution**: Extracts insightful ideas and recommendations with speaker attribution for quotes, focusing on life wisdom and human flourishing.
156. **extract_wisdom_dm**: Extracts all valuable, insightful, and thought-provoking information from content, focusing on topics like human flourishing, AI, learning, and technology.
157. **extract_wisdom_nometa**: Extracts insights, ideas, quotes, habits, facts, references, and recommendations from content, focusing on human flourishing, AI, technology, and related topics.
158. **find_female_life_partner**: Analyzes criteria for finding a female life partner and provides clear, direct, and poetic descriptions.
159. **find_hidden_message**: Extracts overt and hidden political messages, justifications, audience actions, and a cynical analysis from content.
160. **find_logical_fallacies**: Identifies and analyzes fallacies in arguments, classifying them as formal or informal with detailed reasoning.
161. **fix_typos**: Proofreads and corrects typos, spelling, grammar, and punctuation errors in text.
162. **generate_code_rules**: Compile best-practice coding rules and guardrails for AI-assisted development workflows from the provided content.
163. **get_wow_per_minute**: Determines the wow-factor of content per minute based on surprise, novelty, insight, value, and wisdom, measuring how rewarding the content is for the viewer.
164. **greybeard_secure_prompt_engineer**: Creates secure, production-grade system prompts with NASA-style mission assurance, outputting hardened prompts, injection test suites, and evaluation rubrics.
165. **heal_person**: Develops a comprehensive plan for spiritual and mental healing based on psychological profiles, providing personalized recommendations for mental health improvement and overall life enhancement.
166. **humanize**: Rewrites AI-generated text to sound natural, conversational, and easy to understand, maintaining clarity and simplicity.
167. **identify_dsrp_distinctions**: Encourages creative, systems-based thinking by exploring distinctions, boundaries, and their implications, drawing on insights from prominent systems thinkers.
168. **identify_dsrp_perspectives**: Explores the concept of distinctions in systems thinking, focusing on how boundaries define ideas, influence understanding, and reveal or obscure insights.
169. **identify_dsrp_relationships**: Encourages exploration of connections, distinctions, and boundaries between ideas, inspired by systems thinkers to reveal new insights and patterns in complex systems.
170. **identify_dsrp_systems**: Encourages organizing ideas into systems of parts and wholes, inspired by systems thinkers to explore relationships and how changes in organization impact meaning and understanding.
171. **identify_job_stories**: Identifies key job stories or requirements for roles.
172. **improve_academic_writing**: Refines text into clear, concise academic language while improving grammar, coherence, and clarity, with a list of changes.
173. **improve_prompt**: Improves an LLM/AI prompt by applying expert prompt writing strategies for better results and clarity.
174. **improve_report_finding**: Improves a penetration test security finding by providing detailed descriptions, risks, recommendations, references, quotes, and a concise summary in markdown format.
175. **improve_writing**: Refines text by correcting grammar, enhancing style, improving clarity, and maintaining the original meaning. skills.
176. **judge_output**: Evaluates Honeycomb queries by judging their effectiveness, providing critiques and outcomes based on language nuances and analytics relevance.
177. **label_and_rate**: Labels content with up to 20 single-word tags and rates it based on idea count and relevance to human meaning, AI, and other related themes, assigning a tier (S, A, B, C, D) and a quality score.
178. **md_callout**: Classifies content and generates a markdown callout based on the provided text, selecting the most appropriate type.
179. **model_as_sherlock_freud**: Builds psychological models using detective reasoning and psychoanalytic insight to understand human behavior.
180. **official_pattern_template**: Template to use if you want to create new fabric patterns.
181. **predict_person_actions**: Predicts behavioral responses based on psychological profiles and challenges.
182. **prepare_7s_strategy**: Prepares a comprehensive briefing document from 7S's strategy capturing organizational profile, strategic elements, and market dynamics with clear, concise, and organized content.
183. **provide_guidance**: Provides psychological and life coaching advice, including analysis, recommendations, and potential diagnoses, with a compassionate and honest tone.
184. **rate_ai_response**: Rates the quality of AI responses by comparing them to top human expert performance, assigning a letter grade, reasoning, and providing a 1-100 score based on the evaluation.
185. **rate_ai_result**: Assesses the quality of AI/ML/LLM work by deeply analyzing content, instructions, and output, then rates performance based on multiple dimensions, including coverage, creativity, and interdisciplinary thinking.
186. **rate_content**: Labels content with up to 20 single-word tags and rates it based on idea count and relevance to human meaning, AI, and other related themes, assigning a tier (S, A, B, C, D) and a quality score.
187. **rate_value**: Produces the best possible output by deeply analyzing and understanding the input and its intended purpose.
188. **raw_query**: Fully digests and contemplates the input to produce the best possible result based on understanding the sender's intent.
189. **recommend_artists**: Recommends a personalized festival schedule with artists aligned to your favorite styles and interests, including rationale.
190. **recommend_pipeline_upgrades**: Optimizes vulnerability-checking pipelines by incorporating new information and improving their efficiency, with detailed explanations of changes.
191. **recommend_talkpanel_topics**: Produces a clean set of proposed talks or panel talking points for a person based on their interests and goals, formatted for submission to a conference organizer.
192. **recommend_yoga_practice**: Provides personalized yoga sequences, meditation guidance, and holistic lifestyle advice based on individual profiles.
193. **refine_design_document**: Refines a design document based on a design review by analyzing, mapping concepts, and implementing changes using valid Markdown.
194. **review_design**: Reviews and analyzes architecture design, focusing on clarity, component design, system integrations, security, performance, scalability, and data management.
195. **review_code**: Performs a comprehensive code review, providing detailed feedback on correctness, security, and performance.
196. **sanitize_broken_html_to_markdown**: Converts messy HTML into clean, properly formatted Markdown, applying custom styling and ensuring compatibility with Vite.
197. **suggest_pattern**: Suggests appropriate fabric patterns or commands based on user input, providing clear explanations and options for users.
198. **suggest_gt_command**: Suggest optimal Gas Town (GT) commands based on user intent and task description.
199. **summarize**: Summarizes content into a 20-word sentence, main points, and takeaways, formatted with numbered lists in Markdown.
200. **summarize_board_meeting**: Creates formal meeting notes from board meeting transcripts for corporate governance documentation.
201. **summarize_debate**: Summarizes debates, identifies primary disagreement, extracts arguments, and provides analysis of evidence and argument strength to predict outcomes.
202. **summarize_git_changes**: Summarizes recent project updates from the last 7 days, focusing on key changes with enthusiasm.
203. **summarize_git_diff**: Summarizes and organizes Git diff changes with clear, succinct commit messages and bullet points.
204. **summarize_lecture**: Extracts relevant topics, definitions, and tools from lecture transcripts, providing structured summaries with timestamps and key takeaways.
205. **summarize_legislation**: Summarizes complex political proposals and legislation by analyzing key points, proposed changes, and providing balanced, positive, and cynical characterizations.
206. **summarize_meeting**: Analyzes meeting transcripts to extract a structured summary, including an overview, key points, tasks, decisions, challenges, timeline, references, and next steps.
207. **summarize_micro**: Summarizes content into a 20-word sentence, 3 main points, and 3 takeaways, formatted in clear, concise Markdown.
208. **summarize_newsletter**: Extracts the most meaningful, interesting, and useful content from a newsletter, summarizing key sections such as content, opinions, tools, companies, and follow-up items in clear, structured Markdown.
209. **summarize_paper**: Summarizes an academic paper by detailing its title, authors, technical approach, distinctive features, experimental setup, results, advantages, limitations, and conclusion in a clear, structured format using human-readable Markdown.
210. **summarize_prompt**: Summarizes AI chat prompts by describing the primary function, unique approach, and expected output in a concise paragraph. The summary is focused on the prompt's purpose without unnecessary details or formatting.
211. **summarize_pull-requests**: Summarizes pull requests for a coding project by providing a summary and listing the top PRs with human-readable descriptions.
212. **summarize_rpg_session**: Summarizes a role-playing game session by extracting key events, combat stats, character changes, quotes, and more.
213. **t_analyze_challenge_handling**: Provides 8-16 word bullet points evaluating how well challenges are being addressed, calling out any lack of effort.
214. **t_check_dunning_kruger**: Assess narratives for Dunning-Kruger patterns by contrasting self-perception with demonstrated competence and confidence cues.
215. **t_check_metrics**: Analyzes deep context from the TELOS file and input instruction, then provides a wisdom-based output while considering metrics and KPIs to assess recent improvements.
216. **t_create_h3_career**: Summarizes context and produces wisdom-based output by deeply analyzing both the TELOS File and the input instruction, considering the relationship between the two.
217. **t_create_opening_sentences**: Describes from TELOS file the person's identity, goals, and actions in 4 concise, 32-word bullet points, humbly.
218. **t_describe_life_outlook**: Describes from TELOS file a person's life outlook in 5 concise, 16-word bullet points.
219. **t_extract_intro_sentences**: Summarizes from TELOS file a person's identity, work, and current projects in 5 concise and grounded bullet points.
220. **t_extract_panel_topics**: Creates 5 panel ideas with titles and descriptions based on deep context from a TELOS file and input.
221. **t_find_blindspots**: Identify potential blindspots in thinking, frames, or models that may expose the individual to error or risk.
222. **t_find_negative_thinking**: Analyze a TELOS file and input to identify negative thinking in documents or journals, followed by tough love encouragement.
223. **t_find_neglected_goals**: Analyze a TELOS file and input instructions to identify goals or projects that have not been worked on recently.
224. **t_give_encouragement**: Analyze a TELOS file and input instructions to evaluate progress, provide encouragement, and offer recommendations for continued effort.
225. **t_red_team_thinking**: Analyze a TELOS file and input instructions to red-team thinking, models, and frames, then provide recommendations for improvement.
226. **t_threat_model_plans**: Analyze a TELOS file and input instructions to create threat models for a life plan and recommend improvements.
227. **t_visualize_mission_goals_projects**: Analyze a TELOS file and input instructions to create an ASCII art diagram illustrating the relationship of missions, goals, and projects.
228. **t_year_in_review**: Analyze a TELOS file to create insights about a person or entity, then summarize accomplishments and visualizations in bullet points.
229. **to_flashcards**: Create Anki flashcards from a given text, focusing on concise, optimized questions and answers without external context.
230. **transcribe_minutes**: Extracts (from meeting transcription) meeting minutes, identifying actionables, insightful ideas, decisions, challenges, and next steps in a structured format.
231. **translate**: Translates sentences or documentation into the specified language code while maintaining the original formatting and tone.
232. **tweet**: Provides a step-by-step guide on crafting engaging tweets with emojis, covering Twitter basics, account creation, features, and audience targeting.
233. **write_essay**: Writes essays in the style of a specified author, embodying their unique voice, vocabulary, and approach. Uses `author_name` variable.
234. **write_essay_pg**: Writes concise, clear essays in the style of Paul Graham, focusing on simplicity, clarity, and illumination of the provided topic.
235. **write_hackerone_report**: Generates concise, clear, and reproducible bug bounty reports, detailing vulnerability impact, steps to reproduce, and exploit details for triagers.
236. **write_latex**: Generates syntactically correct LaTeX code for a new.tex document, ensuring proper formatting and compatibility with pdflatex.
237. **write_micro_essay**: Writes concise, clear, and illuminating essays on the given topic in the style of Paul Graham.
238. **write_nuclei_template_rule**: Generates Nuclei YAML templates for detecting vulnerabilities using HTTP requests, matchers, extractors, and dynamic data extraction.
239. **write_pull-request**: Drafts detailed pull request descriptions, explaining changes, providing reasoning, and identifying potential bugs from the git diff command output.
240. **write_semgrep_rule**: Creates accurate and working Semgrep rules based on input, following syntax guidelines and specific language considerations.
241. **youtube_summary**: Create concise, timestamped Youtube video summaries that highlight key points.

View File

@@ -0,0 +1,387 @@
# IDENTITY
You are an expert Moltbot assistant who knows every Moltbot command intimately. Moltbot is an open-source AI agent framework that connects LLMs to messaging platforms (WhatsApp, Telegram, Discord, Slack, Signal, iMessage), devices (phones, browsers, IoT), and developer tools (cron, webhooks, skills, sandboxes). Your role is to understand what the user wants to accomplish and suggest the exact Moltbot CLI command(s) to achieve it.
You think like a patient mentor who:
1. Understands the user's intent, even when poorly expressed
2. Suggests the most direct command for the task
3. Provides context that prevents mistakes
4. Offers alternatives when multiple approaches exist
# CLAWDBOT COMMAND REFERENCE
## Setup and Configuration
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot setup` | Initialize config and workspace | First-time setup |
| `moltbot onboard` | Interactive setup wizard | Gateway, workspace, skills |
| `moltbot configure` | Interactive config wizard | Credentials, devices, defaults |
| `moltbot config get <path>` | Read a config value | `moltbot config get models.default` |
| `moltbot config set <path> <value>` | Set a config value | `moltbot config set models.default "claude-sonnet-4-20250514"` |
| `moltbot config unset <path>` | Remove a config value | Clean up old settings |
| `moltbot doctor` | Health checks and quick fixes | Diagnose problems |
| `moltbot reset` | Reset local config and state | Start fresh (keeps CLI) |
| `moltbot uninstall` | Remove gateway and local data | Full cleanup |
| `moltbot update` | Update CLI | Get latest version |
## Gateway (Core Daemon)
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot gateway` | Run the gateway (foreground) | `moltbot gateway --port 18789` |
| `moltbot gateway start` | Start as background service | Daemonized (launchd/systemd) |
| `moltbot gateway stop` | Stop the service | Graceful shutdown |
| `moltbot gateway restart` | Restart the service | Apply config changes |
| `moltbot gateway status` | Check gateway health | Quick health check |
| `moltbot gateway run` | Run in foreground | Explicit foreground mode |
| `moltbot gateway install` | Install as system service | launchd/systemd/schtasks |
| `moltbot gateway uninstall` | Remove system service | Clean up |
| `moltbot gateway probe` | Full reachability summary | Local and remote health |
| `moltbot gateway discover` | Discover gateways via Bonjour | Find gateways on network |
| `moltbot gateway usage-cost` | Usage cost summary | Token spend from session logs |
| `moltbot --dev gateway` | Dev gateway (isolated state) | Port 19001, separate config |
## Messaging
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot message send` | Send a message | `--target "+1555..." --message "Hi"` |
| `moltbot message send --channel telegram` | Send via specific channel | `--target @mychat --message "Hello"` |
| `moltbot message broadcast` | Broadcast to multiple targets | Multi-recipient |
| `moltbot message poll` | Send a poll | `--poll-question "Q?" --poll-option A --poll-option B` |
| `moltbot message react` | Add or remove a reaction | `--emoji "check"` |
| `moltbot message read` | Read recent messages | Fetch conversation history |
| `moltbot message edit` | Edit a message | Modify sent message |
| `moltbot message delete` | Delete a message | Remove message |
| `moltbot message pin` | Pin a message | Pin to channel |
| `moltbot message unpin` | Unpin a message | Remove pin |
| `moltbot message search` | Search messages | Discord message search |
## Channel Management
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot channels list` | Show configured channels | See all channel accounts |
| `moltbot channels status` | Check channel health | Connection status |
| `moltbot channels login` | Link a channel account | WhatsApp QR, Telegram bot token |
| `moltbot channels logout` | Unlink a channel | Remove session |
| `moltbot channels add` | Add new channel | Add or update account |
| `moltbot channels remove` | Remove a channel | Delete config |
| `moltbot channels logs` | Channel-specific logs | Debug channel issues |
| `moltbot channels capabilities` | Show provider capabilities | Intents, scopes, features |
## Agent and Sessions
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot agent` | Run an agent turn | `--to "+1555..." --message "Run summary" --deliver` |
| `moltbot agents list` | List isolated agents | Multi-agent setups |
| `moltbot agents add` | Create a new agent | Separate workspace and auth |
| `moltbot agents delete` | Remove an agent | Clean up |
| `moltbot sessions` | List conversation sessions | See active and recent chats |
## Models
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot models list` | Show available models | All configured providers |
| `moltbot models status` | Current model config | Default and image models |
| `moltbot models set <model>` | Set default model | `moltbot models set claude-sonnet-4-20250514` |
| `moltbot models set-image <model>` | Set image model | Vision model config |
| `moltbot models aliases list` | Show model aliases | Shorthand names |
| `moltbot models aliases add` | Add an alias | Custom model names |
| `moltbot models fallbacks list` | Show fallback chain | Backup models |
| `moltbot models fallbacks add` | Add fallback model | Redundancy |
| `moltbot models image-fallbacks list` | Show image fallback chain | Image model backups |
| `moltbot models scan` | Scan for available models | Discover provider models |
| `moltbot models auth add` | Add provider credentials | API keys |
## Scheduling (Cron)
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot cron status` | Show cron scheduler status | Is it running? |
| `moltbot cron list` | List all cron jobs | See scheduled tasks |
| `moltbot cron add` | Create a new job | Scheduled task |
| `moltbot cron edit` | Modify a job | Change schedule or text |
| `moltbot cron rm` | Remove a job | Delete task |
| `moltbot cron enable` | Enable a job | Turn on |
| `moltbot cron disable` | Disable a job | Turn off without deleting |
| `moltbot cron run` | Trigger a job now | Manual execution |
| `moltbot cron runs` | Show recent executions | Job history |
## Nodes (Remote Paired Devices)
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot nodes status` | List known nodes | Connection status and capabilities |
| `moltbot nodes describe` | Describe a node | Capabilities and supported commands |
| `moltbot nodes list` | List pending and paired nodes | All node states |
| `moltbot nodes pending` | List pending pairing requests | Awaiting approval |
| `moltbot nodes approve` | Approve a pairing request | Accept device |
| `moltbot nodes reject` | Reject a pairing request | Deny device |
| `moltbot nodes invoke` | Invoke a command on a node | Remote execution |
| `moltbot nodes run` | Run shell command on a node | Remote shell (mac only) |
| `moltbot nodes notify` | Send notification on a node | Push notification (mac only) |
| `moltbot nodes camera` | Capture camera media | Photo or video from device |
| `moltbot nodes screen` | Capture screen recording | Screen from device |
| `moltbot nodes location` | Fetch device location | GPS coordinates |
## Node Host (Local Service)
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot node run` | Run headless node host | Foreground mode |
| `moltbot node status` | Node host status | Local service health |
| `moltbot node install` | Install node host service | launchd/systemd/schtasks |
| `moltbot node uninstall` | Uninstall node host service | Clean up |
| `moltbot node stop` | Stop node host service | Shut down |
| `moltbot node restart` | Restart node host service | Restart |
## Devices and Pairing
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot devices` | Device pairing and tokens | Manage device auth |
| `moltbot pairing list` | List pairing entries | Paired and pending |
| `moltbot pairing approve` | Approve pairing | Accept device |
## Skills and Plugins
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot skills list` | Show installed skills | Available capabilities |
| `moltbot skills info <name>` | Skill details | What it does |
| `moltbot skills check` | Verify skill health | Missing deps |
| `moltbot plugins list` | Show installed plugins | Extensions |
| `moltbot plugins info <name>` | Plugin details | Configuration |
| `moltbot plugins install <name>` | Install a plugin | Add extension |
| `moltbot plugins enable <name>` | Enable a plugin | Turn on |
| `moltbot plugins disable <name>` | Disable a plugin | Turn off |
| `moltbot plugins doctor` | Plugin health check | Load errors |
## Browser Automation
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot browser status` | Browser status | Is it running? |
| `moltbot browser start` | Start managed browser | Launch Chrome/Chromium |
| `moltbot browser stop` | Stop browser | Shut down |
| `moltbot browser tabs` | List open tabs | See what is open |
| `moltbot browser open <url>` | Open a URL | New tab |
| `moltbot browser focus <id>` | Focus a tab | By target id |
| `moltbot browser close <id>` | Close a tab | By target id |
| `moltbot browser screenshot` | Capture screenshot | `--full-page` for entire page |
| `moltbot browser snapshot` | Accessibility snapshot | `--format aria` for tree |
| `moltbot browser navigate <url>` | Navigate to URL | Change page |
| `moltbot browser click <ref>` | Click element | `--double` for double-click |
| `moltbot browser type <ref> <text>` | Type into element | `--submit` to submit form |
| `moltbot browser press <key>` | Press a key | Keyboard input |
| `moltbot browser hover <ref>` | Hover element | Mouse hover |
| `moltbot browser fill` | Fill a form | `--fields '[{"ref":"1","value":"Ada"}]'` |
| `moltbot browser pdf` | Save page as PDF | Export page |
| `moltbot browser evaluate` | Run JavaScript | `--fn '(el) => el.textContent'` |
| `moltbot browser upload <path>` | Upload a file | Next file chooser |
| `moltbot browser dialog` | Handle modal dialog | `--accept` or `--dismiss` |
## System and Diagnostics
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot status` | Channel health and sessions | Quick overview |
| `moltbot health` | Gateway health check | Detailed health |
| `moltbot logs` | Gateway logs | Debug issues |
| `moltbot system event` | Enqueue system event | Custom events |
| `moltbot system heartbeat last` | Last heartbeat | Agent activity |
| `moltbot system heartbeat enable` | Enable heartbeat | Periodic agent check-ins |
| `moltbot system heartbeat disable` | Disable heartbeat | Stop check-ins |
| `moltbot system presence` | Presence info | Online and offline |
| `moltbot security audit` | Security audit | `--deep` for live probe, `--fix` to tighten |
## Other Commands
| Command | Purpose | Common Usage |
| --------- | --------- | -------------- |
| `moltbot sandbox list` | List sandboxes | Docker-based isolation |
| `moltbot sandbox recreate` | Reset sandbox | Fresh containers |
| `moltbot sandbox explain` | Explain sandbox policy | Effective config |
| `moltbot tui` | Terminal UI | Interactive interface |
| `moltbot hooks list` | List hooks | Configured hooks |
| `moltbot hooks enable` | Enable a hook | Turn on |
| `moltbot hooks disable` | Disable a hook | Turn off |
| `moltbot webhooks` | Webhook helpers | Inbound webhooks |
| `moltbot dns setup` | DNS helpers | Custom domain |
| `moltbot approvals get` | Check exec approval policy | Security settings |
| `moltbot approvals set` | Set approval policy | Restrict exec |
| `moltbot acp` | Agent Control Protocol | ACP tools |
| `moltbot dashboard` | Open Control UI | Web interface |
| `moltbot memory search <query>` | Semantic memory search | Search agent memory |
| `moltbot memory index` | Reindex memory | Refresh vector index |
| `moltbot memory status` | Memory index stats | Index health |
| `moltbot directory self` | Show current account | Who am I on this channel |
| `moltbot directory peers` | Peer directory | Contacts and users |
| `moltbot directory groups` | Group directory | Available groups |
| `moltbot docs` | Documentation helpers | Open docs |
# INTENT MAPPING
| User Intent | Best Command | Notes |
| ------------- | -------------- | ------- |
| "set up moltbot" / "first time" | `moltbot onboard` | Interactive wizard |
| "check if everything works" / "health" | `moltbot doctor` | Comprehensive checks |
| "quick status" / "what's running" | `moltbot status` | Overview |
| "start the server" / "run moltbot" | `moltbot gateway start` | Background service |
| "stop moltbot" / "shut down" | `moltbot gateway stop` | Graceful stop |
| "restart" / "apply changes" | `moltbot gateway restart` | After config changes |
| "send a message" / "text someone" | `moltbot message send --target <t> --message <m>` | Specify channel if needed |
| "send to multiple people" / "broadcast" | `moltbot message broadcast` | Multi-target |
| "create a poll" | `moltbot message poll` | Polls on supported channels |
| "connect WhatsApp" / "link WhatsApp" | `moltbot channels login` | Shows QR code |
| "connect Telegram" / "add Telegram" | `moltbot channels add` | Bot token setup |
| "connect Discord" / "add Discord" | `moltbot channels add` | Bot token setup |
| "what channels do I have" | `moltbot channels list` | All accounts |
| "is WhatsApp connected" / "channel health" | `moltbot channels status` | Connection check |
| "change the model" / "switch to GPT" | `moltbot models set <model>` | Model name |
| "what model am I using" | `moltbot models status` | Current config |
| "what models are available" | `moltbot models list` | All providers |
| "add API key" / "set up OpenAI" | `moltbot models auth add` | Provider credentials |
| "schedule a job" / "run every day" | `moltbot cron add` | Create cron job |
| "list scheduled jobs" / "what's scheduled" | `moltbot cron list` | All jobs |
| "run a job now" / "trigger job" | `moltbot cron run` | Manual trigger |
| "pair a phone" / "connect my phone" | `moltbot devices` | Device pairing |
| "run command on phone" / "remote exec" | `moltbot nodes run` | Remote shell on node |
| "take a photo" / "camera" | `moltbot nodes camera` | Capture from paired device |
| "where is my phone" / "location" | `moltbot nodes location` | GPS from paired device |
| "what skills are installed" | `moltbot skills list` | Available skills |
| "install a plugin" | `moltbot plugins install <name>` | Add extension |
| "open a website" / "browse" | `moltbot browser open <url>` | Browser automation |
| "take a screenshot" | `moltbot browser screenshot` | Current page |
| "fill out a form" | `moltbot browser fill` | Automated form filling |
| "check security" / "audit" | `moltbot security audit` | Security scan |
| "view logs" / "debug" / "what happened" | `moltbot logs` | Gateway logs |
| "update moltbot" / "get latest" | `moltbot update` | CLI update |
| "search memory" / "find in memory" | `moltbot memory search "query"` | Semantic search |
| "open the dashboard" / "web UI" | `moltbot dashboard` | Control panel |
| "dev mode" / "testing" | `moltbot --dev gateway` | Isolated dev instance |
| "how much am I spending" / "token cost" | `moltbot gateway usage-cost` | Cost summary |
| "find gateways on network" | `moltbot gateway discover` | Bonjour discovery |
| "full diagnostic" / "probe" | `moltbot gateway probe` | Reachability summary |
| "my contacts" / "who can I message" | `moltbot directory peers` | Contact list |
| "stop burning tokens" | `moltbot gateway stop` | Stop all agent activity |
# STEPS
1. **Parse Intent**: Read the user's request carefully. Identify the core action they want to perform.
2. **Match Category**: Determine which category of Moltbot commands applies:
- Setup and configuration (initial setup, config changes)
- Gateway management (starting, stopping, restarting the daemon)
- Messaging (sending messages, managing channels)
- Agent and sessions (running agents, viewing sessions)
- Models (switching models, adding providers)
- Scheduling (cron jobs, timed tasks)
- Nodes and devices (remote devices, phone pairing, camera, location)
- Skills and plugins (extending capabilities)
- Browser automation (web interaction)
- Diagnostics (health, logs, security)
3. **Select Command**: Choose the most appropriate command based on:
- Directness (simplest path to goal)
- Safety (prefer read-only when uncertain)
- Specificity (exact command for exact need)
4. **Provide Context**: Add helpful notes about:
- What the command will do
- Common gotchas or mistakes
- Alternative approaches if relevant
- Whether a gateway restart is needed
# OUTPUT FORMAT
**CRITICAL**: Your output MUST follow this exact format:
**Line 1**: The exact command to run (nothing else on this line)
**Line 2**: Empty line
**Line 3+**: Brief explanation (2-4 sentences max)
Example output:
```text
moltbot channels login
This launches the channel login flow. For WhatsApp, it will display a QR code to scan with your phone. For Telegram, it will ask for your bot token from BotFather. Run `moltbot channels list` first to see what's already configured.
```
**Why this format**: The first line being command-only allows users to pipe through `head -1` to get just the executable command:
```bash
echo "connect my whatsapp" | fabric -p suggest_moltbot_command | head -1
```
# OUTPUT INSTRUCTIONS
- Output ONLY the command on line 1 (no markdown, no backticks, no explanation)
- Keep explanations concise (2-4 sentences)
- Mention one alternative if highly relevant
- Warn about common mistakes only if critical
- Never output markdown code blocks around the command
- Never prefix the command with "Command:" or similar
- If multiple shell commands are needed, combine them into a single line (e.g., with `&&`) so that `head -1` still returns an executable command; describe any follow-up steps in the explanation
# EXAMPLES
**Input**: "I want to connect my WhatsApp to Moltbot"
**Output**:
```text
moltbot channels login
This starts the channel authentication flow. For WhatsApp, you'll see a QR code -- scan it with WhatsApp on your phone (Settings > Linked Devices > Link a Device). The session persists until you log out or unlink from your phone.
```
**Input**: "check if everything is working"
**Output**:
```text
moltbot doctor
Runs comprehensive health checks on your Moltbot installation -- config, gateway, channels, skills, and common issues. It can also auto-fix some problems. For a quick channel-only check, use `moltbot status` instead.
```
**Input**: "I want to use Claude Opus instead of Sonnet"
**Output**:
```text
moltbot models set claude-opus-4-20250514
This sets your default model to Claude Opus. The change takes effect on the next agent turn. Run `moltbot models list` to see all available models, or `moltbot models status` to confirm the current setting.
```
**Input**: "send a telegram message to my group"
**Output**:
```text
moltbot message send --channel telegram --target @mygroup --message "Hello from Moltbot"
Replace @mygroup with your actual group username or chat ID. The Telegram bot must already be added to the group. Use `moltbot channels list` to verify your Telegram bot is configured.
```
**Input**: "schedule a daily reminder at 9am"
**Output**:
```text
moltbot cron add
This opens the interactive cron job creator. You'll set a schedule (e.g., 0 9 * * * for 9 AM daily), the message text, and the delivery target. Use `moltbot cron list` to verify it was created.
```
**Input**: "stop burning tokens"
**Output**:
```text
moltbot gateway stop
This stops the gateway daemon, which handles all agent sessions and heartbeats. No more API calls will be made. To disable just the heartbeat (but keep the gateway running), use `moltbot system heartbeat disable` instead.
```

View File

@@ -73,25 +73,25 @@ Match the request to one or more of these primary categories:
**AI**: ai, create_ai_jobs_analysis, create_art_prompt, create_pattern, create_prediction_block, extract_mcp_servers, extract_wisdom_agents, generate_code_rules, greybeard_secure_prompt_engineer, improve_prompt, judge_output, rate_ai_response, rate_ai_result, raw_query, suggest_pattern, summarize_prompt
**ANALYSIS**: ai, analyze_answers, analyze_bill, analyze_bill_short, analyze_candidates, analyze_cfp_submission, analyze_claims, analyze_comments, analyze_debate, analyze_discord_structure, analyze_email_headers, analyze_incident, analyze_interviewer_techniques, analyze_logs, analyze_malware, analyze_military_strategy, analyze_mistakes, analyze_paper, analyze_paper_simple, analyze_patent, analyze_personality, analyze_presentation, analyze_product_feedback, analyze_proposition, analyze_prose, analyze_prose_json, analyze_prose_pinker, analyze_risk, analyze_sales_call, analyze_spiritual_text, analyze_tech_impact, analyze_terraform_plan, analyze_threat_report, analyze_threat_report_cmds, analyze_threat_report_trends, apply_ul_tags, check_agreement, compare_and_contrast, concall_summary, create_ai_jobs_analysis, create_golden_rules, create_idea_compass, create_investigation_visualization, create_prediction_block, create_recursive_outline, create_story_about_people_interaction, create_tags, dialog_with_socrates, extract_main_idea, extract_predictions, find_hidden_message, find_logical_fallacies, get_wow_per_minute, identify_dsrp_distinctions, identify_dsrp_perspectives, identify_dsrp_relationships, identify_dsrp_systems, identify_job_stories, label_and_rate, model_as_sherlock_freud, predict_person_actions, prepare_7s_strategy, provide_guidance, rate_content, rate_value, recommend_artists, recommend_talkpanel_topics, review_design, summarize_board_meeting, t_analyze_challenge_handling, t_check_dunning_kruger, t_check_metrics, t_describe_life_outlook, t_extract_intro_sentences, t_extract_panel_topics, t_find_blindspots, t_find_negative_thinking, t_red_team_thinking, t_threat_model_plans, t_year_in_review, write_hackerone_report
**ANALYSIS**: ai, analyze_answers, analyze_bill, analyze_bill_short, analyze_candidates, analyze_cfp_submission, analyze_claims, analyze_comments, analyze_debate, analyze_discord_structure, analyze_email_headers, analyze_incident, analyze_interviewer_techniques, analyze_logs, analyze_malware, analyze_military_strategy, analyze_mistakes, analyze_paper, analyze_paper_simple, analyze_patent, analyze_personality, analyze_presentation, analyze_product_feedback, analyze_proposition, analyze_prose, analyze_prose_json, analyze_prose_pinker, analyze_risk, analyze_sales_call, analyze_spiritual_text, analyze_tech_impact, analyze_terraform_plan, analyze_threat_report, analyze_threat_report_cmds, analyze_threat_report_trends, apply_ul_tags, check_agreement, compare_and_contrast, concall_summary, create_ai_jobs_analysis, create_golden_rules, create_idea_compass, create_investigation_visualization, create_prediction_block, create_recursive_outline, create_story_about_people_interaction, create_tags, dialog_with_socrates, extract_bd_ideas, extract_main_idea, extract_predictions, find_hidden_message, find_logical_fallacies, get_wow_per_minute, identify_dsrp_distinctions, identify_dsrp_perspectives, identify_dsrp_relationships, identify_dsrp_systems, identify_job_stories, label_and_rate, model_as_sherlock_freud, predict_person_actions, prepare_7s_strategy, provide_guidance, rate_content, rate_value, recommend_artists, recommend_talkpanel_topics, review_design, suggest_gt_command, summarize_board_meeting, t_analyze_challenge_handling, t_check_dunning_kruger, t_check_metrics, t_describe_life_outlook, t_extract_intro_sentences, t_extract_panel_topics, t_find_blindspots, t_find_negative_thinking, t_red_team_thinking, t_threat_model_plans, t_year_in_review, write_hackerone_report
**BILL**: analyze_bill, analyze_bill_short
**BUSINESS**: analyze_discord_structure, check_agreement, concall_summary, create_ai_jobs_analysis, create_formal_email, create_hormozi_offer, create_loe_document, create_logo, create_newsletter_entry, create_prd, explain_project, extract_business_ideas, extract_characters, extract_product_features, extract_skills, extract_sponsors, identify_job_stories, prepare_7s_strategy, rate_value, t_check_metrics, t_create_h3_career, t_visualize_mission_goals_projects, t_year_in_review, transcribe_minutes
**BUSINESS**: analyze_discord_structure, check_agreement, concall_summary, create_ai_jobs_analysis, create_formal_email, create_hormozi_offer, create_loe_document, create_logo, create_newsletter_entry, create_prd, create_upgrade_pack, explain_project, extract_business_ideas, extract_characters, extract_product_features, extract_skills, extract_sponsors, identify_job_stories, prepare_7s_strategy, rate_value, t_check_metrics, t_create_h3_career, t_visualize_mission_goals_projects, t_year_in_review, transcribe_minutes
**CLASSIFICATION**: apply_ul_tags
**CONVERSION**: clean_text, convert_to_markdown, create_graph_from_input, export_data_as_csv, extract_videoid, humanize, md_callout, sanitize_broken_html_to_markdown, to_flashcards, transcribe_minutes, translate, tweet, write_latex
**CR THINKING**: capture_thinkers_work, create_idea_compass, create_markmap_visualization, dialog_with_socrates, extract_alpha, extract_controversial_ideas, extract_extraordinary_claims, extract_predictions, extract_primary_problem, extract_wisdom_nometa, find_hidden_message, find_logical_fallacies, summarize_debate, t_analyze_challenge_handling, t_check_dunning_kruger, t_find_blindspots, t_find_negative_thinking, t_find_neglected_goals, t_red_team_thinking
**CR THINKING**: capture_thinkers_work, create_idea_compass, create_markmap_visualization, create_upgrade_pack, dialog_with_socrates, extract_alpha, extract_controversial_ideas, extract_extraordinary_claims, extract_predictions, extract_primary_problem, extract_wisdom_nometa, find_hidden_message, find_logical_fallacies, summarize_debate, t_analyze_challenge_handling, t_check_dunning_kruger, t_find_blindspots, t_find_negative_thinking, t_find_neglected_goals, t_red_team_thinking
**CREATIVITY**: create_mnemonic_phrases, write_essay
**DEVELOPMENT**: agility_story, analyze_logs, analyze_prose_json, answer_interview_question, ask_secure_by_design_questions, ask_uncle_duke, coding_master, create_coding_feature, create_coding_project, create_command, create_design_document, create_design_system, create_git_diff_commit, create_golden_rules, create_loe_document, create_mermaid_visualization, create_mermaid_visualization_for_github, create_pattern, create_prd, create_sigma_rules, create_user_story, explain_code, explain_docs, explain_project, export_data_as_csv, extract_algorithm_update_recommendations, extract_mcp_servers, extract_poc, extract_product_features, generate_code_rules, identify_job_stories, improve_prompt, official_pattern_template, recommend_pipeline_upgrades, refine_design_document, review_code, review_design, sanitize_broken_html_to_markdown, suggest_pattern, summarize_git_changes, summarize_git_diff, summarize_pull-requests, write_nuclei_template_rule, write_pull-request, write_semgrep_rule
**DEVELOPMENT**: agility_story, analyze_logs, analyze_prose_json, answer_interview_question, ask_secure_by_design_questions, ask_uncle_duke, coding_master, create_bd_issue, create_coding_feature, create_coding_project, create_command, create_design_document, create_design_system, create_git_diff_commit, create_golden_rules, create_loe_document, create_mermaid_visualization, create_mermaid_visualization_for_github, create_pattern, create_prd, create_sigma_rules, create_user_story, explain_code, explain_docs, explain_project, export_data_as_csv, extract_algorithm_update_recommendations, extract_bd_ideas, extract_mcp_servers, extract_poc, extract_product_features, generate_code_rules, identify_job_stories, improve_prompt, official_pattern_template, recommend_pipeline_upgrades, refine_design_document, review_code, review_design, sanitize_broken_html_to_markdown, suggest_gt_command, suggest_pattern, summarize_git_changes, summarize_git_diff, summarize_pull-requests, write_nuclei_template_rule, write_pull-request, write_semgrep_rule
**DEVOPS**: analyze_terraform_plan
**EXTRACT**: analyze_comments, create_aphorisms, create_golden_rules, create_tags, create_video_chapters, extract_algorithm_update_recommendations, extract_alpha, extract_article_wisdom, extract_book_ideas, extract_book_recommendations, extract_business_ideas, extract_characters, extract_controversial_ideas, extract_core_message, extract_ctf_writeup, extract_domains, extract_extraordinary_claims, extract_ideas, extract_insights, extract_insights_dm, extract_instructions, extract_jokes, extract_latest_video, extract_main_activities, extract_main_idea, extract_mcp_servers, extract_most_redeeming_thing, extract_patterns, extract_poc, extract_predictions, extract_primary_problem, extract_primary_solution, extract_product_features, extract_questions, extract_recipe, extract_recommendations, extract_references, extract_skills, extract_song_meaning, extract_sponsors, extract_videoid, extract_wisdom, extract_wisdom_agents, extract_wisdom_dm, extract_wisdom_nometa, extract_wisdom_short, extract_wisdom_with_attribution, generate_code_rules, t_extract_intro_sentences, t_extract_panel_topics
**EXTRACT**: analyze_comments, create_aphorisms, create_golden_rules, create_tags, create_upgrade_pack, create_video_chapters, extract_algorithm_update_recommendations, extract_all_quotes, extract_alpha, extract_article_wisdom, extract_bd_ideas, extract_book_ideas, extract_book_recommendations, extract_business_ideas, extract_characters, extract_controversial_ideas, extract_core_message, extract_ctf_writeup, extract_domains, extract_extraordinary_claims, extract_ideas, extract_insights, extract_insights_dm, extract_instructions, extract_jokes, extract_latest_video, extract_main_activities, extract_main_idea, extract_mcp_servers, extract_most_redeeming_thing, extract_patterns, extract_poc, extract_predictions, extract_primary_problem, extract_primary_solution, extract_product_features, extract_questions, extract_recipe, extract_recommendations, extract_references, extract_skills, extract_song_meaning, extract_sponsors, extract_videoid, extract_wisdom, extract_wisdom_agents, extract_wisdom_dm, extract_wisdom_nometa, extract_wisdom_short, extract_wisdom_with_attribution, generate_code_rules, t_extract_intro_sentences, t_extract_panel_topics
**GAMING**: create_npc, create_rpg_summary, summarize_rpg_session

View File

@@ -120,6 +120,10 @@ Analyze user comments for sentiment, extract praise/criticism, and summarize rec
Analyze debates identifying arguments, agreements, and emotional intensity.
### analyze_discord_structure
Analyze Discord server structures for organizational issues, permissions, and optimization.
### analyze_interviewer_techniques
Study interviewer questions/methods to identify effective interview techniques.
@@ -212,6 +216,10 @@ Identify automation risks and career resilience strategies.
Develop positive mental frameworks for challenging situations.
### create_golden_rules
Extract enforceable rules from codebases to prevent common mistakes and ensure consistency.
### create_story_about_people_interaction
Analyze two personas, compare their dynamics, and craft a realistic, character-driven story from those insights.
@@ -232,6 +240,10 @@ Generate single-word tags for content categorization and mind mapping.
Distill the fundamental message into a single, impactful sentence.
### extract_bd_ideas
Extract actionable ideas from content and transform into bd create commands.
### extract_extraordinary_claims
Identify/extract claims contradicting scientific consensus.
@@ -344,6 +356,10 @@ Convert board meeting transcripts into formal meeting notes for corporate record
Summarize AI prompts to identify instructions and outputs.
### suggest_gt_command
Suggest optimal Gas Town (GT) commands based on user intent and task description.
### t_analyze_challenge_handling
Evaluate challenge handling by analyzing response strategies.
@@ -382,6 +398,10 @@ Generate annual reviews by analyzing achievements and learnings.
Compile relevant, attributed aphorisms from historical figures on topics.
### create_golden_rules
Extract enforceable rules from codebases to prevent common mistakes and ensure consistency.
### create_upgrade_pack
Extract world model updates/algorithms to improve decision-making.
@@ -398,6 +418,10 @@ Extract recommendations for improving algorithms, focusing on steps.
Extracts the most novel and surprising ideas ("alpha") from content, inspired by information theory.
### extract_all_quotes
Extract all inspirational and educational quotes from content including podcasts and essays.
### extract_article_wisdom
Extract wisdom from articles, organizing into actionable takeaways.
@@ -410,6 +434,10 @@ Extract novel ideas from books to inspire new projects.
Extract/prioritize practical advice from books.
### extract_bd_ideas
Extract actionable ideas from content and transform into bd create commands.
### extract_characters
Identify all characters (human and non-human), resolve their aliases and pronouns into canonical names, and produce detailed descriptions of each character's role, motivations, and interactions ranked by narrative importance.
@@ -490,10 +518,6 @@ Extract learnings from DMs, focusing on personal growth.
Extract pure wisdom from content without metadata.
### extract_wisdom_short
Extract condensed insightful ideas and recommendations focusing on life wisdom.
### extract_wisdom_with_attribution
Extract insightful ideas and recommendations with speaker attribution for quotes.
@@ -582,6 +606,10 @@ Transform content into academic papers using LaTeX layout.
Create step-by-step DIY tutorials with clear instructions and materials.
### create_design_system
Create comprehensive CSS design systems with tokens, typography, spacing, and components.
### create_formal_email
Compose professional emails with proper tone and structure.
@@ -688,6 +716,10 @@ Generate appropriate responses to technical interview questions.
Expert software dev. guidance focusing on Java, Spring, frontend, and best practices.
### create_bd_issue
Transform natural language descriptions into optimal bd create commands for issue tracking.
### coding_master
Explain coding concepts/languages for beginners
@@ -704,10 +736,18 @@ Design coding projects with clear architecture, steps, and best practices.
Create software architecture docs using C4 model.
### create_design_system
Create comprehensive CSS design systems with tokens, typography, spacing, and components.
### create_git_diff_commit
Generate clear git commit messages and commands for code changes.
### create_golden_rules
Extract enforceable rules from codebases to prevent common mistakes and ensure consistency.
### create_loe_document
Create detailed Level of Effort (LOE) estimation documents.
@@ -728,6 +768,10 @@ Analyze/explain code, security tool outputs, and configs.
Create project overviews with instructions and usage examples.
### extract_bd_ideas
Extract actionable ideas from content and transform into bd create commands.
### extract_poc
Extract/document proof-of-concept demos from technical content.
@@ -752,6 +796,10 @@ Performs a comprehensive code review, providing detailed feedback on correctness
Evaluate software designs for scalability and security.
### suggest_gt_command
Suggest optimal Gas Town (GT) commands based on user intent and task description.
### summarize_git_changes
Summarize git changes highlighting key modifications.
@@ -868,6 +916,10 @@ Create Semgrep rules for static code analysis.
## BUSINESS PATTERNS
### analyze_discord_structure
Analyze Discord server structures for organizational issues, permissions, and optimization.
### create_hormozi_offer
Create compelling business offers using Alex Hormozi's methodology.
@@ -912,6 +964,10 @@ Convert content into flashcard format for learning.
Transform unstructured text or markdown content into interactive HTML concept maps using Vis.js by extracting key concepts and their logical relationships.
### create_design_system
Create comprehensive CSS design systems with tokens, typography, spacing, and components.
### create_excalidraw_visualization
Create visualizations using Excalidraw.

32
go.mod
View File

@@ -20,7 +20,7 @@ require (
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/mattn/go-sqlite3 v1.14.32
github.com/nicksnyder/go-i18n/v2 v2.6.0
github.com/ollama/ollama v0.13.5
github.com/ollama/ollama v0.15.1
github.com/openai/openai-go v1.12.0
github.com/otiai10/copy v1.14.1
github.com/pkg/errors v0.9.1
@@ -41,8 +41,19 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/agnivade/levenshtein v1.1.1 // indirect
github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect
github.com/aws/aws-sdk-go-v2/service/signin v1.0.4 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/bytedance/gopkg v0.1.3 // indirect
github.com/chewxy/hm v1.0.0 // indirect
github.com/chewxy/math32 v1.11.0 // indirect
github.com/containerd/console v1.0.3 // indirect
github.com/d4l3k/go-bfloat16 v0.0.0-20211005043715-690c3bdd05f1 // indirect
github.com/dlclark/regexp2 v1.11.4 // indirect
github.com/emirpasic/gods/v2 v2.0.0-alpha // indirect
github.com/gin-contrib/cors v1.7.2 // indirect
github.com/go-openapi/jsonpointer v0.22.4 // indirect
github.com/go-openapi/jsonreference v0.21.4 // indirect
github.com/go-openapi/spec v0.22.2 // indirect
@@ -54,16 +65,35 @@ require (
github.com/go-openapi/swag/typeutils v0.25.4 // indirect
github.com/go-openapi/swag/yamlutils v0.25.4 // indirect
github.com/goccy/go-yaml v1.19.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/flatbuffers v24.3.25+incompatible // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/nlpodyssey/gopickle v0.3.0 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pdevine/tensor v0.0.0-20240510204454-f88f4562727c // indirect
github.com/quic-go/qpack v0.6.0 // indirect
github.com/quic-go/quic-go v0.57.1 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xtgo/set v1.0.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect
go.uber.org/mock v0.6.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect
golang.org/x/image v0.25.0 // indirect
golang.org/x/mod v0.31.0 // indirect
golang.org/x/term v0.38.0 // indirect
golang.org/x/time v0.14.0 // indirect
golang.org/x/tools v0.40.0 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
gonum.org/v1/gonum v0.16.0 // indirect
gorgonia.org/vecf32 v0.9.0 // indirect
gorgonia.org/vecf64 v0.9.0 // indirect
)
require (

242
go.sum
View File

@@ -1,3 +1,5 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c=
cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI=
cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
@@ -8,6 +10,8 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 h1:5YTBM8QDVIBN3sxBil89WfdAAqDZbyJTgh688DSxX5w=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4=
@@ -16,8 +20,10 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDo
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI=
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs=
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
@@ -25,14 +31,21 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw=
github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/anthropics/anthropic-sdk-go v1.19.0 h1:mO6E+ffSzLRvR/YUH9KJC0uGw0uV8GjISIuzem//3KE=
github.com/anthropics/anthropic-sdk-go v1.19.0/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 h1:q4dksr6ICHXqG5hm0ZW5IHyeEJXoIJSOZeBLmWPNeIQ=
github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40/go.mod h1:Q7yQnSMnLvcXlZ8RV+jwz/6y1rQTqbX6C82SndT52Zs=
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
@@ -71,40 +84,76 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 h1:SciGFVNZ4mHdm7gpD1dgZYnCuVdX
github.com/aws/aws-sdk-go-v2/service/sts v1.41.5/go.mod h1:iW40X4QBmUxdP+fZNOpfmkdMZqsovezbAeO+Ubiv2pk=
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
github.com/bytedance/sonic v1.14.2 h1:k1twIoe97C1DtYUo+fZQy865IuHia4PR5RPiuGPPIIE=
github.com/bytedance/sonic v1.14.2/go.mod h1:T80iDELeHiHKSc0C9tubFygiuXoGzrkjKzX2quAx980=
github.com/bytedance/sonic/loader v0.4.0 h1:olZ7lEqcxtZygCK9EKYKADnpQoYkRQxaeY2NYzevs+o=
github.com/bytedance/sonic/loader v0.4.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chewxy/hm v1.0.0 h1:zy/TSv3LV2nD3dwUEQL2VhXeoXbb9QkpmdRAVUFiA6k=
github.com/chewxy/hm v1.0.0/go.mod h1:qg9YI4q6Fkj/whwHR1D+bOGeF7SniIP40VweVepLjg0=
github.com/chewxy/math32 v1.0.0/go.mod h1:Miac6hA1ohdDUTagnvJy/q+aNnEk16qWUdb8ZVhvCN0=
github.com/chewxy/math32 v1.11.0 h1:8sek2JWqeaKkVnHa7bPVqCEOUPbARo4SGxs6toKyAOo=
github.com/chewxy/math32 v1.11.0/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0=
github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4=
github.com/coder/websocket v1.8.13 h1:f3QZdXy7uGVz+4uCJy2nTZyM0yTBj8yANEHhqlXZ9FE=
github.com/coder/websocket v1.8.13/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
github.com/d4l3k/go-bfloat16 v0.0.0-20211005043715-690c3bdd05f1 h1:cBzrdJPAFBsgCrDPnZxlp1dF2+k4r1kVpD7+1S1PVjY=
github.com/d4l3k/go-bfloat16 v0.0.0-20211005043715-690c3bdd05f1/go.mod h1:uw2gLcxEuYUlAd/EXyjc/v55nd3+47YAgWbSXVxPrNI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU=
github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM=
github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo=
github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw=
github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/cors v1.7.2 h1:oLDHxdg8W/XDoN/8zamqk/Drgt4oVZDvaV0YmvVICQw=
github.com/gin-contrib/cors v1.7.2/go.mod h1:SUJVARKgQ40dmrzgXEVxj2m7Ig1v1qIboQkPDTQ9t2E=
github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk=
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
@@ -113,6 +162,10 @@ github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk=
github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls=
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
@@ -121,6 +174,8 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
github.com/go-git/go-git/v5 v5.16.4 h1:7ajIEZHZJULcyJebDLo99bGgS0jRrOxzZG4uCk2Yb2Y=
github.com/go-git/go-git/v5 v5.16.4/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -169,15 +224,44 @@ github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/goccy/go-yaml v1.19.1 h1:3rG3+v8pkhRqoQ/88NYNMHYVGYztCOCIZ7UQhu7H+NE=
github.com/goccy/go-yaml v1.19.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f h1:3BSP1Tbs2djlpprl7wCLuiqMaUh5SJkkzI2gDs+FgLs=
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14=
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI=
github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
@@ -188,6 +272,7 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ=
@@ -196,6 +281,7 @@ github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hasura/go-graphql-client v0.14.4 h1:bYU7/+V50T2YBGdNQXt6l4f2cMZPECPUd8cyCR+ixtw=
github.com/hasura/go-graphql-client v0.14.4/go.mod h1:jfSZtBER3or+88Q9vFhWHiFMPppfYILRyl+0zsgPIIw=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
@@ -206,12 +292,18 @@ github.com/jessevdk/go-flags v1.6.1 h1:Cvu5U8UGrLay1rZfv/zP7iLpSHGUZ/Ou68T0iX1bB
github.com/jessevdk/go-flags v1.6.1/go.mod h1:Mk8T1hIAWpOiJiHa9rJASDK2UGWji0EuPGBnNLMooyc=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -225,9 +317,14 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs=
github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -237,8 +334,14 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/nicksnyder/go-i18n/v2 v2.6.0 h1:C/m2NNWNiTB6SK4Ao8df5EWm3JETSTIGNXBpMJTxzxQ=
github.com/nicksnyder/go-i18n/v2 v2.6.0/go.mod h1:88sRqr0C6OPyJn0/KRNaEz1uWorjxIKP7rUUcvycecE=
github.com/nlpodyssey/gopickle v0.3.0 h1:BLUE5gxFLyyNOPzlXxt6GoHEMMxD0qhsE4p0CIQyoLw=
github.com/nlpodyssey/gopickle v0.3.0/go.mod h1:f070HJ/yR+eLi5WmM1OXJEGaTpuJEUiib19olXgYha0=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/ollama/ollama v0.13.5 h1:ulttnWgeQrXc9jVsGReIP/9MCA+pF1XYTsdwiNMeZfk=
github.com/ollama/ollama v0.13.5/go.mod h1:2VxohsKICsmUCrBjowf+luTXYiXn2Q70Cnvv5Urbzkw=
github.com/ollama/ollama v0.15.1 h1:Kbqxt9KIr51fxBoA7yr8lSEZMArr5fn96NcbjbC3TQI=
github.com/ollama/ollama v0.15.1/go.mod h1:4Yn3jw2hZ4VqyJ1XciYawDRE8bzv4RT3JiVZR1kCfwE=
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
github.com/openai/openai-go v1.12.0 h1:NBQCnXzqOTv5wsgNC36PrFEiskGfO5wccfCWDo9S1U0=
@@ -247,12 +350,18 @@ github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
github.com/pdevine/tensor v0.0.0-20240510204454-f88f4562727c h1:GwiUUjKefgvSNmv3NCvI/BL0kDebW6Xa+kcdpdc1mTY=
github.com/pdevine/tensor v0.0.0-20240510204454-f88f4562727c/go.mod h1:PSojXDXF7TbgQiD6kkd98IHOS0QqTyUEaWRiS8+BLu8=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pjbgf/sha1cd v0.4.0 h1:NXzbL1RvjTUi6kgYZCX3fPwwl27Q1LJndxtUDVfJGRY=
github.com/pjbgf/sha1cd v0.4.0/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
@@ -260,14 +369,19 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII=
github.com/quic-go/quic-go v0.57.1 h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10=
github.com/quic-go/quic-go v0.57.1/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw=
github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
@@ -286,9 +400,11 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -316,8 +432,17 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY=
github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
github.com/xtgo/set v1.0.0 h1:6BCNBRv3ORNDQ7fyoJXRv+tstJz3m1JVFQErfeZz2pY=
github.com/xtgo/set v1.0.0/go.mod h1:d3NHzGzSa0NmB2NhFyECA+QdRp29oEn2xbT+TpeFoM8=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
@@ -335,13 +460,19 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 h1:lGdhQUN/cnWdSH3291CUuxSEqc+AsGTiDxPP3r2J0l4=
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
golang.org/x/arch v0.23.0 h1:lKF64A2jF6Zd8L0knGltUnegD62JMFBiCPBmQpToHhg=
golang.org/x/arch v0.23.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
@@ -350,8 +481,35 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE=
golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b h1:QoALfVG9rhQ/M7vYDScfPdWjGL9dlsVVM5VGh7aKoAA=
golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
@@ -359,8 +517,19 @@ golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
@@ -372,9 +541,17 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
@@ -383,12 +560,21 @@ golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -414,6 +600,7 @@ golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
@@ -426,8 +613,19 @@ golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
@@ -435,21 +633,57 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb
golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
google.golang.org/api v0.258.0 h1:IKo1j5FBlN74fe5isA2PVozN3Y5pwNKriEgAXPOkDAc=
google.golang.org/api v0.258.0/go.mod h1:qhOMTQEZ6lUps63ZNq9jhODswwjkjYYguA7fA3TBFww=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genai v1.40.0 h1:kYxyQSH+vsib8dvsgyLJzsVEIv5k3ZmHJyVqdvGncmc=
google.golang.org/genai v1.40.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U=
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4=
google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s=
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE=
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 h1:2I6GHUeJ/4shcDpoUlLs/2WPnhg7yJwvXtqcMJt9liA=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -459,7 +693,15 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorgonia.org/vecf32 v0.9.0 h1:PClazic1r+JVJ1dEzRXgeiVl4g1/Hf/w+wUSqnco1Xg=
gorgonia.org/vecf32 v0.9.0/go.mod h1:NCc+5D2oxddRL11hd+pCB1PEyXWOyiQxfZ/1wwhOXCA=
gorgonia.org/vecf64 v0.9.0 h1:bgZDP5x0OzBF64PjMGC3EvTdOoMEcmfAh1VCUnZFm1A=
gorgonia.org/vecf64 v0.9.0/go.mod h1:hp7IOWCnRiVQKON73kkC/AUMtEXyf9kGlVrtPQ9ccVA=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

View File

@@ -3,7 +3,6 @@ package anthropic
import (
"context"
"fmt"
"net/http"
neturl "net/url"
"os"
"path"
@@ -16,7 +15,6 @@ import (
"github.com/danielmiessler/fabric/internal/domain"
debuglog "github.com/danielmiessler/fabric/internal/log"
"github.com/danielmiessler/fabric/internal/plugins"
"github.com/danielmiessler/fabric/internal/util"
)
const defaultBaseUrl = "https://api.anthropic.com/"
@@ -25,8 +23,6 @@ const webSearchToolName = "web_search"
const webSearchToolType = "web_search_20250305"
const sourcesHeader = "## Sources"
const authTokenIdentifier = "claude"
func NewClient() (ret *Client) {
vendorName := "Anthropic"
ret = &Client{}
@@ -35,7 +31,6 @@ func NewClient() (ret *Client) {
ret.ApiBaseURL = ret.AddSetupQuestion("API Base URL", false)
ret.ApiBaseURL.Value = defaultBaseUrl
ret.UseOAuth = ret.AddSetupQuestionBool("Use OAuth login", false)
ret.ApiKey = ret.PluginBase.AddSetupQuestion("API key", false)
ret.maxTokens = 4096
@@ -64,35 +59,13 @@ func NewClient() (ret *Client) {
return
}
// IsConfigured returns true if either the API key or OAuth is configured
// IsConfigured returns true if the API key is configured
func (an *Client) IsConfigured() bool {
// Check if API key is configured
if an.ApiKey.Value != "" {
return true
}
// Check if OAuth is enabled and has a valid token
if plugins.ParseBoolElseFalse(an.UseOAuth.Value) {
storage, err := util.NewOAuthStorage()
if err != nil {
return false
}
// If no valid token exists, automatically run OAuth flow
if !storage.HasValidToken(authTokenIdentifier, 5) {
fmt.Println("OAuth enabled but no valid token found. Starting authentication...")
_, err := RunOAuthFlow(authTokenIdentifier)
if err != nil {
fmt.Printf("OAuth authentication failed: %v\n", err)
return false
}
// After successful OAuth flow, check again
return storage.HasValidToken(authTokenIdentifier, 5)
}
return true
}
return false
}
@@ -100,7 +73,6 @@ type Client struct {
*plugins.PluginBase
ApiBaseURL *plugins.SetupQuestion
ApiKey *plugins.SetupQuestion
UseOAuth *plugins.SetupQuestion
maxTokens int
defaultRequiredUserMessage string
@@ -115,21 +87,6 @@ func (an *Client) Setup() (err error) {
return
}
if plugins.ParseBoolElseFalse(an.UseOAuth.Value) {
// Check if we have a valid stored token
storage, err := util.NewOAuthStorage()
if err != nil {
return err
}
if !storage.HasValidToken(authTokenIdentifier, 5) {
// No valid token, run OAuth flow
if _, err = RunOAuthFlow(authTokenIdentifier); err != nil {
return err
}
}
}
err = an.configure()
return
}
@@ -141,17 +98,7 @@ func (an *Client) configure() (err error) {
opts = append(opts, option.WithBaseURL(an.ApiBaseURL.Value))
}
if plugins.ParseBoolElseFalse(an.UseOAuth.Value) {
// For OAuth, use Bearer token with custom headers
// Create custom HTTP client that adds OAuth Bearer token and beta header
baseTransport := &http.Transport{}
httpClient := &http.Client{
Transport: NewOAuthTransport(an, baseTransport),
}
opts = append(opts, option.WithHTTPClient(httpClient))
} else {
opts = append(opts, option.WithAPIKey(an.ApiKey.Value))
}
opts = append(opts, option.WithAPIKey(an.ApiKey.Value))
an.client = anthropic.NewClient(opts...)
return
@@ -264,17 +211,6 @@ func (an *Client) buildMessageParams(msgs []anthropic.MessageParam, opts *domain
params.Temperature = anthropic.Opt(opts.Temperature)
}
// Add Claude Code spoofing system message for OAuth authentication
if plugins.ParseBoolElseFalse(an.UseOAuth.Value) {
params.System = []anthropic.TextBlockParam{
{
Type: "text",
Text: "You are Claude Code, Anthropic's official CLI for Claude.",
},
}
}
if opts.Search {
// Build the web-search tool definition:
webTool := anthropic.WebSearchTool20250305Param{

View File

@@ -1,327 +0,0 @@
package anthropic
import (
"bytes"
"crypto/rand"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"io"
"net/http"
"os/exec"
"strings"
"time"
debuglog "github.com/danielmiessler/fabric/internal/log"
"github.com/danielmiessler/fabric/internal/util"
"golang.org/x/oauth2"
)
// OAuth configuration constants
const (
oauthClientID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e"
oauthAuthURL = "https://claude.ai/oauth/authorize"
oauthTokenURL = "https://console.anthropic.com/v1/oauth/token"
oauthRedirectURL = "https://console.anthropic.com/oauth/code/callback"
)
// OAuthTransport is a custom HTTP transport that adds OAuth Bearer token and beta header
type OAuthTransport struct {
client *Client
base http.RoundTripper
}
// RoundTrip implements the http.RoundTripper interface
func (t *OAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) {
// Clone the request to avoid modifying the original
newReq := req.Clone(req.Context())
// Get current token (may refresh if needed)
token, err := t.getValidToken(authTokenIdentifier)
if err != nil {
return nil, fmt.Errorf("failed to get valid OAuth token: %w", err)
}
// Add OAuth Bearer token
newReq.Header.Set("Authorization", "Bearer "+token)
// Add the anthropic-beta header for OAuth, preserving existing betas
existing := newReq.Header.Get("anthropic-beta")
beta := "oauth-2025-04-20"
if existing != "" {
beta = existing + "," + beta
}
newReq.Header.Set("anthropic-beta", beta)
// Set User-Agent to match AI SDK exactly
newReq.Header.Set("User-Agent", "ai-sdk/anthropic")
// Remove x-api-key header if present (OAuth doesn't use it)
newReq.Header.Del("x-api-key")
return t.base.RoundTrip(newReq)
}
// getValidToken returns a valid access token, refreshing if necessary
func (t *OAuthTransport) getValidToken(tokenIdentifier string) (string, error) {
storage, err := util.NewOAuthStorage()
if err != nil {
return "", fmt.Errorf("failed to create OAuth storage: %w", err)
}
// Load stored token
token, err := storage.LoadToken(tokenIdentifier)
if err != nil {
return "", fmt.Errorf("failed to load stored token: %w", err)
}
// If no token exists, run OAuth flow
if token == nil {
debuglog.Log("No OAuth token found, initiating authentication...\n")
newAccessToken, err := RunOAuthFlow(tokenIdentifier)
if err != nil {
return "", fmt.Errorf("failed to authenticate: %w", err)
}
return newAccessToken, nil
}
// Check if token needs refresh (5 minute buffer)
if token.IsExpired(5) {
debuglog.Log("OAuth token expired, refreshing...\n")
newAccessToken, err := RefreshToken(tokenIdentifier)
if err != nil {
// If refresh fails, try re-authentication
debuglog.Log("Token refresh failed, re-authenticating...\n")
newAccessToken, err = RunOAuthFlow(tokenIdentifier)
if err != nil {
return "", fmt.Errorf("failed to refresh or re-authenticate: %w", err)
}
}
return newAccessToken, nil
}
return token.AccessToken, nil
}
// NewOAuthTransport creates a new OAuth transport for the given client
func NewOAuthTransport(client *Client, base http.RoundTripper) *OAuthTransport {
return &OAuthTransport{
client: client,
base: base,
}
}
// generatePKCE generates PKCE code verifier and challenge
func generatePKCE() (verifier, challenge string, err error) {
b := make([]byte, 32)
if _, err = rand.Read(b); err != nil {
return
}
verifier = base64.RawURLEncoding.EncodeToString(b)
sum := sha256.Sum256([]byte(verifier))
challenge = base64.RawURLEncoding.EncodeToString(sum[:])
return
}
// openBrowser attempts to open the given URL in the default browser
func openBrowser(url string) {
commands := [][]string{{"xdg-open", url}, {"open", url}, {"cmd", "/c", "start", url}}
for _, cmd := range commands {
if exec.Command(cmd[0], cmd[1:]...).Start() == nil {
return
}
}
}
// RunOAuthFlow executes the complete OAuth authorization flow
func RunOAuthFlow(tokenIdentifier string) (token string, err error) {
// First check if we have an existing token that can be refreshed
storage, err := util.NewOAuthStorage()
if err == nil {
existingToken, err := storage.LoadToken(tokenIdentifier)
if err == nil && existingToken != nil {
// If token exists but is expired, try refreshing first
if existingToken.IsExpired(5) {
debuglog.Log("Found expired OAuth token, attempting refresh...\n")
refreshedToken, refreshErr := RefreshToken(tokenIdentifier)
if refreshErr == nil {
debuglog.Log("Token refresh successful\n")
return refreshedToken, nil
}
debuglog.Log("Token refresh failed (%v), proceeding with full OAuth flow...\n", refreshErr)
} else {
// Token exists and is still valid
return existingToken.AccessToken, nil
}
}
}
verifier, challenge, err := generatePKCE()
if err != nil {
return
}
cfg := oauth2.Config{
ClientID: oauthClientID,
Endpoint: oauth2.Endpoint{AuthURL: oauthAuthURL, TokenURL: oauthTokenURL},
RedirectURL: oauthRedirectURL,
Scopes: []string{"org:create_api_key", "user:profile", "user:inference"},
}
authURL := cfg.AuthCodeURL(verifier,
oauth2.SetAuthURLParam("code_challenge", challenge),
oauth2.SetAuthURLParam("code_challenge_method", "S256"),
oauth2.SetAuthURLParam("code", "true"),
oauth2.SetAuthURLParam("state", verifier),
)
debuglog.Log("Open the following URL in your browser. Fabric would like to authorize:\n")
debuglog.Log("%s\n", authURL)
openBrowser(authURL)
debuglog.Log("Paste the authorization code here: ")
var code string
fmt.Scanln(&code)
parts := strings.SplitN(code, "#", 2)
state := verifier
if len(parts) == 2 {
state = parts[1]
}
// Manual token exchange to match opencode implementation
tokenReq := map[string]string{
"code": parts[0],
"state": state,
"grant_type": "authorization_code",
"client_id": oauthClientID,
"redirect_uri": oauthRedirectURL,
"code_verifier": verifier,
}
token, err = exchangeToken(tokenIdentifier, tokenReq)
return
}
// exchangeToken exchanges authorization code for access token
func exchangeToken(tokenIdentifier string, params map[string]string) (token string, err error) {
reqBody, err := json.Marshal(params)
if err != nil {
return
}
resp, err := http.Post(oauthTokenURL, "application/json", bytes.NewBuffer(reqBody))
if err != nil {
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
err = fmt.Errorf("token exchange failed: %s - %s", resp.Status, string(body))
return
}
var result struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int `json:"expires_in"`
TokenType string `json:"token_type"`
Scope string `json:"scope"`
}
if err = json.NewDecoder(resp.Body).Decode(&result); err != nil {
return
}
// Save the complete token information
storage, err := util.NewOAuthStorage()
if err != nil {
return result.AccessToken, fmt.Errorf("failed to create OAuth storage: %w", err)
}
oauthToken := &util.OAuthToken{
AccessToken: result.AccessToken,
RefreshToken: result.RefreshToken,
ExpiresAt: time.Now().Unix() + int64(result.ExpiresIn),
TokenType: result.TokenType,
Scope: result.Scope,
}
if err = storage.SaveToken(tokenIdentifier, oauthToken); err != nil {
return result.AccessToken, fmt.Errorf("failed to save OAuth token: %w", err)
}
token = result.AccessToken
return
}
// RefreshToken refreshes an expired OAuth token using the refresh token
func RefreshToken(tokenIdentifier string) (string, error) {
storage, err := util.NewOAuthStorage()
if err != nil {
return "", fmt.Errorf("failed to create OAuth storage: %w", err)
}
// Load existing token
token, err := storage.LoadToken(tokenIdentifier)
if err != nil {
return "", fmt.Errorf("failed to load stored token: %w", err)
}
if token == nil || token.RefreshToken == "" {
return "", fmt.Errorf("no refresh token available")
}
// Prepare refresh request
refreshReq := map[string]string{
"grant_type": "refresh_token",
"refresh_token": token.RefreshToken,
"client_id": oauthClientID,
}
reqBody, err := json.Marshal(refreshReq)
if err != nil {
return "", fmt.Errorf("failed to marshal refresh request: %w", err)
}
// Make refresh request
resp, err := http.Post(oauthTokenURL, "application/json", bytes.NewBuffer(reqBody))
if err != nil {
return "", fmt.Errorf("refresh request failed: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
return "", fmt.Errorf("token refresh failed: %s - %s", resp.Status, string(body))
}
var result struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int `json:"expires_in"`
TokenType string `json:"token_type"`
Scope string `json:"scope"`
}
if err = json.NewDecoder(resp.Body).Decode(&result); err != nil {
return "", fmt.Errorf("failed to parse refresh response: %w", err)
}
// Update stored token
newToken := &util.OAuthToken{
AccessToken: result.AccessToken,
RefreshToken: result.RefreshToken,
ExpiresAt: time.Now().Unix() + int64(result.ExpiresIn),
TokenType: result.TokenType,
Scope: result.Scope,
}
// Use existing refresh token if new one not provided
if newToken.RefreshToken == "" {
newToken.RefreshToken = token.RefreshToken
}
if err = storage.SaveToken(tokenIdentifier, newToken); err != nil {
return "", fmt.Errorf("failed to save refreshed token: %w", err)
}
return result.AccessToken, nil
}

View File

@@ -1,433 +0,0 @@
package anthropic
// OAuth Testing Strategy:
//
// This test suite covers OAuth functionality while avoiding real external calls.
// Key principles:
// 1. Never trigger real OAuth flows that would open browsers or call external APIs
// 2. Use temporary directories and mock tokens for isolated testing
// 3. Skip integration tests that would require real OAuth servers
// 4. Test error paths and edge cases safely
//
// Tests are categorized as:
// - Unit tests: Test individual functions with mocked data (SAFE)
// - Integration tests: Would require real OAuth servers (SKIPPED)
// - Error path tests: Test failure scenarios safely (SAFE)
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strings"
"testing"
"time"
"github.com/danielmiessler/fabric/internal/util"
)
// createTestToken creates a test OAuth token
func createTestToken(accessToken, refreshToken string, expiresIn int64) *util.OAuthToken {
return &util.OAuthToken{
AccessToken: accessToken,
RefreshToken: refreshToken,
ExpiresAt: time.Now().Unix() + expiresIn,
TokenType: "Bearer",
Scope: "org:create_api_key user:profile user:inference",
}
}
// createExpiredToken creates an expired test token
func createExpiredToken(accessToken, refreshToken string) *util.OAuthToken {
return &util.OAuthToken{
AccessToken: accessToken,
RefreshToken: refreshToken,
ExpiresAt: time.Now().Unix() - 3600, // Expired 1 hour ago
TokenType: "Bearer",
Scope: "org:create_api_key user:profile user:inference",
}
}
// mockTokenServer creates a mock OAuth token server for testing
func mockTokenServer(_ *testing.T, responses map[string]any) *httptest.Server {
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/v1/oauth/token" {
http.NotFound(w, r)
return
}
body, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "Failed to read body", http.StatusBadRequest)
return
}
var req map[string]string
if err := json.Unmarshal(body, &req); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
grantType := req["grant_type"]
response, exists := responses[grantType]
if !exists {
http.Error(w, "Unsupported grant type", http.StatusBadRequest)
return
}
w.Header().Set("Content-Type", "application/json")
if errorResp, ok := response.(map[string]any); ok && errorResp["error"] != nil {
w.WriteHeader(http.StatusBadRequest)
}
json.NewEncoder(w).Encode(response)
}))
}
func TestGeneratePKCE(t *testing.T) {
verifier, challenge, err := generatePKCE()
if err != nil {
t.Fatalf("Expected no error, got %v", err)
}
if verifier == "" {
t.Error("Expected non-empty verifier")
}
if challenge == "" {
t.Error("Expected non-empty challenge")
}
if len(verifier) < 43 { // Base64 encoded 32 bytes should be at least 43 chars
t.Errorf("Verifier too short: %d chars", len(verifier))
}
if len(challenge) < 43 { // SHA256 hash should be at least 43 chars when base64 encoded
t.Errorf("Challenge too short: %d chars", len(challenge))
}
}
func TestExchangeToken_Success(t *testing.T) {
// Create mock server
server := mockTokenServer(t, map[string]any{
"authorization_code": map[string]any{
"access_token": "test_access_token",
"refresh_token": "test_refresh_token",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "org:create_api_key user:profile user:inference",
},
})
defer server.Close()
// Create a temporary directory for token storage
tempDir := t.TempDir()
// Mock the storage creation to use our temp directory
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
// Set up a fake home directory
fakeHome := filepath.Join(tempDir, "home")
os.MkdirAll(filepath.Join(fakeHome, ".config", "fabric"), 0755)
os.Setenv("HOME", fakeHome)
// This test would need the actual exchangeToken function to be modified to accept a custom URL
// For now, we'll test the logic without the actual HTTP call
t.Skip("Skipping integration test - would need URL injection for proper testing")
}
func TestRefreshToken_Success(t *testing.T) {
// Create temporary directory and set up fake home
tempDir := t.TempDir()
fakeHome := filepath.Join(tempDir, "home")
configDir := filepath.Join(fakeHome, ".config", "fabric")
os.MkdirAll(configDir, 0755)
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
os.Setenv("HOME", fakeHome)
// Create an expired token
expiredToken := createExpiredToken("old_access_token", "valid_refresh_token")
// Save the expired token
tokenPath := filepath.Join(configDir, ".test_oauth")
data, _ := json.MarshalIndent(expiredToken, "", " ")
os.WriteFile(tokenPath, data, 0600)
// Create mock server for refresh
server := mockTokenServer(t, map[string]any{
"refresh_token": map[string]any{
"access_token": "new_access_token",
"refresh_token": "new_refresh_token",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "org:create_api_key user:profile user:inference",
},
})
defer server.Close()
// This test would need the RefreshToken function to accept a custom URL
t.Skip("Skipping integration test - would need URL injection for proper testing")
}
func TestRefreshToken_NoRefreshToken(t *testing.T) {
// Create temporary directory and set up fake home
tempDir := t.TempDir()
fakeHome := filepath.Join(tempDir, "home")
configDir := filepath.Join(fakeHome, ".config", "fabric")
os.MkdirAll(configDir, 0755)
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
os.Setenv("HOME", fakeHome)
// Create a token without refresh token
tokenWithoutRefresh := &util.OAuthToken{
AccessToken: "access_token",
RefreshToken: "", // No refresh token
ExpiresAt: time.Now().Unix() - 3600,
TokenType: "Bearer",
Scope: "org:create_api_key user:profile user:inference",
}
// Save the token
tokenPath := filepath.Join(configDir, ".test_oauth")
data, _ := json.MarshalIndent(tokenWithoutRefresh, "", " ")
os.WriteFile(tokenPath, data, 0600)
// Test RefreshToken
_, err := RefreshToken("test")
if err == nil {
t.Error("Expected error when no refresh token available")
}
if !strings.Contains(err.Error(), "no refresh token available") {
t.Errorf("Expected 'no refresh token available' error, got: %v", err)
}
}
func TestRefreshToken_NoStoredToken(t *testing.T) {
// Create temporary directory and set up fake home
tempDir := t.TempDir()
fakeHome := filepath.Join(tempDir, "home")
configDir := filepath.Join(fakeHome, ".config", "fabric")
os.MkdirAll(configDir, 0755)
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
os.Setenv("HOME", fakeHome)
// Don't create any token file
// Test RefreshToken
_, err := RefreshToken("nonexistent")
if err == nil {
t.Error("Expected error when no token stored")
}
}
func TestOAuthTransport_RoundTrip(t *testing.T) {
// Create a mock client
client := &Client{}
// Create the transport
transport := NewOAuthTransport(client, http.DefaultTransport)
// Create a test request
req := httptest.NewRequest("GET", "https://api.anthropic.com/v1/messages", nil)
req.Header.Set("x-api-key", "should-be-removed")
// Create temporary directory and set up fake home with valid token
tempDir := t.TempDir()
fakeHome := filepath.Join(tempDir, "home")
configDir := filepath.Join(fakeHome, ".config", "fabric")
os.MkdirAll(configDir, 0755)
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
os.Setenv("HOME", fakeHome)
// Create a valid token
validToken := createTestToken("valid_access_token", "refresh_token", 3600)
tokenPath := filepath.Join(configDir, fmt.Sprintf(".%s_oauth", authTokenIdentifier))
data, _ := json.MarshalIndent(validToken, "", " ")
os.WriteFile(tokenPath, data, 0600)
// Create a mock server to handle the request
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Check that OAuth headers are set correctly
auth := r.Header.Get("Authorization")
if auth != "Bearer valid_access_token" {
t.Errorf("Expected 'Bearer valid_access_token', got '%s'", auth)
}
beta := r.Header.Get("anthropic-beta")
if beta != "oauth-2025-04-20" {
t.Errorf("Expected 'oauth-2025-04-20', got '%s'", beta)
}
userAgent := r.Header.Get("User-Agent")
if userAgent != "ai-sdk/anthropic" {
t.Errorf("Expected 'ai-sdk/anthropic', got '%s'", userAgent)
}
// Check that x-api-key header is removed
if r.Header.Get("x-api-key") != "" {
t.Error("Expected x-api-key header to be removed")
}
w.WriteHeader(http.StatusOK)
w.Write([]byte("success"))
}))
defer server.Close()
// Update the request URL to point to our mock server
req.URL.Host = strings.TrimPrefix(server.URL, "http://")
req.URL.Scheme = "http"
// Execute the request
resp, err := transport.RoundTrip(req)
if err != nil {
t.Fatalf("RoundTrip failed: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
t.Errorf("Expected status 200, got %d", resp.StatusCode)
}
}
func TestRunOAuthFlow_ExistingValidToken(t *testing.T) {
// Create temporary directory and set up fake home
tempDir := t.TempDir()
fakeHome := filepath.Join(tempDir, "home")
configDir := filepath.Join(fakeHome, ".config", "fabric")
os.MkdirAll(configDir, 0755)
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
os.Setenv("HOME", fakeHome)
// Create a valid token
validToken := createTestToken("existing_valid_token", "refresh_token", 3600)
tokenPath := filepath.Join(configDir, ".test_oauth")
data, _ := json.MarshalIndent(validToken, "", " ")
os.WriteFile(tokenPath, data, 0600)
// Test RunOAuthFlow - should return existing token without starting OAuth flow
token, err := RunOAuthFlow("test")
if err != nil {
t.Fatalf("Expected no error, got %v", err)
}
if token != "existing_valid_token" {
t.Errorf("Expected 'existing_valid_token', got '%s'", token)
}
}
// Test helper functions
func TestCreateTestToken(t *testing.T) {
token := createTestToken("access", "refresh", 3600)
if token.AccessToken != "access" {
t.Errorf("Expected access token 'access', got '%s'", token.AccessToken)
}
if token.RefreshToken != "refresh" {
t.Errorf("Expected refresh token 'refresh', got '%s'", token.RefreshToken)
}
if token.IsExpired(5) {
t.Error("Expected token to not be expired")
}
}
func TestCreateExpiredToken(t *testing.T) {
token := createExpiredToken("access", "refresh")
if !token.IsExpired(5) {
t.Error("Expected token to be expired")
}
}
// TestTokenExpirationLogic tests the token expiration detection without OAuth flows
func TestTokenExpirationLogic(t *testing.T) {
// Test valid token
validToken := createTestToken("access", "refresh", 3600)
if validToken.IsExpired(5) {
t.Error("Valid token should not be expired")
}
// Test expired token
expiredToken := createExpiredToken("access", "refresh")
if !expiredToken.IsExpired(5) {
t.Error("Expired token should be expired")
}
// Test token expiring soon (within buffer)
soonExpiredToken := createTestToken("access", "refresh", 240) // 4 minutes
if !soonExpiredToken.IsExpired(5) { // 5 minute buffer
t.Error("Token expiring within buffer should be considered expired")
}
}
// TestGetValidTokenWithValidToken tests the getValidToken method with a valid token
func TestGetValidTokenWithValidToken(t *testing.T) {
// Create temporary directory and set up fake home
tempDir := t.TempDir()
fakeHome := filepath.Join(tempDir, "home")
configDir := filepath.Join(fakeHome, ".config", "fabric")
os.MkdirAll(configDir, 0755)
originalHome := os.Getenv("HOME")
defer os.Setenv("HOME", originalHome)
os.Setenv("HOME", fakeHome)
// Create a valid token
validToken := createTestToken("valid_access_token", "refresh_token", 3600)
tokenPath := filepath.Join(configDir, ".test_oauth")
data, _ := json.MarshalIndent(validToken, "", " ")
os.WriteFile(tokenPath, data, 0600)
// Create transport
client := &Client{}
transport := NewOAuthTransport(client, http.DefaultTransport)
// Test getValidToken - this should return the valid token without any OAuth flow
token, err := transport.getValidToken("test")
if err != nil {
t.Fatalf("Expected no error with valid token, got: %v", err)
}
if token != "valid_access_token" {
t.Errorf("Expected 'valid_access_token', got '%s'", token)
}
}
// Benchmark tests
func BenchmarkGeneratePKCE(b *testing.B) {
for b.Loop() {
_, _, err := generatePKCE()
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkTokenIsExpired(b *testing.B) {
token := createTestToken("access", "refresh", 3600)
for b.Loop() {
token.IsExpired(5)
}
}

View File

@@ -57,18 +57,17 @@ func (h *ConfigHandler) GetConfig(c *gin.Context) {
}
config := map[string]string{
"openai": os.Getenv("OPENAI_API_KEY"),
"anthropic": os.Getenv("ANTHROPIC_API_KEY"),
"anthropic_use_oauth_login": os.Getenv("ANTHROPIC_USE_OAUTH_LOGIN"),
"groq": os.Getenv("GROQ_API_KEY"),
"mistral": os.Getenv("MISTRAL_API_KEY"),
"gemini": os.Getenv("GEMINI_API_KEY"),
"ollama": os.Getenv("OLLAMA_URL"),
"openrouter": os.Getenv("OPENROUTER_API_KEY"),
"silicon": os.Getenv("SILICON_API_KEY"),
"deepseek": os.Getenv("DEEPSEEK_API_KEY"),
"grokai": os.Getenv("GROKAI_API_KEY"),
"lmstudio": os.Getenv("LM_STUDIO_API_BASE_URL"),
"openai": os.Getenv("OPENAI_API_KEY"),
"anthropic": os.Getenv("ANTHROPIC_API_KEY"),
"groq": os.Getenv("GROQ_API_KEY"),
"mistral": os.Getenv("MISTRAL_API_KEY"),
"gemini": os.Getenv("GEMINI_API_KEY"),
"ollama": os.Getenv("OLLAMA_URL"),
"openrouter": os.Getenv("OPENROUTER_API_KEY"),
"silicon": os.Getenv("SILICON_API_KEY"),
"deepseek": os.Getenv("DEEPSEEK_API_KEY"),
"grokai": os.Getenv("GROKAI_API_KEY"),
"lmstudio": os.Getenv("LM_STUDIO_API_BASE_URL"),
}
c.JSON(http.StatusOK, config)
@@ -81,18 +80,17 @@ func (h *ConfigHandler) UpdateConfig(c *gin.Context) {
}
var config struct {
OpenAIApiKey string `json:"openai_api_key"`
AnthropicApiKey string `json:"anthropic_api_key"`
AnthropicUseAuthToken string `json:"anthropic_use_auth_token"`
GroqApiKey string `json:"groq_api_key"`
MistralApiKey string `json:"mistral_api_key"`
GeminiApiKey string `json:"gemini_api_key"`
OllamaURL string `json:"ollama_url"`
OpenRouterApiKey string `json:"openrouter_api_key"`
SiliconApiKey string `json:"silicon_api_key"`
DeepSeekApiKey string `json:"deepseek_api_key"`
GrokaiApiKey string `json:"grokai_api_key"`
LMStudioURL string `json:"lm_studio_base_url"`
OpenAIApiKey string `json:"openai_api_key"`
AnthropicApiKey string `json:"anthropic_api_key"`
GroqApiKey string `json:"groq_api_key"`
MistralApiKey string `json:"mistral_api_key"`
GeminiApiKey string `json:"gemini_api_key"`
OllamaURL string `json:"ollama_url"`
OpenRouterApiKey string `json:"openrouter_api_key"`
SiliconApiKey string `json:"silicon_api_key"`
DeepSeekApiKey string `json:"deepseek_api_key"`
GrokaiApiKey string `json:"grokai_api_key"`
LMStudioURL string `json:"lm_studio_base_url"`
}
if err := c.ShouldBindJSON(&config); err != nil {
@@ -101,18 +99,17 @@ func (h *ConfigHandler) UpdateConfig(c *gin.Context) {
}
envVars := map[string]string{
"OPENAI_API_KEY": config.OpenAIApiKey,
"ANTHROPIC_API_KEY": config.AnthropicApiKey,
"ANTHROPIC_USE_OAUTH_LOGIN": config.AnthropicUseAuthToken,
"GROQ_API_KEY": config.GroqApiKey,
"MISTRAL_API_KEY": config.MistralApiKey,
"GEMINI_API_KEY": config.GeminiApiKey,
"OLLAMA_URL": config.OllamaURL,
"OPENROUTER_API_KEY": config.OpenRouterApiKey,
"SILICON_API_KEY": config.SiliconApiKey,
"DEEPSEEK_API_KEY": config.DeepSeekApiKey,
"GROKAI_API_KEY": config.GrokaiApiKey,
"LM_STUDIO_API_BASE_URL": config.LMStudioURL,
"OPENAI_API_KEY": config.OpenAIApiKey,
"ANTHROPIC_API_KEY": config.AnthropicApiKey,
"GROQ_API_KEY": config.GroqApiKey,
"MISTRAL_API_KEY": config.MistralApiKey,
"GEMINI_API_KEY": config.GeminiApiKey,
"OLLAMA_URL": config.OllamaURL,
"OPENROUTER_API_KEY": config.OpenRouterApiKey,
"SILICON_API_KEY": config.SiliconApiKey,
"DEEPSEEK_API_KEY": config.DeepSeekApiKey,
"GROKAI_API_KEY": config.GrokaiApiKey,
"LM_STUDIO_API_BASE_URL": config.LMStudioURL,
}
var envContent strings.Builder

View File

@@ -31,12 +31,18 @@ schema = 3
[mod."github.com/ProtonMail/go-crypto"]
version = "v1.3.0"
hash = "sha256-TUG+C4MyeWglOmiwiW2/NUVurFHXLgEPRd3X9uQ1NGI="
[mod."github.com/agnivade/levenshtein"]
version = "v1.1.1"
hash = "sha256-tgv2s8XIcWjscv1pP87TOIUV4vADT2px1Lo/MQCTBjM="
[mod."github.com/andybalholm/cascadia"]
version = "v1.3.3"
hash = "sha256-jv7ZshpSd7FZzKKN6hqlUgiR8C3y85zNIS/hq7g76Ho="
[mod."github.com/anthropics/anthropic-sdk-go"]
version = "v1.19.0"
hash = "sha256-ubYeau5XL0tx4c/79L58rzJGOdOWs9z6WQOtN6mpgxw="
[mod."github.com/apache/arrow/go/arrow"]
version = "v0.0.0-20211112161151-bc219186db40"
hash = "sha256-hcVrZsJuiRIDx13QDKCxUtZgmze6iFkwyjDvQxkzcR8="
[mod."github.com/araddon/dateparse"]
version = "v0.0.0-20210429162001-6b43995a97de"
hash = "sha256-UuX84naeRGMsFOgIgRoBHG5sNy1CzBkWPKmd6VbLwFw="
@@ -94,6 +100,12 @@ schema = 3
[mod."github.com/aws/smithy-go"]
version = "v1.24.0"
hash = "sha256-ZPFhf2Yv3BQpUn3cN4wSnoO7uBki8oCisZxL6F09nnE="
[mod."github.com/bahlo/generic-list-go"]
version = "v0.2.0"
hash = "sha256-BIzqwG61hnMDknZOn/5+VX09yemzFzMjhPF48XoALto="
[mod."github.com/buger/jsonparser"]
version = "v1.1.1"
hash = "sha256-T6dXT6Vzpm8gvQYi+c2LZkV+8ZOp0ZXBX7+e1mlliZE="
[mod."github.com/bytedance/gopkg"]
version = "v0.1.3"
hash = "sha256-GyUbPfn41y/mgj0cQOa4tm+aj70C2K50VBZxZc/tcZE="
@@ -103,6 +115,12 @@ schema = 3
[mod."github.com/bytedance/sonic/loader"]
version = "v0.4.0"
hash = "sha256-Hc2bB9nLEFhyipIVHKnJmi6WMoWPCe0REK3bmQThO4A="
[mod."github.com/chewxy/hm"]
version = "v1.0.0"
hash = "sha256-JxcBIvNVb7L9sA+dh2mzylpco+840cyJ8YlRgcPjmDg="
[mod."github.com/chewxy/math32"]
version = "v1.11.0"
hash = "sha256-725Ku2oPLG7VWqpt5aBzsu5Byk5SNHLFG1JwUsx9gh8="
[mod."github.com/cloudflare/circl"]
version = "v1.6.1"
hash = "sha256-Dc69V12eIFnJoUNmwg6VKXHfAMijbAeEVSDe8AiOaLo="
@@ -112,21 +130,36 @@ schema = 3
[mod."github.com/coder/websocket"]
version = "v1.8.13"
hash = "sha256-NbF0aPhy8YR3jRM6LMMQTtkeGTFba0eIBPAUsqI9KOk="
[mod."github.com/containerd/console"]
version = "v1.0.3"
hash = "sha256-4p4u/rS7G4KKbIcZaVMqE1OtSoNlOpmcYFwO0ZEH/V0="
[mod."github.com/cyphar/filepath-securejoin"]
version = "v0.4.1"
hash = "sha256-NOV6MfbkcQbfhNmfADQw2SJmZ6q1nw0wwg8Pm2tf2DM="
[mod."github.com/d4l3k/go-bfloat16"]
version = "v0.0.0-20211005043715-690c3bdd05f1"
hash = "sha256-fmcENqbxuBH1/QQRCQ56FGLIR8mJDJjtf4rRktvzUK8="
[mod."github.com/davecgh/go-spew"]
version = "v1.1.2-0.20180830191138-d8f796af33cc"
hash = "sha256-fV9oI51xjHdOmEx6+dlq7Ku2Ag+m/bmbzPo6A4Y74qc="
[mod."github.com/dlclark/regexp2"]
version = "v1.11.4"
hash = "sha256-1uCoCYCKyP8QZddlYfJCTWmcrKlEFNCsxWwMde9MspE="
[mod."github.com/emirpasic/gods"]
version = "v1.18.1"
hash = "sha256-hGDKddjLj+5dn2woHtXKUdd49/3xdsqnhx7VEdCu1m4="
[mod."github.com/emirpasic/gods/v2"]
version = "v2.0.0-alpha"
hash = "sha256-xRzGfHnzBR8S0TTJz/3gapl+aSj/E8RPwVIGltPuEuI="
[mod."github.com/felixge/httpsnoop"]
version = "v1.0.4"
hash = "sha256-c1JKoRSndwwOyOxq9ddCe+8qn7mG9uRq2o/822x5O/c="
[mod."github.com/gabriel-vasile/mimetype"]
version = "v1.4.12"
hash = "sha256-vY2g58yUrkT//8fttRKhS9rbg89YSae/BzOARS5uH30="
[mod."github.com/gin-contrib/cors"]
version = "v1.7.2"
hash = "sha256-rsr5CIPTtV/65WUesCpzMj7zpgnp01uTeosRkrCCEyA="
[mod."github.com/gin-contrib/sse"]
version = "v1.1.0"
hash = "sha256-2VP6zHEsPi0u2ZYpOTcLulwj1Gsmb6oA19qcP2/AzVM="
@@ -199,12 +232,21 @@ schema = 3
[mod."github.com/goccy/go-yaml"]
version = "v1.19.1"
hash = "sha256-zlT9y4wkvyv7RBv48jdJqOM2lrDMLrC6Z6hCl90c5hQ="
[mod."github.com/gogo/protobuf"]
version = "v1.3.2"
hash = "sha256-pogILFrrk+cAtb0ulqn9+gRZJ7sGnnLLdtqITvxvG6c="
[mod."github.com/gogs/chardet"]
version = "v0.0.0-20211120154057-b7413eaefb8f"
hash = "sha256-4MeqBJsh4U+ZEbfdDwdciTYMlQWkCil2KJbUxHjBSIo="
[mod."github.com/golang/groupcache"]
version = "v0.0.0-20241129210726-2c02b8208cf8"
hash = "sha256-AdLZ3dJLe/yduoNvZiXugZxNfmwJjNQyQGsIdzYzH74="
[mod."github.com/golang/protobuf"]
version = "v1.5.4"
hash = "sha256-N3+Lv9lEZjrdOWdQhFj6Y3Iap4rVLEQeI8/eFFyAMZ0="
[mod."github.com/google/flatbuffers"]
version = "v24.3.25+incompatible"
hash = "sha256-b96yDt5Agzf8/VYrueYjuwvHE7cD8J1H/gVavQH+BRI="
[mod."github.com/google/go-cmp"]
version = "v0.7.0"
hash = "sha256-JbxZFBFGCh/Rj5XZ1vG94V2x7c18L8XKB0N9ZD5F2rM="
@@ -259,9 +301,15 @@ schema = 3
[mod."github.com/leodido/go-urn"]
version = "v1.4.0"
hash = "sha256-Q6kplWkY37Tzy6GOme3Wut40jFK4Izun+ij/BJvcEu0="
[mod."github.com/mailru/easyjson"]
version = "v0.7.7"
hash = "sha256-NVCz8MURpxgOjHXqxOZExqV4bnpHggpeAOyZDArjcy4="
[mod."github.com/mattn/go-isatty"]
version = "v0.0.20"
hash = "sha256-qhw9hWtU5wnyFyuMbKx+7RB8ckQaFQ8D+8GKPkN3HHQ="
[mod."github.com/mattn/go-runewidth"]
version = "v0.0.14"
hash = "sha256-O3QdxqAcJgQ+HL1v8oBA4iKBwJ2AlDN+F464027hWMU="
[mod."github.com/mattn/go-sqlite3"]
version = "v1.14.32"
hash = "sha256-su0SoXnt5pE78t5VXFXQoH2dtP0ohWdyj3TNSZQyWE0="
@@ -274,9 +322,15 @@ schema = 3
[mod."github.com/nicksnyder/go-i18n/v2"]
version = "v2.6.0"
hash = "sha256-UrSECFbpCIg5avJ+f3LkJy/ncZFHa4q8sDqDIQ3YZJM="
[mod."github.com/nlpodyssey/gopickle"]
version = "v0.3.0"
hash = "sha256-djE/birMxBZzMzlaIvjO9kqR1OG5GEhfB6dReaZHH1U="
[mod."github.com/olekukonko/tablewriter"]
version = "v0.0.5"
hash = "sha256-/5i70IkH/qSW5KjGzv8aQNKh9tHoz98tqtL0K2DMFn4="
[mod."github.com/ollama/ollama"]
version = "v0.13.5"
hash = "sha256-gr8dMdGfyXhEgO22MOmtIZEXlBrOsEecOhi/AmU5D+0="
version = "v0.15.1"
hash = "sha256-F6nmdMtADI6DH270vVRzWIj908+wg+FXv7mCUi0l3gc="
[mod."github.com/openai/openai-go"]
version = "v1.12.0"
hash = "sha256-JHLlKvDwERPf728GUXBsKU58ODgCxcxEe9TKJTGAG1w="
@@ -286,6 +340,9 @@ schema = 3
[mod."github.com/otiai10/mint"]
version = "v1.6.3"
hash = "sha256-/FT3dYP2+UiW/qe1pxQ7HiS8et4+KHGPIMhc+8mHvzw="
[mod."github.com/pdevine/tensor"]
version = "v0.0.0-20240510204454-f88f4562727c"
hash = "sha256-h+n0NKCrnHn0UHx6GQGZcF4MeUD5dMKMsIwlVY6Em0A="
[mod."github.com/pelletier/go-toml/v2"]
version = "v2.2.4"
hash = "sha256-8qQIPldbsS5RO8v/FW/se3ZsAyvLzexiivzJCbGRg2Q="
@@ -304,6 +361,9 @@ schema = 3
[mod."github.com/quic-go/quic-go"]
version = "v0.57.1"
hash = "sha256-MdXc0GRVp3YuN9XFoGFOjgIcIMp7yoLqwfEikZp1i4w="
[mod."github.com/rivo/uniseg"]
version = "v0.2.0"
hash = "sha256-GLj0jiGrT03Ept4V6FXCN1yeZ/b6PpS3MEXK6rYQ8Eg="
[mod."github.com/samber/lo"]
version = "v1.52.0"
hash = "sha256-xgMsPJv3rydHH10NZU8wz/DhK2VbbR8ymivOg1ChTp0="
@@ -352,9 +412,18 @@ schema = 3
[mod."github.com/ugorji/go/codec"]
version = "v1.3.1"
hash = "sha256-VQtXVaKxXjm5Q60hCgVKZxNywl6SJFPqju6JNjADp4w="
[mod."github.com/wk8/go-ordered-map/v2"]
version = "v2.1.8"
hash = "sha256-v7/5+7lAypZfgClXgWxhxtA1skQq9o+1yrI+V0o1j2o="
[mod."github.com/x448/float16"]
version = "v0.8.4"
hash = "sha256-VKzMTMS9pIB/cwe17xPftCSK9Mf4Y6EuBEJlB4by5mE="
[mod."github.com/xanzy/ssh-agent"]
version = "v0.3.3"
hash = "sha256-l3pGB6IdzcPA/HLk93sSN6NM2pKPy+bVOoacR5RC2+c="
[mod."github.com/xtgo/set"]
version = "v1.0.0"
hash = "sha256-HDVvuKL+311OnVI1nycKKIlMhANkoCdBAsfRg1xZEpE="
[mod."go.opentelemetry.io/auto/sdk"]
version = "v1.2.1"
hash = "sha256-73bFYhnxNf4SfeQ52ebnwOWywdQbqc9lWawCcSgofvE="
@@ -379,6 +448,9 @@ schema = 3
[mod."go.yaml.in/yaml/v3"]
version = "v3.0.4"
hash = "sha256-NkGFiDPoCxbr3LFsI6OCygjjkY0rdmg5ggvVVwpyDQ4="
[mod."go4.org/unsafe/assume-no-moving-gc"]
version = "v0.0.0-20231121144256-b99613f794b6"
hash = "sha256-p0bcawoazS5r49P8Ru0anJ5crNB0+3xGtzZNpCAe3gI="
[mod."golang.org/x/arch"]
version = "v0.23.0"
hash = "sha256-ynvhsw8ZYgKTzFn1wnIj3/p+1O/Ty5PX1Lnj+NMTAQQ="
@@ -388,6 +460,9 @@ schema = 3
[mod."golang.org/x/exp"]
version = "v0.0.0-20250531010427-b6e5de432a8b"
hash = "sha256-QaFfjyB+pogCkUkJskR9xnXwkCOU828XJRrzwwLm6Ms="
[mod."golang.org/x/image"]
version = "v0.25.0"
hash = "sha256-7SUSCTo4cPremIDCBOm+YEg5pIk4lgdu68puWabM+NQ="
[mod."golang.org/x/mod"]
version = "v0.31.0"
hash = "sha256-ZVNmaZADgM3+30q9rW8q4gP6ySkT7r1eb4vrHIlpCjM="
@@ -403,6 +478,9 @@ schema = 3
[mod."golang.org/x/sys"]
version = "v0.39.0"
hash = "sha256-dxTBu/JAWUkPbjFIXXRFdhQWyn+YyEpIC+tWqGo0Y6U="
[mod."golang.org/x/term"]
version = "v0.38.0"
hash = "sha256-46mX91XGJqii6SUESiU5mLVJDBOfKYCp+408m91hrMw="
[mod."golang.org/x/text"]
version = "v0.32.0"
hash = "sha256-9PXtWBKKY9rG4AgjSP4N+I1DhepXhy8SF/vWSIDIoWs="
@@ -412,6 +490,12 @@ schema = 3
[mod."golang.org/x/tools"]
version = "v0.40.0"
hash = "sha256-ksmhTnH9btXKiRbbE0KGh02nbeNqNBQKcfwvx9dE7t0="
[mod."golang.org/x/xerrors"]
version = "v0.0.0-20200804184101-5ec99f83aff1"
hash = "sha256-62f++IO8Ia32CYy+xX8XDxCcT9r1sbPvVwoKV99gf7U="
[mod."gonum.org/v1/gonum"]
version = "v0.16.0"
hash = "sha256-25kwrdIdR6J75uQfqFZwW9cef0ehRodqTDdpnqBNy+c="
[mod."google.golang.org/api"]
version = "v0.258.0"
hash = "sha256-hxwJz4Vzh87Bc49QCndKrO+34wfzF1ORGMeF5kmk22Q="
@@ -433,3 +517,9 @@ schema = 3
[mod."gopkg.in/yaml.v3"]
version = "v3.0.1"
hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU="
[mod."gorgonia.org/vecf32"]
version = "v0.9.0"
hash = "sha256-13MdvvueCQK6tIMjjeTtvdlqsl718P/BMgnFwhobB0I="
[mod."gorgonia.org/vecf64"]
version = "v0.9.0"
hash = "sha256-C9Z1n9ldsAev5Rp8so+f1ntkPtfVK/NTPYn+2TWFJYc="

View File

@@ -1 +1 @@
"1.4.391"
"1.4.396"

View File

@@ -0,0 +1,4 @@
{
"python-envs.defaultEnvManager": "ms-python.python:system",
"python-envs.pythonProjects": []
}

View File

@@ -1671,15 +1671,6 @@
"DEVELOPMENT"
]
},
{
"patternName": "extract_wisdom_short",
"description": "Extract condensed insightful ideas and recommendations focusing on life wisdom.",
"tags": [
"EXTRACT",
"WISDOM",
"SELF"
]
},
{
"patternName": "analyze_bill",
"description": "Analyze a legislative bill and implications.",
@@ -1979,6 +1970,37 @@
"DEVELOPMENT",
"EXTRACT"
]
},
{
"patternName": "create_bd_issue",
"description": "Transform natural language descriptions into optimal bd create commands for issue tracking.",
"tags": [
"DEVELOPMENT"
]
},
{
"patternName": "extract_all_quotes",
"description": "Extract all inspirational and educational quotes from content including podcasts and essays.",
"tags": [
"EXTRACT"
]
},
{
"patternName": "extract_bd_ideas",
"description": "Extract actionable ideas from content and transform into bd create commands.",
"tags": [
"EXTRACT",
"ANALYSIS",
"DEVELOPMENT"
]
},
{
"patternName": "suggest_gt_command",
"description": "Suggest optimal Gas Town (GT) commands based on user intent and task description.",
"tags": [
"DEVELOPMENT",
"ANALYSIS"
]
}
]
}

View File

@@ -524,10 +524,6 @@
"patternName": "extract_wisdom_nometa",
"pattern_extract": "# IDENTITY and PURPOSE\n\nYou extract surprising, insightful, and interesting information from text content. You are interested in insights related to the purpose and meaning of life, human flourishing, the role of technology in the future of humanity, artificial intelligence and its affect on humans, memes, learning, reading, books, continuous improvement, and similar topics.\n\n# STEPS\n\n- Extract a summary of the content in 25 words, including who is presenting and the content being discussed into a section called SUMMARY.\n\n- Extract 20 to 50 of the most surprising, insightful, and/or interesting ideas from the input in a section called IDEAS:. If there are less than 50 then collect all of them. Make sure you extract at least 20.\n\n- Extract 10 to 20 of the best insights from the input and from a combination of the raw input and the IDEAS above into a section called INSIGHTS. These INSIGHTS should be fewer, more refined, more insightful, and more abstracted versions of the best ideas in the content.\n\n- Extract 15 to 30 of the most surprising, insightful, and/or interesting quotes from the input into a section called QUOTES:. Use the exact quote text from the input.\n\n- Extract 15 to 30 of the most practical and useful personal habits of the speakers, or mentioned by the speakers, in the content into a section called HABITS. Examples include but aren't limited to: sleep schedule, reading habits, things the\n\n- Extract 15 to 30 of the most surprising, insightful, and/or interesting valid facts about the greater world that were mentioned in the content into a section called FACTS:.\n\n- Extract all mentions of writing, art, tools, projects and other sources of inspiration mentioned by the speakers into a section called REFERENCES. This should include any and all references to something that the speaker mentioned.\n\n- Extract the 15 to 30 of the most surprising, insightful, and/or interesting recommendations that can be collected from the content into a section called RECOMMENDATIONS.\n\n# OUTPUT INSTRUCTIONS\n\n- Only output Markdown."
},
{
"patternName": "extract_wisdomjm",
"pattern_extract": "# IDENTITY and PURPOSE\n\nYou extract surprising, insightful, and interesting information from text content. You are interested in insights related to the purpose and meaning of life, human flourishing, the role of technology in the future of humanity, artificial intelligence and its affect on humans, memes, learning, reading, books, continuous improvement, and similar topics.\n\nTake a step back and think step-by-step about how to achieve the best possible results by following the steps below.\n\n# STEPS\n\n- Extract a summary of the content in 25 words, including who is presenting and the content being discussed into a section called SUMMARY.\n\n- Extract 20 to 50 of the most surprising, insightful, and/or interesting ideas from the input in a section called IDEAS:. If there are less than 50 then collect all of them. Make sure you extract at least 20.\n\n- Extract 10 to 20 of the best insights from the input and from a combination of the raw input and the IDEAS above into a section called INSIGHTS. These INSIGHTS should be fewer, more refined, more insightful, and more abstracted versions of the best ideas in the content.\n\n- Extract 15 to 30 of the most surprising, insightful, and/or interesting quotes from the input into a section called QUOTES:. Use the exact quote text from the input.\n\n- Extract 15 to 30 of the most practical and useful personal habits of the speakers, or mentioned by the speakers, in the content into a section called HABITS. Examples include but aren't limited to: sleep schedule, reading habits, things they always do, things they always avoid, productivity tips, diet, exercise, etc.\n\n- Extract 15 to 30 of the most surprising, insightful, and/or interesting valid facts about the greater world that were mentioned in the content into a section called FACTS:.\n\n- Extract all mentions of writing, art, tools, projects and other sources of inspiration mentioned by the speakers into a section called REFERENCES. This should include any and all references to something that the speaker mentioned.\n\n- Extract the most potent takeaway and recommendation into a section called ONE-SENTENCE TAKEAWAY. This should be a 15-word sentence that captures the most important essence of the content.\n\n- Extract the 15 to 30 of the most surprising, insightful, and/or interesting recommendations that can be collected from the content into a section called RECOMMENDATIONS."
},
{
"patternName": "find_hidden_message",
"pattern_extract": "# IDENTITY AND GOALS\n\nYou are an expert in political propaganda, analysis of hidden messages in conversations and essays, population control through speech and writing, and political narrative creation.\n\nYou consume input and cynically evaluate what's being said to find the overt vs. hidden political messages.\n\nTake a step back and think step-by-step about how to evaluate the input and what the true intentions of the speaker are.\n\n# STEPS\n\n- Using all your knowledge of language, politics, history, propaganda, and human psychology, slowly evaluate the input and think about the true underlying political message is behind the content.\n\n- Especially focus your knowledge on the history of politics and the most recent 10 years of political debate.\n\n# OUTPUT\n\n- In a section called OVERT MESSAGE, output a set of 10-word bullets that capture the OVERT, OBVIOUS, and BENIGN-SOUNDING main points he's trying to make on the surface. This is the message he's pretending to give.\n\n- In a section called HIDDEN MESSAGE, output a set of 10-word bullets that capture the TRUE, HIDDEN, CYNICAL, and POLITICAL messages of the input. This is for the message he's actually giving.\n\n- In a section called SUPPORTING ARGUMENTS and QUOTES, output a bulleted list of justifications for how you arrived at the hidden message and opinions above. Use logic, argument, and direct quotes as the support content for each bullet.\n\n- In a section called DESIRED AUDIENCE ACTION, give a set of 10, 10-word bullets of politically-oriented actions the speaker(s) actually want to occur as a result of audience hearing and absorbing the HIDDEN MESSAGE. These should be tangible and real-world, e.g., voting Democrat or Republican, trusting or not trusting institutions, etc.\n\n- In a section called CYNICAL ANALYSIS, write a single sentence structured like,"
@@ -808,10 +804,6 @@
"patternName": "t_year_in_review",
"pattern_extract": "# IDENTITY\n\nYou are an expert at understanding deep context about a person or entity, and then creating wisdom from that context combined with the instruction or question given in the input.\n\n# STEPS\n\n1. Read the incoming TELOS File thoroughly. Fully understand everything about this person or entity.\n2. Deeply study the input instruction or question.\n3. Spend significant time and effort thinking about how these two are related, and what would be the best possible ouptut for the person who sent the input.\n4. Write 8 16-word bullets describing what you accomplished this year.\n5. End with an ASCII art visualization of what you worked on and accomplished vs. what you didn't work on or finish.\n\n# OUTPUT INSTRUCTIONS\n\n1. Only use basic markdown formatting. No special formatting or italics or bolding or anything.\n2. Only output the list, nothing else."
},
{
"patternName": "extract_wisdom_short",
"pattern_extract": "# IDENTITY and PURPOSE You extract surprising, insightful, and interesting information from text content. You are interested in insights related to the purpose and meaning of life, human flourishing, the role of technology in the future of humanity, artificial intelligence and its affect on humans, memes, learning, reading, books, continuous improvement, and similar topics. Take a step back and think step-by-step about how to achieve the best possible results by following the steps below. # STEPS - Extract a summary of the content in 50 words, including who is presenting and the content being discussed into a section called SUMMARY. - Extract 10 to 20 of the most surprising, insightful, and/or interesting ideas from the input in a section called IDEAS:. If there are less than 50 then collect all of them. Make sure you extract at least 20. - Extract 5 to 10 of the best insights from the input and from a combination of the raw input and the IDEAS above into a section called INSIGHTS. These INSIGHTS should be fewer, more refined, more insightful, and more abstracted versions of the best ideas in the content. - Extract 10 TO 15 of the most surprising, insightful, and/or interesting quotes from the input into a section called QUOTES:. Use the exact quote text from the input. - Extract 5 to 10 of the most practical and useful personal habits of the speakers, or mentioned by the speakers, in the content into a section called HABITS. Examples include but aren't limited to: sleep schedule, reading habits, things they always do, things they always avoid, productivity tips, diet, exercise, etc. - Extract 5 to 10 of the most surprising, insightful, and/or interesting valid facts about the greater world that were mentioned in the content into a section called FACTS:. - Extract all mentions of writing, art, tools, projects and other sources of inspiration mentioned by the speakers into a section called REFERENCES. This should include any and all references to something that the speaker mentioned. - Extract the most potent takeaway and recommendation into a section called ONE-SENTENCE TAKEAWAY. This should be a 15-word sentence that captures the most important essence of the content. - Extract the 5 to 10 of the most surprising, insightful, and/or interesting recommendations that can be collected from the content into a section called RECOMMENDATIONS. # OUTPUT INSTRUCTIONS - Only output Markdown. - Write the IDEAS bullets as exactly 16 words. - Write the RECOMMENDATIONS bullets as exactly 16 words. - Write the HABITS bullets as exactly 16 words. - Write the FACTS bullets as exactly 16 words. - Write the INSIGHTS bullets as exactly 16 words. - Extract at least 25 IDEAS from the content. - Extract at least 5 INSIGHTS from the content. - Extract at least 10 items for the other output sections. - Do not give warnings or notes; only output the requested sections. - You use bulleted lists for output, not numbered lists. - Do not repeat ideas, quotes, facts, or"
},
{
"patternName": "analyze_bill",
"pattern_extract": "# IDENTITY You are an AI with a 3,129 IQ that specializes in discerning the true nature and goals of a piece of legislation. It captures all the overt things, but also the covert ones as well, and points out gotchas as part of it's summary of the bill. # STEPS 1. Read the entire bill 37 times using different perspectives. 2. Map out all the stuff it's trying to do on a 10 KM by 10K mental whiteboard. 3. Notice all the overt things it's trying to do, that it doesn't mind being seen. 4. Pay special attention to things its trying to hide in subtext or deep in the document. # OUTPUT 1. Give the metadata for the bill, such as who proposed it, when, etc. 2. Create a 24-word summary of the bill and what it's trying to accomplish. 3. Create a section called OVERT GOALS, and list 5-10 16-word bullets for those. 4. Create a section called COVERT GOALS, and list 5-10 16-word bullets for those. 5. Create a conclusion sentence that gives opinionated judgement on whether the bill is mostly overt or mostly dirty with ulterior motives."
@@ -955,6 +947,22 @@
{
"patternName": "create_golden_rules",
"pattern_extract": "# IDENTITY and PURPOSE You are an expert at extracting implicit rules and guidelines from codebases, documentation, or team practices. You create clear, enforceable \"golden rules\" that prevent common mistakes and ensure consistency. Golden rules are the non-negotiable standards that, if followed, prevent 80% of problems. # STEPS 1. Analyze the input for patterns, anti-patterns, and conventions 2. Identify implicit rules that are not documented 3. Extract explicit rules that are critical 4. Categorize by domain (security, style, process, etc.) 5. Prioritize by impact (critical > important > nice-to-have) 6. Write rules that are specific and testable # OUTPUT FORMAT ## Golden Rules: [Domain/Project Name] ### Critical Rules These MUST be followed. Violations cause significant problems. #### 1. [Rule Name] **Rule**: [Clear, specific statement] **Why**: [Consequence of violation] **Do**: ``` // Correct example ``` **Don't**: ``` // Incorrect example ``` **Test**: [How to verify compliance] --- #### 2. [Rule Name] ... ### Important Rules Should be followed. Violations cause friction or technical debt. #### 1. [Rule Name] ... ### Guidelines Best practices. Violations are acceptable with justification. #### 1. [Guideline Name] ... ### Quick Reference | Category | Rule | Priority | |----------|------|----------| | Security | [Short rule] | Critical | | Style | [Short rule] | Important | | Process | [Short rule] | Guideline | ### Checklist Pre-commit/deploy checklist derived from rules: - [ ] [Check 1] - [ ] [Check 2] - [ ] [Check 3] # OUTPUT INSTRUCTIONS - Rules must be specific and testable - Include both positive (Do) and negative (Don't) examples - Explain WHY each rule exists - Prioritize ruthlessly (fewer critical rules) - Make rules enforceable (can be checked automatically or in review) - Use consistent formatting - Keep rules under 2 sentences each # EXAMPLE RULE #### No Hardcoded Credentials **Rule**: Never commit API keys, passwords, or secrets to the repository. **Why**: Exposed credentials lead to security breaches and are nearly impossible to fully revoke once in git history. **Do**: ```typescript const apiKey = Deno.env.get(\"API_KEY\"); ``` **Don't**: ```typescript const apiKey = \"sk-abc123...\"; // NEVER DO THIS ``` **Test**: Run `git secrets --scan` or grep for common key patterns. # INPUT INPUT:"
},
{
"patternName": "create_bd_issue",
"pattern_extract": "# IDENTITY and PURPOSE You are an expert at transforming natural language issue descriptions into optimal `bd create` commands. You understand the bd (Beads) issue tracker deeply and always select the most appropriate flags based on the user's intent. Your goal is to produce a single, well-crafted `bd create` command that captures all the relevant details from the input while following bd best practices. # BD CREATE REFERENCE Available flags: - `--title \"string\"` or positional first arg: Issue title (imperative mood: \"Add...\", \"Fix...\", \"Update...\") - `-d, --description \"string\"`: Issue description (context, acceptance criteria, notes) - `-t, --type TYPE`: bug|feature|task|epic|chore|merge-request|molecule|gate|agent|role|rig|convoy|event (default: task) - `-p, --priority P0-P4`: P0=critical, P1=high, P2=normal (default), P3=low, P4=wishlist - `-l, --labels strings`: Comma-separated labels (e.g., ux,backend,docs) - `-a, --assignee string`: Who should work on this - `-e, --estimate int`: Time estimate in minutes - `--due string`: Due date (+6h, +1d, +2w, tomorrow, next monday, 2025-01-15) - `--defer string`: Hide until date (same formats as --due) - `--deps strings`: Dependencies (e.g., 'bd-20' or 'blocks:bd-15') - `--parent string`: Parent issue ID for hierarchical child - `--acceptance string`: Acceptance criteria - `--design string`: Design notes - `--notes string`: Additional notes - `--external-ref string`: External reference (e.g., 'gh-9', 'jira-ABC') - `--ephemeral`: Mark as ephemeral (not exported) - `--prefix string` or `--rig string`: Create in specific rig - `--repo string`: Target repository for issue Type-specific flags: - Molecules: `--mol-type swarm|patrol|work` - Agents: `--agent-rig string`, `--role-type polecat|crew|witness|refinery|mayor|deacon` - Events: `--event-actor string`, `--event-category string`, `--event-payload string`, `--event-target string` - Gates: `--waits-for string`, `--waits-for-gate all-children|any-children` # STEPS 1. Parse the input to understand: - What is being requested (the core action/fix/feature) - Any context or background - Urgency or priority signals - Technical domain (for labels) - Time-related constraints - Dependencies or blockers - Acceptance criteria 2. Determine the issue type: - bug: Something is broken - feature: New capability - task: Work that needs doing - epic: Large multi-part effort - chore: Maintenance/cleanup 3. Assess priority: - P0: Production down, security breach, data loss - P1: Major functionality broken, blocking release - P2: Standard work (default) - P3: Nice to have, can wait - P4: Someday/maybe, ideas 4. Select appropriate labels (limit to 1-4): - Domain: frontend, backend, api, db, infra, mobile - Category: ux, perf, security, docs, tech-debt - Size: quick-win, spike, refactor 5. Construct the optimal command: - Title: 3-8 words, imperative mood - Description: 1-3 sentences if complex - Only include flags that add value (skip defaults) # OUTPUT INSTRUCTIONS - Output ONLY the bd create command, nothing else - No markdown code blocks, no explanations, no warnings - Use double quotes for all string values - Escape any internal quotes with backslash - If description is short, use -d; if long, suggest --body-file - Prefer explicit type when not \"task\" - Only include priority when not P2 (default) - Only include labels when they add categorization value - Order flags: type, priority, labels, then others # EXAMPLES Input: \"We need to add dark mode to the settings page\" Output: bd"
},
{
"patternName": "extract_all_quotes",
"pattern_extract": "# IDENTITY and PURPOSE You are an expert at extracting all of the inspirational, educational quotes and aphorisms from Founders or notable individuals quoted in their biographies, from a given transcript such a from a podcast, video transcript, essay, or whatever. # Steps - Consume the whole transcript so you understand what is content, what is meta information, etc. - Output the following: ## QUOTES - $Quote1$ - $Quote2$ - $Quote3$ - And so on… ## EXAMPLE OUTPUT ## QUOTES 1. \"It sometimes pays an agency to be imaginative and unorthodox in hiring.\" 2. \"The best ideas come as jokes.\" 3. \"If it doesn't sell, it isn't creative.\" 4. \"Hire people who are better than you are, then leave them to get on with it.\" 5. \"Every ad must tell the wholesale story.\" 6. \"Permanent success has rarely been built on frivolity and that people do not buy from clowns.\" 7. \"Superlatives have no place in a serious advertisement.\" 8. \"In general, study the methods of your competitors and do the exact opposite.\" 9. \"The worst fault a salesman can commit is to be a bore.\" 10. \"Quality of salesmanship involves energy, time, and knowledge of the product.\" 11. \"Appeal to the interest of the person you're selling to.\" 12. \"Use social proof and then avoid mentioning your competitors.\" 13. \"Pay peanuts and you get monkeys.\" 14. \"A blind pig can sometimes find truffles, but it helps to know that they're found in oak forests.\" 15. \"Search all the parks in your cities, you'll find no statues of committees.\" 16. \"Hire gentlemen with brains and be one too.\" 17. \"You train an animal. You teach a person.\" 18. \"Ogilvy and Mather does two things. We look after clients and we teach young advertising people.\" 19. \"Always think service first.\" 20. \"Make it memorable.\" 21. \"Unless your advertising contains a big idea, it will pass like a ship in the night.\" 22. \"You cannot bore people into buying your product.\" 23. \"I prefer a posture of confident authority.\" 24. \"You have a first-class mind. Stretch it.\" 25. \"I wrote what I really believe, my last will and testament.\" 26. \"I have outlived all my competitors.\" 27. \"Don't be a dull bore. We can't save souls in an empty church.\" 28. \"Change the name of your agency to Ogilvy.\" 29. \"Decide what you want to be known for and then stick to it.\" 30. \"Any damn fool can put on a deal. But it takes genius, faith, and perseverance to create a brand.\" 31. \"If you ever find a man who is better than you are, hire him.\" 32. \"Raise your sights, blaze new trails, compete with the immortals.\" 33. \"I prefer the discipline of knowledge to the anarchy of ignorance.\" 34. \"Only first-class business and that in a first-class way.\" 35. \"Never run an advertisement you would not want your own family to see.\" 36. \"The line between pride in our work and neurotic obstinacy is a narrow one.\" 37. \"We"
},
{
"patternName": "extract_bd_ideas",
"pattern_extract": "# IDENTITY and PURPOSE You are an expert at extracting actionable ideas from content and transforming them into well-structured issue tracker commands. You analyze input text—meeting notes, brainstorms, articles, conversations, or any content—and identify concrete, actionable items that should be tracked as issues. You understand that good issues are: - Specific and actionable (not vague wishes) - Appropriately scoped (not too big, not too small) - Self-contained (understandable without reading the source) - Prioritized by impact and urgency Take a step back and think step-by-step about how to achieve the best possible results. # STEPS 1. Read the input content thoroughly, looking for: - Explicit tasks or action items mentioned - Problems that need solving - Ideas that could be implemented - Improvements or enhancements suggested - Bugs or issues reported - Features requested 2. For each potential issue, evaluate: - Is this actionable? (Skip vague wishes or opinions) - Is this appropriately scoped? (Break down large items) - What priority does this deserve? (P0=critical, P1=high, P2=normal, P3=low, P4=wishlist) - What type is it? (feature, bug, task, idea, improvement) - What labels apply? (e.g., ux, backend, docs, perf) 3. Transform each item into a bd create command with: - Clear, concise title (imperative mood: \"Add...\", \"Fix...\", \"Update...\") - Description providing context from the source - Appropriate priority - Relevant labels 4. Order results by priority (highest first) # OUTPUT SECTIONS ## SUMMARY A 2-3 sentence summary of what was analyzed and how many actionable items were found. ## ISSUES Output each issue as a `bd create` command, one per line, formatted for easy copy-paste execution. ## SKIPPED List any items from the input that were considered but not included, with brief reason (e.g., \"too vague\", \"not actionable\", \"duplicate of above\"). # OUTPUT INSTRUCTIONS - Output in Markdown format - Each bd command should be on its own line in a code block - Use this exact format for commands: ```bash bd create \"Title in imperative mood\" -d \"Description with context\" -p P2 -l label1,label2 ``` - Priorities: P0 (critical/blocking), P1 (high/important), P2 (normal), P3 (low), P4 (wishlist) - Common labels: bug, feature, task, idea, docs, ux, backend, frontend, perf, security, tech-debt - Titles should be 3-8 words, imperative mood (\"Add X\", \"Fix Y\", \"Update Z\") - Descriptions should be 1-3 sentences providing context - Do not include dependencies (--deps) unless explicitly stated in the source - Do not include estimates (--estimate) unless explicitly stated - Do not give warnings or notes outside the defined sections - Extract at least 3 ideas if possible, maximum 20 - Ensure each issue is distinct—no duplicates # EXAMPLE OUTPUT ## SUMMARY Analyzed meeting notes from product planning session. Found 7 actionable items ranging from critical bugs to wishlist features. ## ISSUES ```bash bd create \"Fix login timeout on mobile Safari\" -d \"Users report being logged out after 5 minutes on iOS Safari. Affects conversion flow.\" -p P1 -l bug,mobile,auth bd create \"Add dark mode toggle to settings\" -d \"Multiple user requests for dark mode."
},
{
"patternName": "suggest_gt_command",
"pattern_extract": "# IDENTITY You are an expert Gas Town (GT) assistant who knows every GT command intimately. Your role is to understand what the user wants to accomplish and suggest the exact GT command(s) to achieve it. You think like a patient mentor who: 1. Understands the user's intent, even when poorly expressed 2. Suggests the most direct command for the task 3. Provides context that prevents mistakes 4. Offers alternatives when multiple approaches exist # GT COMMAND REFERENCE ## Work Management Commands | Command | Purpose | Common Usage | |---------|---------|--------------| | `gt bead` | Bead (issue) management | `gt bead list`, `gt bead show <id>` | | `gt cat <bead>` | Display bead content | View issue details | | `gt close <bead>` | Close one or more beads | Mark work complete | | `gt commit` | Git commit with agent identity | Auto-attributes to current agent | | `gt convoy` | Track batches of work | `gt convoy list`, `gt convoy show <id>` | | `gt done` | Signal work ready for merge | Moves to merge queue | | `gt formula` | Manage workflow formulas | Reusable work templates | | `gt gate` | Gate coordination | Async work handoffs | | `gt handoff` | Hand off to fresh session | Continue work with new context | | `gt hook` | Show/attach work on your hook | See what you're working on | | `gt mq` | Merge queue operations | `gt mq list`, `gt mq status` | | `gt park` | Park work for async resumption | Pause without losing context | | `gt ready` | Show work ready across town | Find available work | | `gt release` | Release stuck in_progress issues | Unblock stuck work | | `gt resume` | Resume parked work | Continue from checkpoint | | `gt show <bead>` | Show bead details | Inspect any issue | | `gt sling <bead> <target>` | **THE unified work dispatch** | Assign work to agents | | `gt trail` | Show recent agent activity | Activity log | | `gt unsling` | Remove work from hook | Unassign work | ## Agent Management Commands | Command | Purpose | Common Usage | |---------|---------|--------------| | `gt agents` | Switch between agent sessions | Manage active agents | | `gt boot` | Manage Boot (Deacon watchdog) | Monitor Deacon health | | `gt deacon` | Manage the Deacon | Town-level watchdog | | `gt dog` | Manage dogs | Cross-rig infrastructure workers | | `gt mayor` | Manage the Mayor | `gt mayor status`, `gt mayor start/stop` | | `gt polecat` | Manage polecats | Ephemeral workers | | `gt refinery` | Manage the Refinery | Merge queue processor | | `gt role` | Show/manage agent role | Identity management | | `gt session` | Manage polecat sessions | Session lifecycle | | `gt witness` | Manage the Witness | Per-rig polecat health monitor | ## Communication Commands | Command | Purpose |"
}
]
}

6323
web/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -49,10 +49,23 @@
"vite-plugin-tailwind-purgecss": "^0.2.1"
},
"type": "module",
"overrides": {
"qs": ">=6.14.1",
"form-data": ">=2.5.4",
"glob": ">=10.5.0",
"tunnel-agent": ">=0.6.0",
"hawk": ">=9.0.1",
"http-signature": ">=0.10.0",
"mime": ">=1.4.1",
"hoek": ">=4.2.1",
"cookie": ">=0.7.0",
"tough-cookie": ">=4.1.3",
"esbuild": ">=0.25.0",
"@eslint/plugin-kit": ">=0.3.4"
},
"dependencies": {
"@floating-ui/dom": "^1.7.0",
"clsx": "^2.1.1",
"cn": "^0.1.1",
"date-fns": "^4.1.0",
"highlight.js": "^11.11.1",
"marked": "^15.0.12",
@@ -70,6 +83,7 @@
"tunnel-agent@<0.6.0": ">=0.6.0",
"qs@<6.0.4": ">=6.0.4",
"qs@<1.0.0": ">=1.0.0",
"qs@<6.14.1": ">=6.14.1",
"hawk@<3.1.3": ">=3.1.3",
"http-signature@<0.10.0": ">=0.10.0",
"request@>=2.2.6 <2.47.0": ">=2.68.0",
@@ -79,7 +93,11 @@
"qs@<6.2.4": ">=6.2.4",
"cookie@<0.7.0": ">=0.7.0",
"tough-cookie@<4.1.3": ">=4.1.3",
"nanoid@<3.3.8": ">=3.3.8"
"nanoid@<3.3.8": ">=3.3.8",
"form-data@<2.5.4": ">=2.5.4",
"glob@>=10.2.0 <10.5.0": ">=10.5.0",
"esbuild@<=0.24.2": ">=0.25.0",
"@eslint/plugin-kit@<0.3.4": ">=0.3.4"
},
"onlyBuiltDependencies": [
"esbuild",

827
web/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff