{
 "components": [
  {
   "category": "agent",
   "description": "Deterministic tool-calling agent loop with a pluggable planner, step records and bounded execution.",
   "latest_version": "1.0.0",
   "license": "MIT",
   "name": "agent",
   "runtime": "python",
   "tags": [
    "agent",
    "tools",
    "loop"
   ],
   "versions": [
    {
     "category": "agent",
     "dependencies": [
      "tool-router@1.1.0 (optional)"
     ],
     "description": "Deterministic tool-calling agent loop with a pluggable planner, step records and bounded execution.",
     "files": [
      "README.md",
      "src/agent.py"
     ],
     "license": "MIT",
     "name": "agent",
     "release_notes": "Replaces the 0.1.0 prototype with run_agent(), structured Step and AgentRun records, error capture, stop_on_error and tool-router support. The prototype run() function is removed.",
     "runtime": "python",
     "sha256": {
      "README.md": "ff4c37b99f38e3364342abb46ffc203f915124e03e2801f0942604a98762f8af",
      "src/agent.py": "755d3dbcaadc5374821c2a0a05bda7ad966584f45a546fdff5c26b3c7765107d"
     },
     "source": "registry/agent/versions/1.0.0",
     "tags": [
      "agent",
      "tools",
      "loop"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "tool",
   "description": "Format numbered source citations and bibliographies with duplicate merging and stable numbering.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "citation-builder",
   "runtime": "python",
   "tags": [
    "citations",
    "sources",
    "rag"
   ],
   "versions": [
    {
     "category": "tool",
     "dependencies": [],
     "description": "Format numbered source citations and bibliographies with duplicate merging and stable numbering.",
     "files": [
      "README.md",
      "src/citation_builder.py"
     ],
     "license": "MIT",
     "name": "citation-builder",
     "release_notes": "Adds CitationIndex for stable numbering, URL-aware duplicate merging, punctuation and whitespace cleanup, and input validation. bibliography() returns an empty string when there are no sources.",
     "runtime": "python",
     "sha256": {
      "README.md": "8274263d8ed6c27b55e09b43923cfd46c9626423d157ed6e31c01719db05a88f",
      "src/citation_builder.py": "cb2d640f26802b83d2baf9c5458f9543927d8de30b2cd81f925af000d2afd960"
     },
     "source": "registry/citation-builder/versions/1.1.0",
     "tags": [
      "citations",
      "sources",
      "rag"
     ],
     "version": "1.1.0"
    },
    {
     "category": "tool",
     "dependencies": [],
     "description": "Format numbered source citations and bibliographies from source metadata.",
     "files": [
      "README.md",
      "src/citation_builder.py"
     ],
     "license": "MIT",
     "name": "citation-builder",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "45f973fa6cd80d287f5d10bfb696bcad5be023155a0884aae7e80c8b888050c7",
      "src/citation_builder.py": "f8d0ea8c6c097226e51aad0097301d2925c33034dc068f5aae3b5286d14737cd"
     },
     "source": "registry/citation-builder/versions/1.0.0",
     "tags": [
      "citations",
      "sources",
      "rag"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "retrieval",
   "description": "Combine retrieved passages into a numbered, size-limited context block for prompts.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "context-builder",
   "runtime": "python",
   "tags": [
    "context",
    "rag",
    "prompt"
   ],
   "versions": [
    {
     "category": "retrieval",
     "dependencies": [
      "keyword-rag@1.1.0 (optional)"
     ],
     "description": "Combine retrieved passages into a numbered, size-limited context block for prompts.",
     "files": [
      "README.md",
      "src/context_builder.py"
     ],
     "license": "MIT",
     "name": "context-builder",
     "release_notes": "Accepts plain-string passages, supports a custom retriever and header, exact max_chars budget, argument validation, and no sys.path mutation. keyword-rag is now an optional dependency.",
     "runtime": "python",
     "sha256": {
      "README.md": "6be90f51c90905b13a17eab88379219e87b2357fc9c3a09412ef2d4b36a87038",
      "src/context_builder.py": "2edc86084d1da32ae460ac22ca8d538086dac2d79639847759c92df73a199472"
     },
     "source": "registry/context-builder/versions/1.1.0",
     "tags": [
      "context",
      "rag",
      "prompt"
     ],
     "version": "1.1.0"
    },
    {
     "category": "retrieval",
     "dependencies": [
      "keyword-rag@1.0.0"
     ],
     "description": "Combine retrieved passages into a structured, size-limited context block for prompts.",
     "files": [
      "README.md",
      "src/context_builder.py"
     ],
     "license": "MIT",
     "name": "context-builder",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "6de9a7115f3146ac079e6053f631e049475b0e9e1a4468f37bf5bb391581e469",
      "src/context_builder.py": "793619e5c5e665bd9248f39c2902bcdc894af410676f914fca973dbd51344f8f"
     },
     "source": "registry/context-builder/versions/1.0.0",
     "tags": [
      "context",
      "rag",
      "prompt"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "memory",
   "description": "In-process conversation store with size limit, keyword search, character-budget windows and snapshots.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "conversation-memory",
   "runtime": "python",
   "tags": [
    "memory",
    "chat",
    "conversation"
   ],
   "versions": [
    {
     "category": "memory",
     "dependencies": [],
     "description": "In-process conversation store with size limit, keyword search, character-budget windows and snapshots.",
     "files": [
      "README.md",
      "src/conversation_memory.py"
     ],
     "license": "MIT",
     "name": "conversation-memory",
     "release_notes": "Monotonic message ids, copy-on-read, window() for context budgets, extend(), to_dict()/from_dict() snapshots, Unicode-aware search and an injectable clock. Backward compatible with 1.0.0.",
     "runtime": "python",
     "sha256": {
      "README.md": "546d3c307c4fd9a111a3a0f3663a44e42099a56fb14809395b7008180965469d",
      "src/conversation_memory.py": "97774ce9da2e1920c9a9d01cf3f149221d06cbd0f3ef24b7b5a40dda28a47ccb"
     },
     "source": "registry/conversation-memory/versions/1.1.0",
     "tags": [
      "memory",
      "chat",
      "conversation"
     ],
     "version": "1.1.0"
    },
    {
     "category": "memory",
     "dependencies": [],
     "description": "Small local in-memory conversation store with add, search, recent and clear.",
     "files": [
      "README.md",
      "src/conversation_memory.py"
     ],
     "license": "MIT",
     "name": "conversation-memory",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "38eb1613b61f68e73d9a94b4915ac13beb306eb3baa8726ba993fcf1b5c59360",
      "src/conversation_memory.py": "f0db037eb8269a7663034f720c6b03e3fbf7612f2362594be5fa14c8d4f76cd4"
     },
     "source": "registry/conversation-memory/versions/1.0.0",
     "tags": [
      "memory",
      "chat",
      "conversation"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "validation",
   "description": "Validate JSON text and return error position, type, keys and readable schema violations.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "json-validator",
   "runtime": "python",
   "tags": [
    "json",
    "validation",
    "schema"
   ],
   "versions": [
    {
     "category": "validation",
     "dependencies": [],
     "description": "Validate JSON text and return error position, type, keys and readable schema violations.",
     "files": [
      "README.md",
      "src/json_validator.py"
     ],
     "license": "MIT",
     "name": "json-validator",
     "release_notes": "Adds enum, additionalProperties, size and range keywords, type lists, NaN/Infinity rejection, bytes input and up-front schema validation. Validity results for 1.0.0 inputs are unchanged; messages now use JSON type names.",
     "runtime": "python",
     "sha256": {
      "README.md": "e21ded65855786c53c8fbe605e38d6a8aa8c96da21ffd407c4ace8c6e4fab591",
      "src/json_validator.py": "99bd500bf5b5f3cee7d1dedff0250d32b7cd9e965475615964d25933811ca5f9"
     },
     "source": "registry/json-validator/versions/1.1.0",
     "tags": [
      "json",
      "validation",
      "schema"
     ],
     "version": "1.1.0"
    },
    {
     "category": "validation",
     "dependencies": [],
     "description": "Validate JSON text and return error position, type, keys and optional schema errors.",
     "files": [
      "README.md",
      "src/json_validator.py"
     ],
     "license": "MIT",
     "name": "json-validator",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "eded86b6c7747e5f345699affe94f36b760640e04afefc769a9834720f93e38b",
      "src/json_validator.py": "cce5321361df5103831c900eea2f895a537d29fab3d18717e9d57125b6134ab8"
     },
     "source": "registry/json-validator/versions/1.0.0",
     "tags": [
      "json",
      "validation",
      "schema"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "retrieval",
   "description": "Dependency-free keyword retrieval that ranks documents and returns relevant passages.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "keyword-rag",
   "runtime": "python",
   "tags": [
    "rag",
    "retrieval",
    "search"
   ],
   "versions": [
    {
     "category": "retrieval",
     "dependencies": [],
     "description": "Dependency-free keyword retrieval that ranks documents and returns relevant passages.",
     "files": [
      "README.md",
      "src/keyword_rag.py"
     ],
     "license": "MIT",
     "name": "keyword-rag",
     "release_notes": "Computes document frequencies once per query, Unicode-aware tokenization, stable tie-breaking by input order, input validation, add_documents() and clear(). Scores are unchanged from 1.0.0.",
     "runtime": "python",
     "sha256": {
      "README.md": "5d8d313b9b01f49a49bfc5aecf035c78f878f2d4372600771235ca1f7c659ac7",
      "src/keyword_rag.py": "c03faa3721c3269881b23e32ee7762f69e1a40ae575051b43840b5bf4f1bef06"
     },
     "source": "registry/keyword-rag/versions/1.1.0",
     "tags": [
      "rag",
      "retrieval",
      "search"
     ],
     "version": "1.1.0"
    },
    {
     "category": "retrieval",
     "dependencies": [],
     "description": "Lightweight keyword retrieval over documents, returning ranked relevant context.",
     "files": [
      "README.md",
      "src/keyword_rag.py"
     ],
     "license": "MIT",
     "name": "keyword-rag",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "9afdfe1e5926495b30a629c3bd3d3987eb33c0a7d68d5d1a664f88fbb93426a4",
      "src/keyword_rag.py": "61cf8eee5f497875a76e2f134a87fcccc10f6757fa2a2f1f280aec64139002fd"
     },
     "source": "registry/keyword-rag/versions/1.0.0",
     "tags": [
      "rag",
      "retrieval",
      "search"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "prompt",
   "description": "Build reusable prompts from system, instruction, context and input sections with safe placeholder filling.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "prompt-builder",
   "runtime": "python",
   "tags": [
    "prompt",
    "template",
    "llm"
   ],
   "versions": [
    {
     "category": "prompt",
     "dependencies": [],
     "description": "Build reusable prompts from system, instruction, context and input sections with safe placeholder filling.",
     "files": [
      "README.md",
      "src/prompt_builder.py"
     ],
     "license": "MIT",
     "name": "prompt-builder",
     "release_notes": "Single-pass placeholder substitution, optional strict mode, render() for mapping-based variables, input type checks, and placeholder filling in the system message. Backward compatible with 1.0.0.",
     "runtime": "python",
     "sha256": {
      "README.md": "30ad807c349695b98d9ac193dfc79aa4d46f18e0c088eecc27544b1454cf6c9b",
      "src/prompt_builder.py": "5e2aa82848566889cd9c47c41a084aee42fe358be0f3989090c9699ae8d43a5e"
     },
     "source": "registry/prompt-builder/versions/1.1.0",
     "tags": [
      "prompt",
      "template",
      "llm"
     ],
     "version": "1.1.0"
    },
    {
     "category": "prompt",
     "dependencies": [],
     "description": "Build reusable prompts from system, instruction, context and input sections.",
     "files": [
      "README.md",
      "src/prompt_builder.py"
     ],
     "license": "MIT",
     "name": "prompt-builder",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "fab09b78d8040a8054c9506e54867064ae1c97295484ab5ff9da7f6368a0a002",
      "src/prompt_builder.py": "0710fdb866f5f339f6d1a8e03a64bd157344956e7918701438c44847679f08eb"
     },
     "source": "registry/prompt-builder/versions/1.0.0",
     "tags": [
      "prompt",
      "template",
      "llm"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "retrieval",
   "description": "Deterministic query normalization, stopword removal and keyword variants for retrieval workflows.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "query-rewriter",
   "runtime": "python",
   "tags": [
    "query",
    "rag",
    "text"
   ],
   "versions": [
    {
     "category": "retrieval",
     "dependencies": [],
     "description": "Deterministic query normalization, stopword removal and keyword variants for retrieval workflows.",
     "files": [
      "README.md",
      "src/query_rewriter.py"
     ],
     "license": "MIT",
     "name": "query-rewriter",
     "release_notes": "First working release. 1.0.0 imported a module it did not ship and was withdrawn. Provides normalize_query, rewrite_query, extract_keywords and query_variants.",
     "runtime": "python",
     "sha256": {
      "README.md": "a16419fa2a16973d7bfce0362d9aefd92461c4855ff33289a32f89bf65ae5de2",
      "src/query_rewriter.py": "5c7b61aef861d50a44717fca279271a5a26a4e06b1ba6f16bd7120f40264e56d"
     },
     "source": "registry/query-rewriter/versions/1.1.0",
     "tags": [
      "query",
      "rag",
      "text"
     ],
     "version": "1.1.0"
    }
   ]
  },
  {
   "category": "workflow",
   "description": "Compose a retriever and a context builder into one validated workflow that returns bounded AI-ready context.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "retrieval-pipeline",
   "runtime": "python",
   "tags": [
    "rag",
    "pipeline",
    "retrieval"
   ],
   "versions": [
    {
     "category": "workflow",
     "dependencies": [
      "context-builder@1.1.0 (optional)",
      "keyword-rag@1.1.0 (optional)",
      "query-rewriter@1.1.0 (optional)"
     ],
     "description": "Compose a retriever and a context builder into one validated workflow that returns bounded AI-ready context.",
     "files": [
      "README.md",
      "src/retrieval_pipeline.py"
     ],
     "license": "MIT",
     "name": "retrieval-pipeline",
     "release_notes": "First importable release. 1.0.0 shipped a source file with a stray markdown fence and was withdrawn. Adds RetrievalPipeline, RetrievalResult, optional query rewriting and on_empty handling; keeps build_retrieval_context.",
     "runtime": "python",
     "sha256": {
      "README.md": "5a8336c91d07e7410a55b4b65cad06fc5cd36fff4a8db89055c661b4e4b894a7",
      "src/retrieval_pipeline.py": "95ee4f37cf315192a2b6bffb373549974b4d630dd7555017706c6fec60d45c3a"
     },
     "source": "registry/retrieval-pipeline/versions/1.1.0",
     "tags": [
      "rag",
      "pipeline",
      "retrieval"
     ],
     "version": "1.1.0"
    }
   ]
  },
  {
   "category": "text",
   "description": "Split text into overlapping chunks by characters or words, with optional source offsets.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "text-chunker",
   "runtime": "python",
   "tags": [
    "chunking",
    "text",
    "rag"
   ],
   "versions": [
    {
     "category": "text",
     "dependencies": [],
     "description": "Split text into overlapping chunks by characters or words, with optional source offsets.",
     "files": [
      "README.md",
      "src/text_chunker.py"
     ],
     "license": "MIT",
     "name": "text-chunker",
     "release_notes": "Adds iter_chunks, word-mode offsets in chunk_with_offsets, and strict argument validation. Chunk output for existing calls is unchanged from 1.0.0.",
     "runtime": "python",
     "sha256": {
      "README.md": "8e5a0da10f3a2555bfacbe68c1f4604742f184196823f7f98370d8010ffbbc1c",
      "src/text_chunker.py": "84e179ee334a380688d03861b2f744f60c54c3dc8ebb8838781c5f1ce7e9e613"
     },
     "source": "registry/text-chunker/versions/1.1.0",
     "tags": [
      "chunking",
      "text",
      "rag"
     ],
     "version": "1.1.0"
    },
    {
     "category": "text",
     "dependencies": [],
     "description": "Split text into configurable chunks with overlap, by characters or words.",
     "files": [
      "README.md",
      "src/text_chunker.py"
     ],
     "license": "MIT",
     "name": "text-chunker",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "5475f2f4faab327cba2537ebd8e1426281e9b430786ee95f8651a5f9191b8708",
      "src/text_chunker.py": "0cf9f7cb02d0260144a965dca29149108acaad00ccbf3e2407027183bb765b81"
     },
     "source": "registry/text-chunker/versions/1.0.0",
     "tags": [
      "chunking",
      "text",
      "rag"
     ],
     "version": "1.0.0"
    }
   ]
  },
  {
   "category": "tool",
   "description": "Register Python functions as named tools and execute calls safely, returning errors as data.",
   "latest_version": "1.1.0",
   "license": "MIT",
   "name": "tool-router",
   "runtime": "python",
   "tags": [
    "tools",
    "router",
    "agent"
   ],
   "versions": [
    {
     "category": "tool",
     "dependencies": [],
     "description": "Register Python functions as named tools and execute calls safely, returning errors as data.",
     "files": [
      "README.md",
      "src/tool_router.py"
     ],
     "license": "MIT",
     "name": "tool-router",
     "release_notes": "Adds parameter specs, unregister, introspection helpers, error_type on failures, tool-name validation and a route() path that is safe for arguments named 'name'. Existing result fields are unchanged.",
     "runtime": "python",
     "sha256": {
      "README.md": "6c92ce8dbbebd02c7288f3fa4637dda47eaa98702d7256765c00339409fffd42",
      "src/tool_router.py": "ca88dc49667c5f7ae5f2bd968c42daca1f16ce0fde869f934609ad6e0d11b292"
     },
     "source": "registry/tool-router/versions/1.1.0",
     "tags": [
      "tools",
      "router",
      "agent"
     ],
     "version": "1.1.0"
    },
    {
     "category": "tool",
     "dependencies": [],
     "description": "Register simple tools and route calls by name, safely rejecting unknown tools.",
     "files": [
      "README.md",
      "src/tool_router.py"
     ],
     "license": "MIT",
     "name": "tool-router",
     "release_notes": "Initial versioned release in AIRegistry v2.1.",
     "runtime": "python",
     "sha256": {
      "README.md": "59f9ae4f88836e1aeeb697f84f99fa31f717d8956dcb71930dcd35c283a404ce",
      "src/tool_router.py": "f0760772f6d7db93332f01d61f0973ebe97fff8fdc0a3bbee33d40c087259151"
     },
     "source": "registry/tool-router/versions/1.0.0",
     "tags": [
      "tools",
      "router",
      "agent"
     ],
     "version": "1.0.0"
    }
   ]
  }
 ],
 "version": 2
}
