Module: Kward::ConfigFiles::Extensions
- Extended by:
- Extensions
- Included in:
- Kward::ConfigFiles, Extensions
- Defined in:
- lib/kward/config/extensions.rb
Instance Method Summary collapse
- #emit_warning(message, warning_sink: nil) ⇒ Object
- #inside_directory?(path, base) ⇒ Boolean
-
#plugin_dir ⇒ String
Trusted user plugin directory.
-
#plugin_paths(warning_sink: nil) ⇒ Array<String>
Finds trusted plugin files and package entrypoints.
- #presence(value) ⇒ Object
- #project_skill_candidates(workspace_root: Dir.pwd, warning_sink: nil) ⇒ Object
- #prompt_template_registry ⇒ Object
-
#prompt_templates(reserved_commands: []) ⇒ Array<PromptTemplate>
Lists prompt templates exposed as slash commands.
-
#read_skill_file(name, relative_path = nil, workspace_root: Dir.pwd) ⇒ String
Reads a skill file by skill name and optional relative path.
-
#skills(workspace_root: Dir.pwd, warning_sink: nil, project_skill_paths: nil) ⇒ Array<Skill>
Lists configured skills discovered under the config directory.
- #skills_registry(workspace_root: Dir.pwd, warning_sink: nil, project_skill_paths: nil) ⇒ Object
Instance Method Details
#emit_warning(message, warning_sink: nil) ⇒ Object
81 82 83 84 |
# File 'lib/kward/config/extensions.rb', line 81 def emit_warning(, warning_sink: nil) sink = warning_sink || @warning_sink sink ? sink.call() : warn() end |
#inside_directory?(path, base) ⇒ Boolean
86 87 88 |
# File 'lib/kward/config/extensions.rb', line 86 def inside_directory?(path, base) PathGuard.inside?(path, base) end |
#plugin_dir ⇒ String
Returns trusted user plugin directory.
19 20 21 |
# File 'lib/kward/config/extensions.rb', line 19 def plugin_dir File.("~/.kward/plugins") end |
#plugin_paths(warning_sink: nil) ⇒ Array<String>
Finds trusted plugin files and package entrypoints.
Plugins are intentionally loaded only from ~/.kward/plugins, not from a
workspace or custom KWARD_CONFIG_PATH directory.
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/kward/config/extensions.rb', line 29 def plugin_paths(warning_sink: nil) plugins_root = plugin_dir return [] unless Dir.exist?(plugins_root) paths = Dir.glob(File.join(plugins_root, "*.rb")) paths.concat(Dir.glob(File.join(plugins_root, "*", "plugin.rb"))) paths.sort rescue StandardError => e emit_warning("Warning: skipping Kward plugins in #{plugins_root}: #{e.}", warning_sink: warning_sink) [] end |
#presence(value) ⇒ Object
90 91 92 93 |
# File 'lib/kward/config/extensions.rb', line 90 def presence(value) text = value.to_s text.empty? ? nil : text end |
#project_skill_candidates(workspace_root: Dir.pwd, warning_sink: nil) ⇒ Object
14 15 16 |
# File 'lib/kward/config/extensions.rb', line 14 def project_skill_candidates(workspace_root: Dir.pwd, warning_sink: nil) skills_registry(workspace_root: workspace_root, warning_sink: warning_sink).project_skill_candidates end |
#prompt_template_registry ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/kward/config/extensions.rb', line 72 def prompt_template_registry ::Kward::Prompts::Templates.new( config_dir: config_dir, template_class: PromptTemplate, markdown_parser: ->(path) { Frontmatter.markdown_parts(path) }, warning_sink: @warning_sink ) end |
#prompt_templates(reserved_commands: []) ⇒ Array<PromptTemplate>
Lists prompt templates exposed as slash commands.
45 46 47 |
# File 'lib/kward/config/extensions.rb', line 45 def prompt_templates(reserved_commands: []) prompt_template_registry.prompt_templates(reserved_commands: reserved_commands) end |
#read_skill_file(name, relative_path = nil, workspace_root: Dir.pwd) ⇒ String
Reads a skill file by skill name and optional relative path.
54 55 56 |
# File 'lib/kward/config/extensions.rb', line 54 def read_skill_file(name, relative_path = nil, workspace_root: Dir.pwd) skills_registry(workspace_root: workspace_root).read_skill_file(name, relative_path) end |
#skills(workspace_root: Dir.pwd, warning_sink: nil, project_skill_paths: nil) ⇒ Array<Skill>
Lists configured skills discovered under the config directory.
10 11 12 |
# File 'lib/kward/config/extensions.rb', line 10 def skills(workspace_root: Dir.pwd, warning_sink: nil, project_skill_paths: nil) skills_registry(workspace_root: workspace_root, warning_sink: warning_sink, project_skill_paths: project_skill_paths).skills end |
#skills_registry(workspace_root: Dir.pwd, warning_sink: nil, project_skill_paths: nil) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/kward/config/extensions.rb', line 58 def skills_registry(workspace_root: Dir.pwd, warning_sink: nil, project_skill_paths: nil) Skills::Registry.new( config_dir: config_dir, workspace_root: workspace_root, project_skills_trusted: project_skills_trusted?, skill_class: Skill, max_file_bytes: MAX_SKILL_FILE_BYTES, markdown_parser: ->(path) { Frontmatter.markdown_parts(path, lenient: true) }, inside_directory: method(:inside_directory?), warning_sink: warning_sink || @warning_sink, project_skill_paths: project_skill_paths ) end |