Module: CompletionKit::McpTools::MetricVersions

Extended by:
Base
Defined in:
app/services/completion_kit/mcp_tools/metric_versions.rb

Constant Summary collapse

TOOLS =
{
  "metric_versions_list" => {
    description: "List every MetricVersion (drafts + published) for a metric, newest first. Each row carries version_number, state, source, current flag, and timestamps.",
    inputSchema: {
      type: "object",
      properties: {
        metric_id: { type: "integer" }
      },
      required: ["metric_id"]
    },
    handler: :list
  },
  "metric_versions_publish" => {
    description: "Publish a MetricVersion as the live judge for its metric. Works for both 'draft → published' and 'revert to an older published version → current'. Transactionally flips current, demotes peers, and writes the version's instruction + rubric_bands back onto the metric so the judge actually uses them.",
    inputSchema: {
      type: "object",
      properties: {
        metric_version_id: { type: "integer" }
      },
      required: ["metric_version_id"]
    },
    handler: :publish
  },
  "metric_versions_dismiss" => {
    description: "Destroy a draft MetricVersion (use for either source: 'edit' or source: 'suggestion'). Published versions are refused — to demote a published version, publish a different one as current instead.",
    inputSchema: {
      type: "object",
      properties: {
        metric_version_id: { type: "integer" }
      },
      required: ["metric_version_id"]
    },
    handler: :dismiss
  }
}.freeze

Class Method Summary collapse

Methods included from Base

call, definitions, error_result, text_result

Class Method Details

.dismiss(args) ⇒ Object



59
60
61
62
63
64
# File 'app/services/completion_kit/mcp_tools/metric_versions.rb', line 59

def self.dismiss(args)
  version = CompletionKit::MetricVersion.find(args["metric_version_id"])
  return error_result("Cannot dismiss a published version. Publish a different version as current instead.") if version.published?
  version.destroy!
  text_result({id: version.id, destroyed: true})
end

.list(args) ⇒ Object



42
43
44
45
46
# File 'app/services/completion_kit/mcp_tools/metric_versions.rb', line 42

def self.list(args)
  metric = CompletionKit::Metric.find(args["metric_id"])
  versions = CompletionKit::MetricVersion.where(metric_id: metric.id).order(version_number: :desc)
  text_result(versions.map(&:as_json))
end

.publish(args) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'app/services/completion_kit/mcp_tools/metric_versions.rb', line 48

def self.publish(args)
  version = CompletionKit::MetricVersion.find(args["metric_version_id"])
  if version.published? && !version.current?
    audit = version.revert!
    text_result(audit.as_json)
  else
    version.publish!
    text_result(version.reload.as_json)
  end
end