Module: KairosMcp

Defined in:
lib/kairos_mcp.rb,
lib/kairos_mcp/kairos.rb,
lib/kairos_mcp/safety.rb,
lib/kairos_mcp/server.rb,
lib/kairos_mcp/version.rb,
lib/kairos_mcp/protocol.rb,
lib/kairos_mcp/skillset.rb,
lib/kairos_mcp/action_log.rb,
lib/kairos_mcp/skills_ast.rb,
lib/kairos_mcp/skills_dsl.rb,
lib/kairos_mcp/http_server.rb,
lib/kairos_mcp/initializer.rb,
lib/kairos_mcp/admin/router.rb,
lib/kairos_mcp/safe_evolver.rb,
lib/kairos_mcp/admin/helpers.rb,
lib/kairos_mcp/config_merger.rb,
lib/kairos_mcp/skills_config.rb,
lib/kairos_mcp/skills_parser.rb,
lib/kairos_mcp/tool_registry.rb,
lib/kairos_mcp/layer_registry.rb,
lib/kairos_mcp/meeting_router.rb,
lib/kairos_mcp/skill_contexts.rb,
lib/kairos_mcp/context_manager.rb,
lib/kairos_mcp/storage/backend.rb,
lib/kairos_mcp/tools/base_tool.rb,
lib/kairos_mcp/version_manager.rb,
lib/kairos_mcp/auth/token_store.rb,
lib/kairos_mcp/plugin_projector.rb,
lib/kairos_mcp/skillset_manager.rb,
lib/kairos_mcp/storage/exporter.rb,
lib/kairos_mcp/storage/importer.rb,
lib/kairos_mcp/tools/skills_get.rb,
lib/kairos_mcp/tools/tool_guide.rb,
lib/kairos_mcp/upgrade_analyzer.rb,
lib/kairos_mcp/resource_registry.rb,
lib/kairos_mcp/tools/hello_world.rb,
lib/kairos_mcp/tools/skills_list.rb,
lib/kairos_mcp/auth/authenticator.rb,
lib/kairos_mcp/dsl_ast/ast_engine.rb,
lib/kairos_mcp/dsl_ast/decompiler.rb,
lib/kairos_mcp/invocation_context.rb,
lib/kairos_mcp/kairos_chain/block.rb,
lib/kairos_mcp/kairos_chain/chain.rb,
lib/kairos_mcp/knowledge_provider.rb,
lib/kairos_mcp/skill_tool_adapter.rb,
lib/kairos_mcp/tools/chain_export.rb,
lib/kairos_mcp/tools/chain_import.rb,
lib/kairos_mcp/tools/chain_record.rb,
lib/kairos_mcp/tools/chain_status.rb,
lib/kairos_mcp/tools/chain_verify.rb,
lib/kairos_mcp/tools/context_save.rb,
lib/kairos_mcp/tools/skills_audit.rb,
lib/kairos_mcp/tools/state_commit.rb,
lib/kairos_mcp/tools/state_status.rb,
lib/kairos_mcp/tools/token_manage.rb,
lib/kairos_mcp/vector_search/base.rb,
lib/kairos_mcp/dsl_skills_provider.rb,
lib/kairos_mcp/tools/chain_history.rb,
lib/kairos_mcp/tools/knowledge_get.rb,
lib/kairos_mcp/tools/resource_list.rb,
lib/kairos_mcp/tools/resource_read.rb,
lib/kairos_mcp/tools/skills_evolve.rb,
lib/kairos_mcp/tools/state_history.rb,
lib/kairos_mcp/storage/file_backend.rb,
lib/kairos_mcp/tools/knowledge_list.rb,
lib/kairos_mcp/tools/skills_dsl_get.rb,
lib/kairos_mcp/tools/skills_promote.rb,
lib/kairos_mcp/tools/system_upgrade.rb,
lib/kairos_mcp/tools/skills_dsl_list.rb,
lib/kairos_mcp/tools/skills_rollback.rb,
lib/kairos_mcp/anthropic_skill_parser.rb,
lib/kairos_mcp/dsl_ast/drift_detector.rb,
lib/kairos_mcp/storage/sqlite_backend.rb,
lib/kairos_mcp/tools/definition_drift.rb,
lib/kairos_mcp/tools/knowledge_update.rb,
lib/kairos_mcp/vector_search/provider.rb,
lib/kairos_mcp/tools/definition_verify.rb,
lib/kairos_mcp/kairos_chain/merkle_tree.rb,
lib/kairos_mcp/tools/instructions_update.rb,
lib/kairos_mcp/tools/definition_decompile.rb,
lib/kairos_mcp/tools/formalization_record.rb,
lib/kairos_mcp/state_commit/commit_service.rb,
lib/kairos_mcp/tools/context_create_subdir.rb,
lib/kairos_mcp/tools/formalization_history.rb,
lib/kairos_mcp/state_commit/diff_calculator.rb,
lib/kairos_mcp/state_commit/pending_changes.rb,
lib/kairos_mcp/kairos_chain/skill_transition.rb,
lib/kairos_mcp/state_commit/manifest_builder.rb,
lib/kairos_mcp/state_commit/snapshot_manager.rb,
lib/kairos_mcp/vector_search/fallback_search.rb,
lib/kairos_mcp/vector_search/semantic_search.rb,
lib/kairos_mcp/kairos_chain/formalization_decision.rb

Defined Under Namespace

Modules: Admin, Auth, DslAst, Kairos, KairosChain, StateCommit, Storage, Tools, VectorSearch Classes: ActionLog, AnthropicSkillParser, AstNode, ConfigMerger, ContextManager, DefinitionContext, DslSkillsProvider, EffectContext, EvolveContext, GuaranteesContext, HttpServer, Initializer, InvocationContext, KnowledgeProvider, LayerRegistry, MeetingRouter, PluginProjector, Protocol, ResourceRegistry, SafeEvolver, Safety, Server, SkillBuilder, SkillHistory, SkillSetManager, SkillToolAdapter, SkillsAst, SkillsConfig, SkillsDsl, SkillsParser, Skillset, ToolContext, ToolRegistry, UpgradeAnalyzer, VersionManager

Constant Summary collapse

TEMPLATE_FILES =

Template Files Registry

Centralized mapping of template files to their data directory destinations. Used by Initializer (for init) and UpgradeAnalyzer (for migration).

Format: [template_relative_path, data_dir_accessor_symbol]

[
  ['skills/kairos.rb',              :dsl_path],
  ['skills/kairos.md',              :md_path],
  ['skills/kairos_quickguide.md',   :quickguide_path],
  ['skills/kairos_tutorial.md',     :tutorial_path],
  ['skills/researcher.md',          :researcher_path],
  ['skills/config.yml',             :skills_config_path],
  ['config/safety.yml',             :safety_config_path],
  ['config/tool_metadata.yml',      :tool_metadata_path]
].freeze
TEMPLATE_FILE_TYPES =

File type classification for upgrade conflict resolution

{
  'skills/kairos.rb'              => :l0_dsl,
  'skills/kairos.md'              => :l0_doc,
  'skills/kairos_quickguide.md'   => :l0_doc,
  'skills/kairos_tutorial.md'     => :l0_doc,
  'skills/researcher.md'          => :l0_doc,
  'skills/config.yml'             => :config_yaml,
  'config/safety.yml'             => :config_yaml,
  'config/tool_metadata.yml'      => :config_yaml
}.freeze
VERSION =
"3.15.0"
CHANGELOG_URL =
"https://github.com/masaomi/KairosChain_2026/blob/main/CHANGELOG.md"

Class Method Summary collapse

Class Method Details

.action_log_pathObject

L0 action log file path



155
156
157
# File 'lib/kairos_mcp.rb', line 155

def action_log_path
  File.join(skills_dir, 'action_log.jsonl')
end

.blockchain_pathObject

Blockchain file path (for file backend)



180
181
182
# File 'lib/kairos_mcp.rb', line 180

def blockchain_path
  File.join(storage_dir, 'blockchain.json')
end

.collect_knowledge_entries(user_context: nil) ⇒ Object

Collect L1 knowledge entries for plugin projection Shared by protocol.rb and plugin_project tool



301
302
303
304
305
306
307
308
309
310
311
312
313
# File 'lib/kairos_mcp.rb', line 301

def collect_knowledge_entries(user_context: nil)
  kdir = knowledge_dir(user_context: user_context)
  return [] unless Dir.exist?(kdir)
  Dir.glob(File.join(kdir, '**', '*.md')).filter_map do |f|
    fm = parse_frontmatter(f)
    next unless fm
    { name: fm['name'] || File.basename(f, '.md'),
      description: fm['description'] || '',
      version: fm['version'] || '0',
      tags: fm['tags'] || [],
      path: f }
  end
end

.config_dirObject

Config directory (safety.yml, tool_metadata.yml)



220
221
222
# File 'lib/kairos_mcp.rb', line 220

def config_dir
  path_for('config')
end

.context_dir(user_context: nil) ⇒ Object

L2 context directory. Same tenant-aware resolution as knowledge_dir.



169
170
171
172
# File 'lib/kairos_mcp.rb', line 169

def context_dir(user_context: nil)
  resolved = resolve_path(:context, user_context)
  resolved || path_for('context')
end

.data_dirString

Get the root data directory for all runtime data

Returns:

  • (String)

    Absolute path to the data directory



92
93
94
# File 'lib/kairos_mcp.rb', line 92

def data_dir
  @data_dir ||= resolve_data_dir
end

.data_dir=(path) ⇒ Object

Set the root data directory explicitly

Parameters:

  • path (String)

    Absolute or relative path



99
100
101
102
# File 'lib/kairos_mcp.rb', line 99

def data_dir=(path)
  @data_dir = File.expand_path(path)
  @path_cache = {}
end

.dsl_pathObject

L0 skills DSL file path



120
121
122
# File 'lib/kairos_mcp.rb', line 120

def dsl_path
  File.join(skills_dir, 'kairos.rb')
end

.embeddings_dirObject

Embeddings directory (for vector search)



195
196
197
# File 'lib/kairos_mcp.rb', line 195

def embeddings_dir
  File.join(storage_dir, 'embeddings')
end

.export_dirObject

Export directory (for SQLite export)



215
216
217
# File 'lib/kairos_mcp.rb', line 215

def export_dir
  File.join(storage_dir, 'export')
end

.gem_rootString

Path to the gem’s root directory (one level above lib/)

Returns:

  • (String)

    Absolute path to gem root



267
268
269
# File 'lib/kairos_mcp.rb', line 267

def gem_root
  File.expand_path('..', __dir__)
end

.http_serverObject

HttpServer reference (set when running in HTTP mode)



79
80
81
# File 'lib/kairos_mcp.rb', line 79

def http_server
  @http_server
end

.http_server=(server) ⇒ Object



83
84
85
# File 'lib/kairos_mcp.rb', line 83

def http_server=(server)
  @http_server = server
end

.initialized?Boolean

Check if the data directory has been initialized

Returns:

  • (Boolean)

    true if essential files exist



274
275
276
# File 'lib/kairos_mcp.rb', line 274

def initialized?
  File.exist?(dsl_path) && File.exist?(skills_config_path)
end

.knowledge_dir(user_context: nil) ⇒ Object

L1 knowledge directory. When user_context is provided, registered path resolvers can return a tenant-specific path. Without user_context, returns the global path.



162
163
164
165
# File 'lib/kairos_mcp.rb', line 162

def knowledge_dir(user_context: nil)
  resolved = resolve_path(:knowledge, user_context)
  resolved || path_for('knowledge')
end

.knowledge_index_pathObject

Knowledge embeddings index path



205
206
207
# File 'lib/kairos_mcp.rb', line 205

def knowledge_index_path
  File.join(embeddings_dir, 'knowledge')
end

.md_pathObject

L0 skills philosophy file path



125
126
127
# File 'lib/kairos_mcp.rb', line 125

def md_path
  File.join(skills_dir, 'kairos.md')
end

.meta_pathObject

Meta file path (.kairos_meta.yml for upgrade tracking)



245
246
247
# File 'lib/kairos_mcp.rb', line 245

def meta_path
  File.join(data_dir, '.kairos_meta.yml')
end

.parse_frontmatter(path) ⇒ Object



315
316
317
318
319
320
321
322
323
324
# File 'lib/kairos_mcp.rb', line 315

def parse_frontmatter(path)
  content = File.read(path, encoding: 'utf-8')
  return nil unless content.start_with?('---')
  parts = content.split('---', 3)
  return nil if parts.length < 3
  require 'yaml'
  YAML.safe_load(parts[1])
rescue StandardError
  nil
end

.project_rootObject

Project root: parent of .kairos/ data directory



283
284
285
# File 'lib/kairos_mcp.rb', line 283

def project_root
  File.dirname(data_dir)
end

.projection_modeObject

Determine projection mode for PluginProjector :project (default) — writes to .claude/skills/, .claude/agents/, settings.json :plugin — writes to plugin root skills/, agents/, hooks/hooks.json



290
291
292
293
294
295
296
297
# File 'lib/kairos_mcp.rb', line 290

def projection_mode
  return :plugin if ENV['KAIROS_PROJECTION_MODE'] == 'plugin'
  root = project_root
  plugin_json = File.join(root, '.claude-plugin', 'plugin.json')
  claude_dir = File.join(root, '.claude')
  return :plugin if File.exist?(plugin_json) && !File.exist?(claude_dir)
  :project
end

.quickguide_pathObject

L0 skills quick guide file path (user-facing instructions)



130
131
132
# File 'lib/kairos_mcp.rb', line 130

def quickguide_path
  File.join(skills_dir, 'kairos_quickguide.md')
end

.register_path_resolver(name, &block) ⇒ Object

Register a named path resolver for tenant-aware directory resolution. Block receives (type, user_context) and returns a path or nil.



63
64
65
66
67
# File 'lib/kairos_mcp.rb', line 63

def register_path_resolver(name, &block)
  @path_resolver_mutex.synchronize do
    @path_resolvers[name.to_sym] = block
  end
end

.researcher_pathObject

Researcher instruction mode file path



140
141
142
# File 'lib/kairos_mcp.rb', line 140

def researcher_path
  File.join(skills_dir, 'researcher.md')
end

.reset_data_dir!Object

Reset data_dir (for testing or re-initialization)



105
106
107
108
# File 'lib/kairos_mcp.rb', line 105

def reset_data_dir!
  @data_dir = nil
  @path_cache = {}
end

.safety_config_pathObject

Safety config file path



225
226
227
# File 'lib/kairos_mcp.rb', line 225

def safety_config_path
  File.join(config_dir, 'safety.yml')
end

.skills_config_pathObject

L0 skills config file path



145
146
147
# File 'lib/kairos_mcp.rb', line 145

def skills_config_path
  File.join(skills_dir, 'config.yml')
end

.skills_dirObject

L0 skills directory (kairos.rb, kairos.md, config.yml, versions/)



115
116
117
# File 'lib/kairos_mcp.rb', line 115

def skills_dir
  path_for('skills')
end

.skills_index_pathObject

Skills embeddings index path



200
201
202
# File 'lib/kairos_mcp.rb', line 200

def skills_index_path
  File.join(embeddings_dir, 'skills')
end

.skillsets_config_pathObject

SkillSets config file (enabled/disabled state, layer overrides)



240
241
242
# File 'lib/kairos_mcp.rb', line 240

def skillsets_config_path
  File.join(skillsets_dir, 'config.yml')
end

.skillsets_dirObject

SkillSets directory (plugin-based extensions)



235
236
237
# File 'lib/kairos_mcp.rb', line 235

def skillsets_dir
  path_for('skillsets')
end

.snapshots_dirObject

Snapshots directory (for state commit)



210
211
212
# File 'lib/kairos_mcp.rb', line 210

def snapshots_dir
  File.join(storage_dir, 'snapshots')
end

.sqlite_pathObject

SQLite database path



185
186
187
# File 'lib/kairos_mcp.rb', line 185

def sqlite_path
  File.join(storage_dir, 'kairos.db')
end

.storage_dirObject

Storage directory (blockchain, embeddings, snapshots, tokens, etc.)



175
176
177
# File 'lib/kairos_mcp.rb', line 175

def storage_dir
  path_for('storage')
end

.templates_dirString

Path to the bundled templates directory within the gem

Returns:

  • (String)

    Absolute path to templates/



256
257
258
# File 'lib/kairos_mcp.rb', line 256

def templates_dir
  File.expand_path('../templates', __dir__)
end

.token_store_pathObject

Token store file path



190
191
192
# File 'lib/kairos_mcp.rb', line 190

def token_store_path
  File.join(storage_dir, 'tokens.json')
end

.tool_metadata_pathObject

Tool metadata file path



230
231
232
# File 'lib/kairos_mcp.rb', line 230

def 
  File.join(config_dir, 'tool_metadata.yml')
end

.tutorial_pathObject

L0 skills tutorial file path (onboarding instructions)



135
136
137
# File 'lib/kairos_mcp.rb', line 135

def tutorial_path
  File.join(skills_dir, 'kairos_tutorial.md')
end

.unregister_path_resolver(name) ⇒ Object



69
70
71
72
73
# File 'lib/kairos_mcp.rb', line 69

def unregister_path_resolver(name)
  @path_resolver_mutex.synchronize do
    @path_resolvers.delete(name.to_sym)
  end
end

.versions_dirObject

L0 skills versions directory



150
151
152
# File 'lib/kairos_mcp.rb', line 150

def versions_dir
  File.join(skills_dir, 'versions')
end