@nhtio/adk 1.20260607.2 → 1.20260609.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +230 -0
- package/batteries/embeddings/openai/adapter.cjs +1 -1
- package/batteries/embeddings/openai/adapter.mjs +1 -1
- package/batteries/embeddings/openai/exceptions.cjs +1 -1
- package/batteries/embeddings/openai/exceptions.mjs +1 -1
- package/batteries/embeddings/openai/types.d.ts +7 -0
- package/batteries/embeddings/webllm/adapter.cjs +1 -1
- package/batteries/embeddings/webllm/adapter.mjs +1 -1
- package/batteries/embeddings/webllm/exceptions.cjs +1 -1
- package/batteries/embeddings/webllm/exceptions.mjs +1 -1
- package/batteries/llm/chat_common/helpers.d.ts +165 -0
- package/batteries/llm/chat_common/types.d.ts +309 -0
- package/batteries/llm/index.d.ts +5 -0
- package/batteries/llm/ollama/adapter.cjs +736 -0
- package/batteries/llm/ollama/adapter.cjs.map +1 -0
- package/batteries/llm/ollama/adapter.d.ts +64 -0
- package/batteries/llm/ollama/adapter.mjs +734 -0
- package/batteries/llm/ollama/adapter.mjs.map +1 -0
- package/batteries/llm/ollama/exceptions.cjs +105 -0
- package/batteries/llm/ollama/exceptions.cjs.map +1 -0
- package/batteries/llm/ollama/exceptions.d.ts +112 -0
- package/batteries/llm/ollama/exceptions.mjs +96 -0
- package/batteries/llm/ollama/exceptions.mjs.map +1 -0
- package/batteries/llm/ollama/helpers.cjs +487 -0
- package/batteries/llm/ollama/helpers.cjs.map +1 -0
- package/batteries/llm/ollama/helpers.d.ts +158 -0
- package/batteries/llm/ollama/helpers.mjs +450 -0
- package/batteries/llm/ollama/helpers.mjs.map +1 -0
- package/batteries/llm/ollama/index.d.ts +29 -0
- package/batteries/llm/ollama/types.cjs +2 -0
- package/batteries/llm/ollama/types.d.ts +334 -0
- package/batteries/llm/ollama/types.mjs +0 -0
- package/batteries/llm/ollama/validation.cjs +130 -0
- package/batteries/llm/ollama/validation.cjs.map +1 -0
- package/batteries/llm/ollama/validation.d.ts +31 -0
- package/batteries/llm/ollama/validation.mjs +127 -0
- package/batteries/llm/ollama/validation.mjs.map +1 -0
- package/batteries/llm/ollama.cjs +54 -0
- package/batteries/llm/ollama.mjs +6 -0
- package/batteries/llm/openai_chat_completions/adapter.cjs +36 -19
- package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/adapter.mjs +23 -6
- package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/exceptions.cjs +1 -1
- package/batteries/llm/openai_chat_completions/exceptions.mjs +1 -1
- package/batteries/llm/openai_chat_completions/helpers.cjs +80 -320
- package/batteries/llm/openai_chat_completions/helpers.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/helpers.d.ts +68 -144
- package/batteries/llm/openai_chat_completions/helpers.mjs +40 -280
- package/batteries/llm/openai_chat_completions/helpers.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/types.d.ts +273 -181
- package/batteries/llm/openai_chat_completions/validation.cjs +2 -2
- package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/validation.mjs +2 -2
- package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions.cjs +29 -28
- package/batteries/llm/openai_chat_completions.mjs +2 -1
- package/batteries/llm/webllm_chat_completions/adapter.cjs +38 -19
- package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.d.ts +18 -0
- package/batteries/llm/webllm_chat_completions/adapter.mjs +25 -6
- package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/exceptions.cjs +1 -1
- package/batteries/llm/webllm_chat_completions/exceptions.mjs +1 -1
- package/batteries/llm/webllm_chat_completions/helpers.cjs +29 -28
- package/batteries/llm/webllm_chat_completions/helpers.mjs +2 -1
- package/batteries/llm/webllm_chat_completions/types.d.ts +21 -0
- package/batteries/llm/webllm_chat_completions/validation.cjs +13 -1
- package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.d.ts +12 -0
- package/batteries/llm/webllm_chat_completions/validation.mjs +13 -1
- package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions.cjs +29 -28
- package/batteries/llm/webllm_chat_completions.mjs +2 -1
- package/batteries/llm.cjs +44 -28
- package/batteries/llm.mjs +9 -4
- package/batteries/storage/flydrive.cjs +1 -1
- package/batteries/storage/flydrive.mjs +1 -1
- package/batteries/storage/in_memory/index.d.ts +1 -1
- package/batteries/storage/in_memory.cjs +2 -2
- package/batteries/storage/in_memory.cjs.map +1 -1
- package/batteries/storage/in_memory.mjs +2 -2
- package/batteries/storage/in_memory.mjs.map +1 -1
- package/batteries/storage/opfs/index.d.ts +19 -0
- package/batteries/storage/opfs.cjs +1 -1
- package/batteries/storage/opfs.cjs.map +1 -1
- package/batteries/storage/opfs.mjs +1 -1
- package/batteries/storage/opfs.mjs.map +1 -1
- package/batteries/tools/_shared/index.d.ts +121 -0
- package/batteries/tools/_shared.cjs +157 -0
- package/batteries/tools/_shared.cjs.map +1 -0
- package/batteries/tools/_shared.mjs +149 -0
- package/batteries/tools/_shared.mjs.map +1 -0
- package/batteries/tools/color.cjs +3 -2
- package/batteries/tools/color.cjs.map +1 -1
- package/batteries/tools/color.mjs +3 -2
- package/batteries/tools/color.mjs.map +1 -1
- package/batteries/tools/comparison.cjs +4 -3
- package/batteries/tools/comparison.cjs.map +1 -1
- package/batteries/tools/comparison.mjs +4 -3
- package/batteries/tools/comparison.mjs.map +1 -1
- package/batteries/tools/data_structure.cjs +30 -10
- package/batteries/tools/data_structure.cjs.map +1 -1
- package/batteries/tools/data_structure.mjs +30 -10
- package/batteries/tools/data_structure.mjs.map +1 -1
- package/batteries/tools/datetime_extended.cjs +5 -10
- package/batteries/tools/datetime_extended.cjs.map +1 -1
- package/batteries/tools/datetime_extended.mjs +5 -10
- package/batteries/tools/datetime_extended.mjs.map +1 -1
- package/batteries/tools/datetime_math.cjs +2 -2
- package/batteries/tools/datetime_math.mjs +2 -2
- package/batteries/tools/encoding.cjs +13 -4
- package/batteries/tools/encoding.cjs.map +1 -1
- package/batteries/tools/encoding.mjs +13 -4
- package/batteries/tools/encoding.mjs.map +1 -1
- package/batteries/tools/formatting.cjs +4 -4
- package/batteries/tools/formatting.cjs.map +1 -1
- package/batteries/tools/formatting.mjs +4 -4
- package/batteries/tools/formatting.mjs.map +1 -1
- package/batteries/tools/geo_basics.cjs +2 -2
- package/batteries/tools/geo_basics.mjs +2 -2
- package/batteries/tools/index.d.ts +3 -0
- package/batteries/tools/math.cjs +10 -8
- package/batteries/tools/math.cjs.map +1 -1
- package/batteries/tools/math.mjs +10 -8
- package/batteries/tools/math.mjs.map +1 -1
- package/batteries/tools/memory.cjs +5 -5
- package/batteries/tools/memory.mjs +5 -5
- package/batteries/tools/parsing.cjs +9 -5
- package/batteries/tools/parsing.cjs.map +1 -1
- package/batteries/tools/parsing.mjs +9 -5
- package/batteries/tools/parsing.mjs.map +1 -1
- package/batteries/tools/retrievables.cjs +4 -4
- package/batteries/tools/retrievables.mjs +4 -4
- package/batteries/tools/scrapper/exceptions.d.ts +21 -0
- package/batteries/tools/scrapper/index.d.ts +172 -0
- package/batteries/tools/scrapper/shared.d.ts +139 -0
- package/batteries/tools/scrapper.cjs +8 -0
- package/batteries/tools/scrapper.mjs +2 -0
- package/batteries/tools/searxng/exceptions.d.ts +21 -0
- package/batteries/tools/searxng/index.d.ts +177 -0
- package/batteries/tools/searxng.cjs +6 -0
- package/batteries/tools/searxng.mjs +2 -0
- package/batteries/tools/standing_instructions.cjs +4 -4
- package/batteries/tools/standing_instructions.mjs +4 -4
- package/batteries/tools/statistics.cjs +54 -43
- package/batteries/tools/statistics.cjs.map +1 -1
- package/batteries/tools/statistics.mjs +54 -43
- package/batteries/tools/statistics.mjs.map +1 -1
- package/batteries/tools/string_processing.cjs +5 -5
- package/batteries/tools/string_processing.cjs.map +1 -1
- package/batteries/tools/string_processing.mjs +5 -5
- package/batteries/tools/string_processing.mjs.map +1 -1
- package/batteries/tools/structured_data.cjs +8 -13
- package/batteries/tools/structured_data.cjs.map +1 -1
- package/batteries/tools/structured_data.mjs +8 -13
- package/batteries/tools/structured_data.mjs.map +1 -1
- package/batteries/tools/text_analysis.cjs +3 -3
- package/batteries/tools/text_analysis.mjs +3 -3
- package/batteries/tools/text_comparison.cjs +2 -2
- package/batteries/tools/text_comparison.mjs +2 -2
- package/batteries/tools/time.cjs +2 -2
- package/batteries/tools/time.mjs +2 -2
- package/batteries/tools/unit_conversion.cjs +10 -8
- package/batteries/tools/unit_conversion.cjs.map +1 -1
- package/batteries/tools/unit_conversion.mjs +10 -8
- package/batteries/tools/unit_conversion.mjs.map +1 -1
- package/batteries/tools/web_retrieval/index.d.ts +186 -0
- package/batteries/tools/web_retrieval.cjs +206 -0
- package/batteries/tools/web_retrieval.cjs.map +1 -0
- package/batteries/tools/web_retrieval.mjs +201 -0
- package/batteries/tools/web_retrieval.mjs.map +1 -0
- package/batteries/tools.cjs +15 -0
- package/batteries/tools.mjs +4 -1
- package/batteries/vector/arangodb/index.d.ts +2 -0
- package/batteries/vector/arangodb.cjs +2 -1
- package/batteries/vector/arangodb.cjs.map +1 -1
- package/batteries/vector/arangodb.mjs +2 -1
- package/batteries/vector/arangodb.mjs.map +1 -1
- package/batteries/vector/builder.cjs +31 -0
- package/batteries/vector/builder.cjs.map +1 -1
- package/batteries/vector/builder.d.ts +58 -0
- package/batteries/vector/builder.mjs +31 -0
- package/batteries/vector/builder.mjs.map +1 -1
- package/batteries/vector/chroma/index.d.ts +4 -0
- package/batteries/vector/chroma.cjs +3 -0
- package/batteries/vector/chroma.cjs.map +1 -1
- package/batteries/vector/chroma.mjs +3 -0
- package/batteries/vector/chroma.mjs.map +1 -1
- package/batteries/vector/clickhouse/index.d.ts +2 -0
- package/batteries/vector/clickhouse.cjs +2 -1
- package/batteries/vector/clickhouse.cjs.map +1 -1
- package/batteries/vector/clickhouse.mjs +2 -1
- package/batteries/vector/clickhouse.mjs.map +1 -1
- package/batteries/vector/cloudflare/index.d.ts +2 -0
- package/batteries/vector/cloudflare.cjs +2 -1
- package/batteries/vector/cloudflare.cjs.map +1 -1
- package/batteries/vector/cloudflare.mjs +2 -1
- package/batteries/vector/cloudflare.mjs.map +1 -1
- package/batteries/vector/conformance/index.d.ts +22 -0
- package/batteries/vector/conformance.cjs +22 -0
- package/batteries/vector/conformance.cjs.map +1 -1
- package/batteries/vector/conformance.mjs +22 -0
- package/batteries/vector/conformance.mjs.map +1 -1
- package/batteries/vector/contract.cjs +22 -0
- package/batteries/vector/contract.cjs.map +1 -1
- package/batteries/vector/contract.d.ts +51 -0
- package/batteries/vector/contract.mjs +22 -0
- package/batteries/vector/contract.mjs.map +1 -1
- package/batteries/vector/couchbase/index.d.ts +2 -0
- package/batteries/vector/couchbase.cjs +2 -1
- package/batteries/vector/couchbase.cjs.map +1 -1
- package/batteries/vector/couchbase.mjs +2 -1
- package/batteries/vector/couchbase.mjs.map +1 -1
- package/batteries/vector/duckdb/index.d.ts +2 -0
- package/batteries/vector/duckdb.cjs +2 -1
- package/batteries/vector/duckdb.cjs.map +1 -1
- package/batteries/vector/duckdb.mjs +2 -1
- package/batteries/vector/duckdb.mjs.map +1 -1
- package/batteries/vector/elasticsearch/index.d.ts +2 -0
- package/batteries/vector/elasticsearch.cjs +2 -1
- package/batteries/vector/elasticsearch.cjs.map +1 -1
- package/batteries/vector/elasticsearch.mjs +2 -1
- package/batteries/vector/elasticsearch.mjs.map +1 -1
- package/batteries/vector/exceptions.cjs +1 -1
- package/batteries/vector/exceptions.mjs +1 -1
- package/batteries/vector/factory.cjs +6 -0
- package/batteries/vector/factory.cjs.map +1 -1
- package/batteries/vector/factory.d.ts +14 -0
- package/batteries/vector/factory.mjs +6 -0
- package/batteries/vector/factory.mjs.map +1 -1
- package/batteries/vector/filters.cjs +22 -1
- package/batteries/vector/filters.cjs.map +1 -1
- package/batteries/vector/filters.d.ts +38 -0
- package/batteries/vector/filters.mjs +22 -1
- package/batteries/vector/filters.mjs.map +1 -1
- package/batteries/vector/helpers.cjs +13 -0
- package/batteries/vector/helpers.cjs.map +1 -1
- package/batteries/vector/helpers.d.ts +14 -0
- package/batteries/vector/helpers.mjs +13 -0
- package/batteries/vector/helpers.mjs.map +1 -1
- package/batteries/vector/hnswlib/index.d.ts +2 -0
- package/batteries/vector/hnswlib.cjs +2 -1
- package/batteries/vector/hnswlib.cjs.map +1 -1
- package/batteries/vector/hnswlib.mjs +2 -1
- package/batteries/vector/hnswlib.mjs.map +1 -1
- package/batteries/vector/in_memory/index.d.ts +1 -0
- package/batteries/vector/in_memory.cjs +1 -0
- package/batteries/vector/in_memory.cjs.map +1 -1
- package/batteries/vector/in_memory.mjs +1 -0
- package/batteries/vector/in_memory.mjs.map +1 -1
- package/batteries/vector/lancedb/index.d.ts +2 -0
- package/batteries/vector/lancedb.cjs +2 -1
- package/batteries/vector/lancedb.cjs.map +1 -1
- package/batteries/vector/lancedb.mjs +2 -1
- package/batteries/vector/lancedb.mjs.map +1 -1
- package/batteries/vector/mariadb/index.d.ts +2 -0
- package/batteries/vector/mariadb.cjs +2 -1
- package/batteries/vector/mariadb.cjs.map +1 -1
- package/batteries/vector/mariadb.mjs +2 -1
- package/batteries/vector/mariadb.mjs.map +1 -1
- package/batteries/vector/meilisearch/index.d.ts +2 -0
- package/batteries/vector/meilisearch.cjs +2 -1
- package/batteries/vector/meilisearch.cjs.map +1 -1
- package/batteries/vector/meilisearch.mjs +2 -1
- package/batteries/vector/meilisearch.mjs.map +1 -1
- package/batteries/vector/migrate.cjs +18 -1
- package/batteries/vector/migrate.cjs.map +1 -1
- package/batteries/vector/migrate.d.ts +31 -0
- package/batteries/vector/migrate.mjs +18 -1
- package/batteries/vector/migrate.mjs.map +1 -1
- package/batteries/vector/milvus/index.d.ts +5 -0
- package/batteries/vector/milvus.cjs +4 -0
- package/batteries/vector/milvus.cjs.map +1 -1
- package/batteries/vector/milvus.mjs +4 -0
- package/batteries/vector/milvus.mjs.map +1 -1
- package/batteries/vector/mongodb/index.d.ts +2 -0
- package/batteries/vector/mongodb.cjs +2 -1
- package/batteries/vector/mongodb.cjs.map +1 -1
- package/batteries/vector/mongodb.mjs +2 -1
- package/batteries/vector/mongodb.mjs.map +1 -1
- package/batteries/vector/neo4j/index.d.ts +2 -0
- package/batteries/vector/neo4j.cjs +2 -1
- package/batteries/vector/neo4j.cjs.map +1 -1
- package/batteries/vector/neo4j.mjs +2 -1
- package/batteries/vector/neo4j.mjs.map +1 -1
- package/batteries/vector/opensearch/index.d.ts +2 -0
- package/batteries/vector/opensearch.cjs +2 -1
- package/batteries/vector/opensearch.cjs.map +1 -1
- package/batteries/vector/opensearch.mjs +2 -1
- package/batteries/vector/opensearch.mjs.map +1 -1
- package/batteries/vector/oracle23ai/index.d.ts +2 -0
- package/batteries/vector/oracle23ai.cjs +2 -1
- package/batteries/vector/oracle23ai.cjs.map +1 -1
- package/batteries/vector/oracle23ai.mjs +2 -1
- package/batteries/vector/oracle23ai.mjs.map +1 -1
- package/batteries/vector/orama/index.d.ts +1 -0
- package/batteries/vector/orama.cjs +1 -0
- package/batteries/vector/orama.cjs.map +1 -1
- package/batteries/vector/orama.mjs +1 -0
- package/batteries/vector/orama.mjs.map +1 -1
- package/batteries/vector/pgvector/index.d.ts +9 -2
- package/batteries/vector/pgvector.cjs +4 -0
- package/batteries/vector/pgvector.cjs.map +1 -1
- package/batteries/vector/pgvector.mjs +4 -0
- package/batteries/vector/pgvector.mjs.map +1 -1
- package/batteries/vector/pinecone/index.d.ts +5 -0
- package/batteries/vector/pinecone.cjs +3 -1
- package/batteries/vector/pinecone.cjs.map +1 -1
- package/batteries/vector/pinecone.mjs +3 -1
- package/batteries/vector/pinecone.mjs.map +1 -1
- package/batteries/vector/plan.d.ts +27 -0
- package/batteries/vector/qdrant/index.d.ts +5 -0
- package/batteries/vector/qdrant.cjs +4 -0
- package/batteries/vector/qdrant.cjs.map +1 -1
- package/batteries/vector/qdrant.mjs +4 -0
- package/batteries/vector/qdrant.mjs.map +1 -1
- package/batteries/vector/redis/index.d.ts +2 -0
- package/batteries/vector/redis.cjs +2 -1
- package/batteries/vector/redis.cjs.map +1 -1
- package/batteries/vector/redis.mjs +2 -1
- package/batteries/vector/redis.mjs.map +1 -1
- package/batteries/vector/retrievable.cjs +9 -1
- package/batteries/vector/retrievable.cjs.map +1 -1
- package/batteries/vector/retrievable.mjs +9 -1
- package/batteries/vector/retrievable.mjs.map +1 -1
- package/batteries/vector/retrievable_glue.d.ts +21 -0
- package/batteries/vector/s3vectors/index.d.ts +2 -0
- package/batteries/vector/s3vectors.cjs +2 -1
- package/batteries/vector/s3vectors.cjs.map +1 -1
- package/batteries/vector/s3vectors.mjs +2 -1
- package/batteries/vector/s3vectors.mjs.map +1 -1
- package/batteries/vector/schema.cjs +28 -0
- package/batteries/vector/schema.cjs.map +1 -1
- package/batteries/vector/schema.d.ts +39 -0
- package/batteries/vector/schema.mjs +28 -0
- package/batteries/vector/schema.mjs.map +1 -1
- package/batteries/vector/solr/index.d.ts +2 -0
- package/batteries/vector/solr.cjs +2 -1
- package/batteries/vector/solr.cjs.map +1 -1
- package/batteries/vector/solr.mjs +2 -1
- package/batteries/vector/solr.mjs.map +1 -1
- package/batteries/vector/sqlite_vec/index.d.ts +6 -3
- package/batteries/vector/sqlite_vec.cjs +2 -0
- package/batteries/vector/sqlite_vec.cjs.map +1 -1
- package/batteries/vector/sqlite_vec.mjs +2 -0
- package/batteries/vector/sqlite_vec.mjs.map +1 -1
- package/batteries/vector/surrealdb/index.d.ts +2 -0
- package/batteries/vector/surrealdb.cjs +2 -1
- package/batteries/vector/surrealdb.cjs.map +1 -1
- package/batteries/vector/surrealdb.mjs +2 -1
- package/batteries/vector/surrealdb.mjs.map +1 -1
- package/batteries/vector/types.d.ts +27 -0
- package/batteries/vector/typesense/index.d.ts +2 -0
- package/batteries/vector/typesense.cjs +2 -1
- package/batteries/vector/typesense.cjs.map +1 -1
- package/batteries/vector/typesense.mjs +2 -1
- package/batteries/vector/typesense.mjs.map +1 -1
- package/batteries/vector/validation.cjs +14 -0
- package/batteries/vector/validation.cjs.map +1 -1
- package/batteries/vector/validation.d.ts +14 -0
- package/batteries/vector/validation.mjs +14 -0
- package/batteries/vector/validation.mjs.map +1 -1
- package/batteries/vector/vector_store_constructor.cjs +1 -1
- package/batteries/vector/vector_store_constructor.cjs.map +1 -1
- package/batteries/vector/vector_store_constructor.d.ts +1 -1
- package/batteries/vector/vector_store_constructor.mjs +1 -1
- package/batteries/vector/vector_store_constructor.mjs.map +1 -1
- package/batteries/vector/vespa/index.d.ts +2 -0
- package/batteries/vector/vespa.cjs +2 -1
- package/batteries/vector/vespa.cjs.map +1 -1
- package/batteries/vector/vespa.mjs +2 -1
- package/batteries/vector/vespa.mjs.map +1 -1
- package/batteries/vector/weaviate/index.d.ts +2 -0
- package/batteries/vector/weaviate.cjs +2 -1
- package/batteries/vector/weaviate.cjs.map +1 -1
- package/batteries/vector/weaviate.mjs +2 -1
- package/batteries/vector/weaviate.mjs.map +1 -1
- package/batteries.cjs +58 -28
- package/batteries.mjs +12 -5
- package/{common-BT0nfCi9.mjs → common-DYDUi99O.mjs} +9 -9
- package/common-DYDUi99O.mjs.map +1 -0
- package/{common-Cj8TaQ9U.js → common-DZl3ADJs.js} +9 -9
- package/common-DZl3ADJs.js.map +1 -0
- package/common.cjs +7 -7
- package/common.mjs +7 -7
- package/{dispatch_runner-DPcS7Y_M.mjs → dispatch_runner--ZhdDWRZ.mjs} +27 -5
- package/{dispatch_runner-DPcS7Y_M.mjs.map → dispatch_runner--ZhdDWRZ.mjs.map} +1 -1
- package/{dispatch_runner-BHBNupqp.js → dispatch_runner-nHDKkxye.js} +27 -5
- package/{dispatch_runner-BHBNupqp.js.map → dispatch_runner-nHDKkxye.js.map} +1 -1
- package/dispatch_runner.cjs +1 -1
- package/dispatch_runner.d.ts +1 -1
- package/dispatch_runner.mjs +1 -1
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.cjs +1 -0
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.cjs.map +1 -1
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.d.ts +1 -0
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.mjs +1 -0
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.mjs.map +1 -1
- package/eslint/rules/no_model_in_tool_handler.cjs +1 -0
- package/eslint/rules/no_model_in_tool_handler.cjs.map +1 -1
- package/eslint/rules/no_model_in_tool_handler.d.ts +1 -0
- package/eslint/rules/no_model_in_tool_handler.mjs +1 -0
- package/eslint/rules/no_model_in_tool_handler.mjs.map +1 -1
- package/eslint/rules/require_validator_any_required.cjs +1 -0
- package/eslint/rules/require_validator_any_required.cjs.map +1 -1
- package/eslint/rules/require_validator_any_required.d.ts +1 -0
- package/eslint/rules/require_validator_any_required.mjs +1 -0
- package/eslint/rules/require_validator_any_required.mjs.map +1 -1
- package/eslint/rules/thought_payload_requires_replay_tag.cjs +1 -0
- package/eslint/rules/thought_payload_requires_replay_tag.cjs.map +1 -1
- package/eslint/rules/thought_payload_requires_replay_tag.d.ts +1 -0
- package/eslint/rules/thought_payload_requires_replay_tag.mjs +1 -0
- package/eslint/rules/thought_payload_requires_replay_tag.mjs.map +1 -1
- package/eslint/rules/token_encoding_requires_context_window.cjs +1 -0
- package/eslint/rules/token_encoding_requires_context_window.cjs.map +1 -1
- package/eslint/rules/token_encoding_requires_context_window.d.ts +1 -0
- package/eslint/rules/token_encoding_requires_context_window.mjs +1 -0
- package/eslint/rules/token_encoding_requires_context_window.mjs.map +1 -1
- package/eslint/rules.cjs +1 -1
- package/eslint/rules.mjs +1 -1
- package/eslint.cjs +2 -2
- package/eslint.mjs +2 -2
- package/{exceptions-BeWH2FwP.mjs → exceptions-BDhN0Xzr.mjs} +3 -2
- package/exceptions-BDhN0Xzr.mjs.map +1 -0
- package/{exceptions-CitH5wZI.js → exceptions-BRXrUKiW.js} +3 -2
- package/exceptions-BRXrUKiW.js.map +1 -0
- package/exceptions.cjs +2 -2
- package/exceptions.mjs +2 -2
- package/factories.cjs +1 -1
- package/factories.mjs +1 -1
- package/forge.cjs +4 -4
- package/forge.d.ts +1 -1
- package/forge.mjs +4 -4
- package/guards.cjs +9 -9
- package/guards.mjs +9 -9
- package/helpers-DSTFxTiC.js +497 -0
- package/helpers-DSTFxTiC.js.map +1 -0
- package/helpers-xhrQbMAG.mjs +306 -0
- package/helpers-xhrQbMAG.mjs.map +1 -0
- package/index.cjs +12 -12
- package/index.mjs +12 -12
- package/lib/classes/base_exception.d.ts +1 -0
- package/lib/classes/media.d.ts +10 -0
- package/lib/classes/retrievable.d.ts +1 -1
- package/lib/classes/spooled_json_artifact.d.ts +1 -1
- package/lib/classes/spooled_markdown_artifact.d.ts +1 -0
- package/lib/classes/tokenizable.d.ts +3 -0
- package/lib/classes/tool.d.ts +8 -0
- package/lib/classes/turn_gate.d.ts +6 -0
- package/lib/dispatch_runner.d.ts +4 -32
- package/lib/helpers/bignum.cjs +82 -0
- package/lib/helpers/bignum.cjs.map +1 -0
- package/lib/helpers/bignum.d.ts +52 -0
- package/lib/helpers/bignum.mjs +74 -0
- package/lib/helpers/bignum.mjs.map +1 -0
- package/lib/turn_runner.d.ts +1 -1
- package/lib/types/dispatch_runner.d.ts +83 -0
- package/lib/utils/exceptions.d.ts +1 -1
- package/lib/utils/retry.cjs.map +1 -1
- package/lib/utils/retry.d.ts +2 -0
- package/lib/utils/retry.mjs.map +1 -1
- package/mcp/adk-docs-corpus.json +1 -1
- package/package.json +259 -204
- package/{runtime-j92CNi5z.mjs → runtime-Bz5zA8wc.mjs} +2 -2
- package/{runtime-j92CNi5z.mjs.map → runtime-Bz5zA8wc.mjs.map} +1 -1
- package/{runtime-MFFcJrRv.js → runtime-DslE1aBw.js} +2 -2
- package/{runtime-MFFcJrRv.js.map → runtime-DslE1aBw.js.map} +1 -1
- package/scrapper-BHM1mCde.mjs +432 -0
- package/scrapper-BHM1mCde.mjs.map +1 -0
- package/scrapper-BeweWurk.js +462 -0
- package/scrapper-BeweWurk.js.map +1 -0
- package/searxng-BJFulNcK.mjs +247 -0
- package/searxng-BJFulNcK.mjs.map +1 -0
- package/searxng-B_D--V5q.js +265 -0
- package/searxng-B_D--V5q.js.map +1 -0
- package/skills/adk-assembly/SKILL.md +2 -2
- package/{spooled_artifact-CHoZgWwI.mjs → spooled_artifact-7eePq7JA.mjs} +5 -5
- package/{spooled_artifact-CHoZgWwI.mjs.map → spooled_artifact-7eePq7JA.mjs.map} +1 -1
- package/{spooled_artifact-BTq6Nzfy.js → spooled_artifact-DX8LLyUX.js} +5 -5
- package/{spooled_artifact-BTq6Nzfy.js.map → spooled_artifact-DX8LLyUX.js.map} +1 -1
- package/spooled_artifact.cjs +2 -2
- package/spooled_artifact.mjs +2 -2
- package/{spooled_markdown_artifact-CALSDxIx.js → spooled_markdown_artifact-ClX72lek.js} +4 -4
- package/spooled_markdown_artifact-ClX72lek.js.map +1 -0
- package/{spooled_markdown_artifact-Ci5UL7l4.mjs → spooled_markdown_artifact-wkrBF3oX.mjs} +4 -4
- package/spooled_markdown_artifact-wkrBF3oX.mjs.map +1 -0
- package/{thought-D34QQZZ9.mjs → thought-B_vxAiKU.mjs} +5 -5
- package/{thought-D34QQZZ9.mjs.map → thought-B_vxAiKU.mjs.map} +1 -1
- package/{thought-BbwhJ1wb.js → thought-DLwpF7MI.js} +5 -5
- package/{thought-BbwhJ1wb.js.map → thought-DLwpF7MI.js.map} +1 -1
- package/{tool-CVyZkFC7.js → tool-D5WGVIcI.js} +4 -4
- package/{tool-CVyZkFC7.js.map → tool-D5WGVIcI.js.map} +1 -1
- package/{tool-CMhaDRNd.mjs → tool-wMYMVl60.mjs} +4 -4
- package/{tool-CMhaDRNd.mjs.map → tool-wMYMVl60.mjs.map} +1 -1
- package/{tool_call-CV5qVNlb.mjs → tool_call-B4-_-vjG.mjs} +5 -5
- package/tool_call-B4-_-vjG.mjs.map +1 -0
- package/{tool_call-Db68hB7y.js → tool_call-DixVlW40.js} +5 -5
- package/tool_call-DixVlW40.js.map +1 -0
- package/{tool_registry-D1pSSlsd.mjs → tool_registry-791Vrjtf.mjs} +4 -3
- package/tool_registry-791Vrjtf.mjs.map +1 -0
- package/{tool_registry-DYUYqXvo.js → tool_registry-CKJPze3j.js} +4 -3
- package/tool_registry-CKJPze3j.js.map +1 -0
- package/{turn_runner-DqWHNP80.js → turn_runner-HXImLGIn.js} +7 -7
- package/turn_runner-HXImLGIn.js.map +1 -0
- package/{turn_runner-fg1Wc3dK.mjs → turn_runner-ZyYO-Kti.mjs} +7 -7
- package/turn_runner-ZyYO-Kti.mjs.map +1 -0
- package/turn_runner.cjs +1 -1
- package/turn_runner.mjs +1 -1
- package/types.d.ts +1 -1
- package/common-BT0nfCi9.mjs.map +0 -1
- package/common-Cj8TaQ9U.js.map +0 -1
- package/exceptions-BeWH2FwP.mjs.map +0 -1
- package/exceptions-CitH5wZI.js.map +0 -1
- package/spooled_markdown_artifact-CALSDxIx.js.map +0 -1
- package/spooled_markdown_artifact-Ci5UL7l4.mjs.map +0 -1
- package/tool_call-CV5qVNlb.mjs.map +0 -1
- package/tool_call-Db68hB7y.js.map +0 -1
- package/tool_registry-D1pSSlsd.mjs.map +0 -1
- package/tool_registry-DYUYqXvo.js.map +0 -1
- package/turn_runner-DqWHNP80.js.map +0 -1
- package/turn_runner-fg1Wc3dK.mjs.map +0 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { c as isObject, o as isError, s as isInstanceOf } from "../../tool_registry-791Vrjtf.mjs";
|
|
2
|
+
import { t as SpooledArtifact } from "../../spooled_artifact-7eePq7JA.mjs";
|
|
3
|
+
import "../../guards.mjs";
|
|
4
|
+
import "../../spooled_artifact.mjs";
|
|
5
|
+
//#region src/batteries/tools/_shared/index.ts
|
|
6
|
+
/**
|
|
7
|
+
* Resolve the configured headers (a static object or a sync/async resolver) for a single request.
|
|
8
|
+
*
|
|
9
|
+
* @param headers - The static header record, the resolver, or `undefined`.
|
|
10
|
+
* @returns A fresh, owned copy of the resolved headers (`{}` when none supplied).
|
|
11
|
+
*/
|
|
12
|
+
var resolveHeaders = async (headers) => {
|
|
13
|
+
if (typeof headers === "function") return { ...await headers() };
|
|
14
|
+
return { ...headers ?? {} };
|
|
15
|
+
};
|
|
16
|
+
/** Unwrap a resolved value that may be a module namespace whose `default` is the constructor. */
|
|
17
|
+
var unwrapDefault = (value) => {
|
|
18
|
+
if (isObject(value) && "default" in value) {
|
|
19
|
+
const def = value.default;
|
|
20
|
+
if (SpooledArtifact.isSpooledArtifactConstructor(def)) return def;
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Resolve an {@link ArtifactResolver} to the **sync** `() => SpooledArtifactCtor` that
|
|
26
|
+
* `Tool.artifactConstructor` requires (the wrap-site and the construction-time validator both
|
|
27
|
+
* invoke it synchronously, so an async resolver cannot be passed straight through).
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* A bare constructor is itself a function, so it is distinguished from a resolver via
|
|
31
|
+
* `SpooledArtifact.isSpooledArtifactConstructor` (the same duck-typed guard the core validator
|
|
32
|
+
* uses) rather than by arity. Async because a dynamic-import resolver must be awaited here.
|
|
33
|
+
*
|
|
34
|
+
* @param resolver - The artifact configuration. When `undefined`, callers should fall back to
|
|
35
|
+
* their own default (this function rejects `undefined` so the default lives with the caller).
|
|
36
|
+
* @param onInvalid - Throws a battery-scoped error; receives a human-readable reason.
|
|
37
|
+
* @returns A sync `() => SpooledArtifactCtor` suitable for `Tool.artifactConstructor`.
|
|
38
|
+
*/
|
|
39
|
+
var resolveArtifact = async (resolver, onInvalid) => {
|
|
40
|
+
if (SpooledArtifact.isSpooledArtifactConstructor(resolver)) {
|
|
41
|
+
const ctor = resolver;
|
|
42
|
+
return () => ctor;
|
|
43
|
+
}
|
|
44
|
+
if (typeof resolver !== "function") onInvalid("artifact must be a SpooledArtifact constructor or a resolver returning one");
|
|
45
|
+
let resolved;
|
|
46
|
+
try {
|
|
47
|
+
resolved = await resolver();
|
|
48
|
+
} catch (err) {
|
|
49
|
+
onInvalid(`artifact resolver threw: ${isError(err) ? err.message : String(err)}`);
|
|
50
|
+
}
|
|
51
|
+
resolved = unwrapDefault(resolved);
|
|
52
|
+
if (!SpooledArtifact.isSpooledArtifactConstructor(resolved)) onInvalid("artifact resolver did not resolve to a SpooledArtifact constructor");
|
|
53
|
+
const ctor = resolved;
|
|
54
|
+
return () => ctor;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Synchronous {@link resolveArtifact}: accepts only the {@link SyncArtifactResolver} subset and
|
|
58
|
+
* throws (via `onInvalid`) on an async resolver — a runtime guard for JS callers who bypass the
|
|
59
|
+
* compile-time narrowing.
|
|
60
|
+
*
|
|
61
|
+
* @param resolver - A constructor or a sync resolver.
|
|
62
|
+
* @param onInvalid - Throws a battery-scoped error; receives a human-readable reason.
|
|
63
|
+
* @returns A sync `() => SpooledArtifactCtor` suitable for `Tool.artifactConstructor`.
|
|
64
|
+
*/
|
|
65
|
+
var resolveArtifactSync = (resolver, onInvalid) => {
|
|
66
|
+
if (SpooledArtifact.isSpooledArtifactConstructor(resolver)) {
|
|
67
|
+
const ctor = resolver;
|
|
68
|
+
return () => ctor;
|
|
69
|
+
}
|
|
70
|
+
if (typeof resolver !== "function") onInvalid("artifact must be a SpooledArtifact constructor or a resolver returning one");
|
|
71
|
+
let resolved;
|
|
72
|
+
try {
|
|
73
|
+
resolved = resolver();
|
|
74
|
+
} catch (err) {
|
|
75
|
+
onInvalid(`artifact resolver threw: ${isError(err) ? err.message : String(err)}`);
|
|
76
|
+
}
|
|
77
|
+
if (isInstanceOf(resolved, "Promise", Promise)) onInvalid("artifact resolver is async; use the async factory variant for dynamic-import resolvers");
|
|
78
|
+
resolved = unwrapDefault(resolved);
|
|
79
|
+
if (!SpooledArtifact.isSpooledArtifactConstructor(resolved)) onInvalid("artifact resolver did not resolve to a SpooledArtifact constructor");
|
|
80
|
+
const ctor = resolved;
|
|
81
|
+
return () => ctor;
|
|
82
|
+
};
|
|
83
|
+
/** Internal sentinel a short-circuiting input stage throws to unwind the pipeline immediately. */
|
|
84
|
+
var SHORT_CIRCUIT = Symbol("adk.tools.shortCircuit");
|
|
85
|
+
/** `true` when `value` is the short-circuit sentinel produced by {@link makeShortCircuit}. */
|
|
86
|
+
var isShortCircuit = (value) => isObject(value) && value[SHORT_CIRCUIT] === true;
|
|
87
|
+
/**
|
|
88
|
+
* Build a `shortCircuit(result)` function for an input-pipeline context. Calling it throws the
|
|
89
|
+
* internal sentinel, which {@link runInputPipeline} catches and converts into the verbatim result
|
|
90
|
+
* (skipping the HTTP request entirely — e.g. a cache hit).
|
|
91
|
+
*
|
|
92
|
+
* @returns A function that, when called with a result string, throws the short-circuit sentinel.
|
|
93
|
+
*/
|
|
94
|
+
var makeShortCircuit = () => {
|
|
95
|
+
return (result) => {
|
|
96
|
+
throw {
|
|
97
|
+
[SHORT_CIRCUIT]: true,
|
|
98
|
+
result
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Run an input pipeline over `ctx`. Returns the short-circuit string when a stage short-circuited,
|
|
104
|
+
* or `undefined` when the pipeline reached its terminal handler. A non-terminal pipeline (a stage
|
|
105
|
+
* that neither called `next()` nor short-circuited) throws — the caller converts it to an
|
|
106
|
+
* `Error:` string.
|
|
107
|
+
*
|
|
108
|
+
* @param mw - The `Middleware` instance holding the stages (a fresh `.runner()` is minted here).
|
|
109
|
+
* @param ctx - The mutable input context handed to each stage.
|
|
110
|
+
* @param label - Battery name, used in the non-terminal error message.
|
|
111
|
+
* @returns The short-circuit result string, or `undefined` if the pipeline ran to completion.
|
|
112
|
+
*/
|
|
113
|
+
var runInputPipeline = async (mw, ctx, label) => {
|
|
114
|
+
let reached = false;
|
|
115
|
+
let caught;
|
|
116
|
+
await mw.runner().errorHandler(async (error) => {
|
|
117
|
+
caught = error;
|
|
118
|
+
}).finalHandler(async () => {
|
|
119
|
+
reached = true;
|
|
120
|
+
}).run((fn, next) => Promise.resolve(fn(ctx, next)));
|
|
121
|
+
if (caught !== void 0) {
|
|
122
|
+
if (isShortCircuit(caught)) return caught.result;
|
|
123
|
+
throw caught;
|
|
124
|
+
}
|
|
125
|
+
if (!reached) throw new Error(`${label} input pipeline did not call next() and did not short-circuit.`);
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Run an output pipeline over `ctx`; rethrow any stage error to the caller's try/catch. A
|
|
129
|
+
* non-terminal pipeline (no `next()`) throws.
|
|
130
|
+
*
|
|
131
|
+
* @param mw - The `Middleware` instance holding the stages (a fresh `.runner()` is minted here).
|
|
132
|
+
* @param ctx - The mutable output context handed to each stage.
|
|
133
|
+
* @param label - Battery name, used in the non-terminal error message.
|
|
134
|
+
*/
|
|
135
|
+
var runOutputPipeline = async (mw, ctx, label) => {
|
|
136
|
+
let reached = false;
|
|
137
|
+
let caught;
|
|
138
|
+
await mw.runner().errorHandler(async (error) => {
|
|
139
|
+
caught = error;
|
|
140
|
+
}).finalHandler(async () => {
|
|
141
|
+
reached = true;
|
|
142
|
+
}).run((fn, next) => Promise.resolve(fn(ctx, next)));
|
|
143
|
+
if (caught !== void 0) throw caught;
|
|
144
|
+
if (!reached) throw new Error(`${label} output pipeline did not call next().`);
|
|
145
|
+
};
|
|
146
|
+
//#endregion
|
|
147
|
+
export { isShortCircuit, makeShortCircuit, resolveArtifact, resolveArtifactSync, resolveHeaders, runInputPipeline, runOutputPipeline };
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=_shared.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_shared.mjs","names":[],"sources":["../../../src/batteries/tools/_shared/index.ts"],"sourcesContent":["/**\n * Cross-battery helpers shared by the configured HTTP tool batteries (SearXNG, Scrapper, …).\n *\n * @module @nhtio/adk/batteries/tools/_shared\n *\n * @remarks\n * These are internal building blocks for the *factory-style* tool batteries — the ones that talk\n * to a configured HTTP instance behind custom auth and expose input/output middleware pipelines.\n * Rather than each battery carry its own copy, the common machinery lives here:\n *\n * - {@link resolveArtifact} / {@link resolveArtifactSync} — turn an {@link ArtifactResolver}\n * (a constructor, a sync resolver, or an async / dynamic-import resolver) into the **sync**\n * `() => SpooledArtifactConstructor` that `Tool.artifactConstructor` requires. Mirrors the vector\n * battery's `resolveClientCtor`.\n * - {@link resolveHeaders} — collapse a static header object or a (sync/async) resolver into a\n * plain header record for one request (refreshable-auth friendly).\n * - {@link runInputPipeline} / {@link runOutputPipeline} — the onion middleware runners (fresh\n * runner per call, short-circuit + non-terminal detection), generic over the context type.\n *\n * This module imports harness primitives only through their specific subpath barrels\n * (`@nhtio/adk/spooled_artifact`, `@nhtio/adk/forge`, `@nhtio/adk/guards`) per the batteries\n * barrel-only rule.\n */\n\nimport { Middleware } from '@nhtio/middleware'\nimport { SpooledArtifact } from '@nhtio/adk/spooled_artifact'\nimport { isError, isObject, isInstanceOf } from '@nhtio/adk/guards'\nimport type { NextFn } from '@nhtio/middleware'\nimport type { SpooledArtifactConstructor } from '@nhtio/adk/forge'\n\n// ── Header resolution ────────────────────────────────────────────────────────\n\n/** A static set of request headers (used for custom instance authentication). */\nexport type ToolHeaders = Record<string, string>\n\n/**\n * A resolver returning request headers, sync or async. Use this form when the auth token is\n * refreshable — the resolver runs on every request, so a fresh token can be minted per call.\n */\nexport type ToolHeadersResolver = () => ToolHeaders | Promise<ToolHeaders>\n\n/**\n * Resolve the configured headers (a static object or a sync/async resolver) for a single request.\n *\n * @param headers - The static header record, the resolver, or `undefined`.\n * @returns A fresh, owned copy of the resolved headers (`{}` when none supplied).\n */\nexport const resolveHeaders = async (\n headers: ToolHeaders | ToolHeadersResolver | undefined\n): Promise<ToolHeaders> => {\n if (typeof headers === 'function') return { ...(await headers()) }\n return { ...(headers ?? {}) }\n}\n\n// ── Artifact resolver ────────────────────────────────────────────────────────\n\n/** Convenience alias for the spooled-artifact constructor a tool wraps its output in. */\nexport type SpooledArtifactCtor = SpooledArtifactConstructor\n\n/**\n * The artifact configuration accepted by a factory: a constructor, a sync resolver, or an async /\n * dynamic-import resolver (which may yield a module namespace whose `default` is the constructor).\n *\n * @remarks\n * Mirrors the vector battery's `client` resolver and `Tool.artifactConstructor`'s indirection. The\n * async form lets a consumer `() => import('@nhtio/adk/spooled_artifact').then(m => m.SpooledMarkdownArtifact)`\n * so the artifact class never enters their static module graph.\n */\nexport type ArtifactResolver =\n | SpooledArtifactCtor\n | (() => SpooledArtifactCtor | { default: SpooledArtifactCtor })\n | (() => Promise<SpooledArtifactCtor | { default: SpooledArtifactCtor }>)\n\n/** The sync subset of {@link ArtifactResolver} — a constructor or a sync resolver (no Promise). */\nexport type SyncArtifactResolver =\n | SpooledArtifactCtor\n | (() => SpooledArtifactCtor | { default: SpooledArtifactCtor })\n\n/** Unwrap a resolved value that may be a module namespace whose `default` is the constructor. */\nconst unwrapDefault = (value: unknown): unknown => {\n if (isObject(value) && 'default' in value) {\n const def = (value as { default?: unknown }).default\n if (SpooledArtifact.isSpooledArtifactConstructor(def)) return def\n }\n return value\n}\n\n/**\n * Resolve an {@link ArtifactResolver} to the **sync** `() => SpooledArtifactCtor` that\n * `Tool.artifactConstructor` requires (the wrap-site and the construction-time validator both\n * invoke it synchronously, so an async resolver cannot be passed straight through).\n *\n * @remarks\n * A bare constructor is itself a function, so it is distinguished from a resolver via\n * `SpooledArtifact.isSpooledArtifactConstructor` (the same duck-typed guard the core validator\n * uses) rather than by arity. Async because a dynamic-import resolver must be awaited here.\n *\n * @param resolver - The artifact configuration. When `undefined`, callers should fall back to\n * their own default (this function rejects `undefined` so the default lives with the caller).\n * @param onInvalid - Throws a battery-scoped error; receives a human-readable reason.\n * @returns A sync `() => SpooledArtifactCtor` suitable for `Tool.artifactConstructor`.\n */\nexport const resolveArtifact = async (\n resolver: ArtifactResolver,\n onInvalid: (reason: string) => never\n): Promise<() => SpooledArtifactCtor> => {\n // A constructor: hand back a thunk that returns it.\n if (SpooledArtifact.isSpooledArtifactConstructor(resolver)) {\n const ctor = resolver\n return () => ctor\n }\n // Otherwise it must be a resolver function.\n if (typeof resolver !== 'function') {\n onInvalid('artifact must be a SpooledArtifact constructor or a resolver returning one')\n }\n let resolved: unknown\n try {\n resolved = await (resolver as () => unknown)()\n } catch (err) {\n onInvalid(`artifact resolver threw: ${isError(err) ? err.message : String(err)}`)\n }\n resolved = unwrapDefault(resolved)\n if (!SpooledArtifact.isSpooledArtifactConstructor(resolved)) {\n onInvalid('artifact resolver did not resolve to a SpooledArtifact constructor')\n }\n const ctor = resolved as SpooledArtifactCtor\n return () => ctor\n}\n\n/**\n * Synchronous {@link resolveArtifact}: accepts only the {@link SyncArtifactResolver} subset and\n * throws (via `onInvalid`) on an async resolver — a runtime guard for JS callers who bypass the\n * compile-time narrowing.\n *\n * @param resolver - A constructor or a sync resolver.\n * @param onInvalid - Throws a battery-scoped error; receives a human-readable reason.\n * @returns A sync `() => SpooledArtifactCtor` suitable for `Tool.artifactConstructor`.\n */\nexport const resolveArtifactSync = (\n resolver: SyncArtifactResolver,\n onInvalid: (reason: string) => never\n): (() => SpooledArtifactCtor) => {\n if (SpooledArtifact.isSpooledArtifactConstructor(resolver)) {\n const ctor = resolver\n return () => ctor\n }\n if (typeof resolver !== 'function') {\n onInvalid('artifact must be a SpooledArtifact constructor or a resolver returning one')\n }\n let resolved: unknown\n try {\n resolved = (resolver as () => unknown)()\n } catch (err) {\n onInvalid(`artifact resolver threw: ${isError(err) ? err.message : String(err)}`)\n }\n if (isInstanceOf(resolved, 'Promise', Promise)) {\n onInvalid(\n 'artifact resolver is async; use the async factory variant for dynamic-import resolvers'\n )\n }\n resolved = unwrapDefault(resolved)\n if (!SpooledArtifact.isSpooledArtifactConstructor(resolved)) {\n onInvalid('artifact resolver did not resolve to a SpooledArtifact constructor')\n }\n const ctor = resolved as SpooledArtifactCtor\n return () => ctor\n}\n\n// ── Middleware pipeline runners ──────────────────────────────────────────────\n\n/** Internal sentinel a short-circuiting input stage throws to unwind the pipeline immediately. */\nconst SHORT_CIRCUIT = Symbol('adk.tools.shortCircuit')\n\ninterface ShortCircuitSignal {\n [SHORT_CIRCUIT]: true\n result: string\n}\n\n/** `true` when `value` is the short-circuit sentinel produced by {@link makeShortCircuit}. */\nexport const isShortCircuit = (value: unknown): value is { result: string } =>\n isObject(value) && (value as Record<symbol, unknown>)[SHORT_CIRCUIT] === true\n\n/**\n * Build a `shortCircuit(result)` function for an input-pipeline context. Calling it throws the\n * internal sentinel, which {@link runInputPipeline} catches and converts into the verbatim result\n * (skipping the HTTP request entirely — e.g. a cache hit).\n *\n * @returns A function that, when called with a result string, throws the short-circuit sentinel.\n */\nexport const makeShortCircuit = (): ((result: string) => never) => {\n return (result: string): never => {\n const signal: ShortCircuitSignal = { [SHORT_CIRCUIT]: true, result }\n throw signal\n }\n}\n\n/** A generic onion middleware stage over a mutable context `C`. */\nexport type MiddlewareFn<C> = (ctx: C, next: NextFn) => void | Promise<void>\n\n/**\n * Run an input pipeline over `ctx`. Returns the short-circuit string when a stage short-circuited,\n * or `undefined` when the pipeline reached its terminal handler. A non-terminal pipeline (a stage\n * that neither called `next()` nor short-circuited) throws — the caller converts it to an\n * `Error:` string.\n *\n * @param mw - The `Middleware` instance holding the stages (a fresh `.runner()` is minted here).\n * @param ctx - The mutable input context handed to each stage.\n * @param label - Battery name, used in the non-terminal error message.\n * @returns The short-circuit result string, or `undefined` if the pipeline ran to completion.\n */\nexport const runInputPipeline = async <C>(\n mw: Middleware<MiddlewareFn<C>>,\n ctx: C,\n label: string\n): Promise<string | undefined> => {\n let reached = false\n let caught: unknown\n await mw\n .runner()\n .errorHandler(async (error: unknown) => {\n caught = error\n })\n .finalHandler(async () => {\n reached = true\n })\n .run((fn, next) => Promise.resolve(fn(ctx, next)))\n\n if (caught !== undefined) {\n if (isShortCircuit(caught)) return caught.result\n throw caught\n }\n if (!reached) {\n throw new Error(`${label} input pipeline did not call next() and did not short-circuit.`)\n }\n return undefined\n}\n\n/**\n * Run an output pipeline over `ctx`; rethrow any stage error to the caller's try/catch. A\n * non-terminal pipeline (no `next()`) throws.\n *\n * @param mw - The `Middleware` instance holding the stages (a fresh `.runner()` is minted here).\n * @param ctx - The mutable output context handed to each stage.\n * @param label - Battery name, used in the non-terminal error message.\n */\nexport const runOutputPipeline = async <C>(\n mw: Middleware<MiddlewareFn<C>>,\n ctx: C,\n label: string\n): Promise<void> => {\n let reached = false\n let caught: unknown\n await mw\n .runner()\n .errorHandler(async (error: unknown) => {\n caught = error\n })\n .finalHandler(async () => {\n reached = true\n })\n .run((fn, next) => Promise.resolve(fn(ctx, next)))\n\n if (caught !== undefined) throw caught\n if (!reached) throw new Error(`${label} output pipeline did not call next().`)\n}\n"],"mappings":";;;;;;;;;;;AA+CA,IAAa,iBAAiB,OAC5B,YACyB;CACzB,IAAI,OAAO,YAAY,YAAY,OAAO,EAAE,GAAI,MAAM,QAAQ,EAAG;CACjE,OAAO,EAAE,GAAI,WAAW,CAAC,EAAG;AAC9B;;AA2BA,IAAM,iBAAiB,UAA4B;CACjD,IAAI,SAAS,KAAK,KAAK,aAAa,OAAO;EACzC,MAAM,MAAO,MAAgC;EAC7C,IAAI,gBAAgB,6BAA6B,GAAG,GAAG,OAAO;CAChE;CACA,OAAO;AACT;;;;;;;;;;;;;;;;AAiBA,IAAa,kBAAkB,OAC7B,UACA,cACuC;CAEvC,IAAI,gBAAgB,6BAA6B,QAAQ,GAAG;EAC1D,MAAM,OAAO;EACb,aAAa;CACf;CAEA,IAAI,OAAO,aAAa,YACtB,UAAU,4EAA4E;CAExF,IAAI;CACJ,IAAI;EACF,WAAW,MAAO,SAA2B;CAC/C,SAAS,KAAK;EACZ,UAAU,4BAA4B,QAAQ,GAAG,IAAI,IAAI,UAAU,OAAO,GAAG,GAAG;CAClF;CACA,WAAW,cAAc,QAAQ;CACjC,IAAI,CAAC,gBAAgB,6BAA6B,QAAQ,GACxD,UAAU,oEAAoE;CAEhF,MAAM,OAAO;CACb,aAAa;AACf;;;;;;;;;;AAWA,IAAa,uBACX,UACA,cACgC;CAChC,IAAI,gBAAgB,6BAA6B,QAAQ,GAAG;EAC1D,MAAM,OAAO;EACb,aAAa;CACf;CACA,IAAI,OAAO,aAAa,YACtB,UAAU,4EAA4E;CAExF,IAAI;CACJ,IAAI;EACF,WAAY,SAA2B;CACzC,SAAS,KAAK;EACZ,UAAU,4BAA4B,QAAQ,GAAG,IAAI,IAAI,UAAU,OAAO,GAAG,GAAG;CAClF;CACA,IAAI,aAAa,UAAU,WAAW,OAAO,GAC3C,UACE,wFACF;CAEF,WAAW,cAAc,QAAQ;CACjC,IAAI,CAAC,gBAAgB,6BAA6B,QAAQ,GACxD,UAAU,oEAAoE;CAEhF,MAAM,OAAO;CACb,aAAa;AACf;;AAKA,IAAM,gBAAgB,OAAO,wBAAwB;;AAQrD,IAAa,kBAAkB,UAC7B,SAAS,KAAK,KAAM,MAAkC,mBAAmB;;;;;;;;AAS3E,IAAa,yBAAsD;CACjE,QAAQ,WAA0B;EAEhC,MAAM;IADgC,gBAAgB;GAAM;EACtD;CACR;AACF;;;;;;;;;;;;AAgBA,IAAa,mBAAmB,OAC9B,IACA,KACA,UACgC;CAChC,IAAI,UAAU;CACd,IAAI;CACJ,MAAM,GACH,OAAO,EACP,aAAa,OAAO,UAAmB;EACtC,SAAS;CACX,CAAC,EACA,aAAa,YAAY;EACxB,UAAU;CACZ,CAAC,EACA,KAAK,IAAI,SAAS,QAAQ,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC;CAEnD,IAAI,WAAW,KAAA,GAAW;EACxB,IAAI,eAAe,MAAM,GAAG,OAAO,OAAO;EAC1C,MAAM;CACR;CACA,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,GAAG,MAAM,+DAA+D;AAG5F;;;;;;;;;AAUA,IAAa,oBAAoB,OAC/B,IACA,KACA,UACkB;CAClB,IAAI,UAAU;CACd,IAAI;CACJ,MAAM,GACH,OAAO,EACP,aAAa,OAAO,UAAmB;EACtC,SAAS;CACX,CAAC,EACA,aAAa,YAAY;EACxB,UAAU;CACZ,CAAC,EACA,KAAK,IAAI,SAAS,QAAQ,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC;CAEnD,IAAI,WAAW,KAAA,GAAW,MAAM;CAChC,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,GAAG,MAAM,sCAAsC;AAC/E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../chunk-Ble4zEEl.js");
|
|
3
|
-
const require_tool = require("../../tool-
|
|
4
|
-
require("../../common-
|
|
3
|
+
const require_tool = require("../../tool-D5WGVIcI.js");
|
|
4
|
+
require("../../common-DZl3ADJs.js");
|
|
5
5
|
let _nhtio_validation = require("@nhtio/validation");
|
|
6
6
|
//#region src/batteries/tools/color/index.ts
|
|
7
7
|
/**
|
|
@@ -15,6 +15,7 @@ let _nhtio_validation = require("@nhtio/validation");
|
|
|
15
15
|
*/
|
|
16
16
|
function hexToRgb(hex) {
|
|
17
17
|
const cleaned = hex.replace(/^#/, "");
|
|
18
|
+
if (!/^[0-9a-fA-F]+$/.test(cleaned)) return null;
|
|
18
19
|
let r;
|
|
19
20
|
let g;
|
|
20
21
|
let b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.cjs","names":[],"sources":["../../../src/batteries/tools/color/index.ts"],"sourcesContent":["/**\n * Pre-constructed tools for color conversion and palette-oriented calculations.\n *\n * @module @nhtio/adk/batteries/tools/color\n *\n * @remarks\n * Pre-constructed bundled tools for the `color` category. Import individually, the whole\n * category, or import every tool via `@nhtio/adk/batteries`.\n */\n\nimport { Tool } from '@nhtio/adk/common'\nimport { validator } from '@nhtio/validation'\n\ntype RGB = { r: number; g: number; b: number }\ntype HSL = { h: number; s: number; l: number }\n\nfunction hexToRgb(hex: string): RGB | null {\n const cleaned = hex.replace(/^#/, '')\n let r: number\n let g: number\n let b: number\n\n if (cleaned.length === 3) {\n r = Number.parseInt(cleaned[0] + cleaned[0], 16)\n g = Number.parseInt(cleaned[1] + cleaned[1], 16)\n b = Number.parseInt(cleaned[2] + cleaned[2], 16)\n } else if (cleaned.length === 6) {\n r = Number.parseInt(cleaned.slice(0, 2), 16)\n g = Number.parseInt(cleaned.slice(2, 4), 16)\n b = Number.parseInt(cleaned.slice(4, 6), 16)\n } else {\n return null\n }\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return null\n return { r, g, b }\n}\n\nfunction parseRgbString(input: string): RGB | null {\n const match = input.match(/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i)\n if (!match) return null\n const r = Number.parseInt(match[1], 10)\n const g = Number.parseInt(match[2], 10)\n const b = Number.parseInt(match[3], 10)\n if (r > 255 || g > 255 || b > 255) return null\n return { r, g, b }\n}\n\nfunction parseHslString(input: string): HSL | null {\n const match = input.match(/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?\\s*\\)$/i)\n if (!match) return null\n return {\n h: Number.parseInt(match[1], 10) % 360,\n s: Math.min(100, Number.parseInt(match[2], 10)),\n l: Math.min(100, Number.parseInt(match[3], 10)),\n }\n}\n\nconst NAMED_COLORS: Record<string, string> = {\n 'black': '#000000',\n 'white': '#FFFFFF',\n 'transparent': '#FFFFFF',\n 'aqua': '#00FFFF',\n 'magenta': '#FF00FF',\n 'fuchsia': '#FF00FF',\n 'silver': '#C0C0C0',\n 'maroon': '#800000',\n 'olive': '#808000',\n 'navy': '#000080',\n 'coral': '#FF7F50',\n 'crimson': '#DC143C',\n 'gold': '#FFD700',\n 'ivory': '#FFFFF0',\n 'khaki': '#F0E68C',\n 'lavender': '#E6E6FA',\n 'plum': '#DDA0DD',\n 'salmon': '#FA8072',\n 'sienna': '#A0522D',\n 'tan': '#D2B48C',\n 'tomato': '#FF6347',\n 'turquoise': '#40E0D0',\n 'violet': '#EE82EE',\n 'wheat': '#F5DEB3',\n 'red': '#F44336',\n 'red-lighten-5': '#FFEBEE',\n 'red-lighten-4': '#FFCDD2',\n 'red-lighten-3': '#EF9A9A',\n 'red-lighten-2': '#E57373',\n 'red-lighten-1': '#EF5350',\n 'red-darken-1': '#E53935',\n 'red-darken-2': '#D32F2F',\n 'red-darken-3': '#C62828',\n 'red-darken-4': '#B71C1C',\n 'red-accent-1': '#FF8A80',\n 'red-accent-2': '#FF5252',\n 'red-accent-3': '#FF1744',\n 'red-accent-4': '#D50000',\n 'pink': '#E91E63',\n 'pink-lighten-5': '#FCE4EC',\n 'pink-lighten-4': '#F8BBD0',\n 'pink-lighten-3': '#F48FB1',\n 'pink-lighten-2': '#F06292',\n 'pink-lighten-1': '#EC407A',\n 'pink-darken-1': '#D81B60',\n 'pink-darken-2': '#C2185B',\n 'pink-darken-3': '#AD1457',\n 'pink-darken-4': '#880E4F',\n 'pink-accent-1': '#FF80AB',\n 'pink-accent-2': '#FF4081',\n 'pink-accent-3': '#F50057',\n 'pink-accent-4': '#C51162',\n 'purple': '#9C27B0',\n 'purple-lighten-5': '#F3E5F5',\n 'purple-lighten-4': '#E1BEE7',\n 'purple-lighten-3': '#CE93D8',\n 'purple-lighten-2': '#BA68C8',\n 'purple-lighten-1': '#AB47BC',\n 'purple-darken-1': '#8E24AA',\n 'purple-darken-2': '#7B1FA2',\n 'purple-darken-3': '#6A1B9A',\n 'purple-darken-4': '#4A148C',\n 'purple-accent-1': '#EA80FC',\n 'purple-accent-2': '#E040FB',\n 'purple-accent-3': '#D500F9',\n 'purple-accent-4': '#AA00FF',\n 'deep-purple': '#673AB7',\n 'deep-purple-lighten-5': '#EDE7F6',\n 'deep-purple-lighten-4': '#D1C4E9',\n 'deep-purple-lighten-3': '#B39DDB',\n 'deep-purple-lighten-2': '#9575CD',\n 'deep-purple-lighten-1': '#7E57C2',\n 'deep-purple-darken-1': '#5E35B1',\n 'deep-purple-darken-2': '#512DA8',\n 'deep-purple-darken-3': '#4527A0',\n 'deep-purple-darken-4': '#311B92',\n 'deep-purple-accent-1': '#B388FF',\n 'deep-purple-accent-2': '#7C4DFF',\n 'deep-purple-accent-3': '#651FFF',\n 'deep-purple-accent-4': '#6200EA',\n 'indigo': '#3F51B5',\n 'indigo-lighten-5': '#E8EAF6',\n 'indigo-lighten-4': '#C5CAE9',\n 'indigo-lighten-3': '#9FA8DA',\n 'indigo-lighten-2': '#7986CB',\n 'indigo-lighten-1': '#5C6BC0',\n 'indigo-darken-1': '#3949AB',\n 'indigo-darken-2': '#303F9F',\n 'indigo-darken-3': '#283593',\n 'indigo-darken-4': '#1A237E',\n 'indigo-accent-1': '#8C9EFF',\n 'indigo-accent-2': '#536DFE',\n 'indigo-accent-3': '#3D5AFE',\n 'indigo-accent-4': '#304FFE',\n 'blue': '#2196F3',\n 'blue-lighten-5': '#E3F2FD',\n 'blue-lighten-4': '#BBDEFB',\n 'blue-lighten-3': '#90CAF9',\n 'blue-lighten-2': '#64B5F6',\n 'blue-lighten-1': '#42A5F5',\n 'blue-darken-1': '#1E88E5',\n 'blue-darken-2': '#1976D2',\n 'blue-darken-3': '#1565C0',\n 'blue-darken-4': '#0D47A1',\n 'blue-accent-1': '#82B1FF',\n 'blue-accent-2': '#448AFF',\n 'blue-accent-3': '#2979FF',\n 'blue-accent-4': '#2962FF',\n 'light-blue': '#03A9F4',\n 'light-blue-lighten-5': '#E1F5FE',\n 'light-blue-lighten-4': '#B3E5FC',\n 'light-blue-lighten-3': '#81D4FA',\n 'light-blue-lighten-2': '#4FC3F7',\n 'light-blue-lighten-1': '#29B6F6',\n 'light-blue-darken-1': '#039BE5',\n 'light-blue-darken-2': '#0288D1',\n 'light-blue-darken-3': '#0277BD',\n 'light-blue-darken-4': '#01579B',\n 'light-blue-accent-1': '#80D8FF',\n 'light-blue-accent-2': '#40C4FF',\n 'light-blue-accent-3': '#00B0FF',\n 'light-blue-accent-4': '#0091EA',\n 'cyan': '#00BCD4',\n 'cyan-lighten-5': '#E0F7FA',\n 'cyan-lighten-4': '#B2EBF2',\n 'cyan-lighten-3': '#80DEEA',\n 'cyan-lighten-2': '#4DD0E1',\n 'cyan-lighten-1': '#26C6DA',\n 'cyan-darken-1': '#00ACC1',\n 'cyan-darken-2': '#0097A7',\n 'cyan-darken-3': '#00838F',\n 'cyan-darken-4': '#006064',\n 'cyan-accent-1': '#84FFFF',\n 'cyan-accent-2': '#18FFFF',\n 'cyan-accent-3': '#00E5FF',\n 'cyan-accent-4': '#00B8D4',\n 'teal': '#009688',\n 'teal-lighten-5': '#E0F2F1',\n 'teal-lighten-4': '#B2DFDB',\n 'teal-lighten-3': '#80CBC4',\n 'teal-lighten-2': '#4DB6AC',\n 'teal-lighten-1': '#26A69A',\n 'teal-darken-1': '#00897B',\n 'teal-darken-2': '#00796B',\n 'teal-darken-3': '#00695C',\n 'teal-darken-4': '#004D40',\n 'teal-accent-1': '#A7FFEB',\n 'teal-accent-2': '#64FFDA',\n 'teal-accent-3': '#1DE9B6',\n 'teal-accent-4': '#00BFA5',\n 'green': '#4CAF50',\n 'green-lighten-5': '#E8F5E9',\n 'green-lighten-4': '#C8E6C9',\n 'green-lighten-3': '#A5D6A7',\n 'green-lighten-2': '#81C784',\n 'green-lighten-1': '#66BB6A',\n 'green-darken-1': '#43A047',\n 'green-darken-2': '#388E3C',\n 'green-darken-3': '#2E7D32',\n 'green-darken-4': '#1B5E20',\n 'green-accent-1': '#B9F6CA',\n 'green-accent-2': '#69F0AE',\n 'green-accent-3': '#00E676',\n 'green-accent-4': '#00C853',\n 'light-green': '#8BC34A',\n 'light-green-lighten-5': '#F1F8E9',\n 'light-green-lighten-4': '#DCEDC8',\n 'light-green-lighten-3': '#C5E1A5',\n 'light-green-lighten-2': '#AED581',\n 'light-green-lighten-1': '#9CCC65',\n 'light-green-darken-1': '#7CB342',\n 'light-green-darken-2': '#689F38',\n 'light-green-darken-3': '#558B2F',\n 'light-green-darken-4': '#33691E',\n 'light-green-accent-1': '#CCFF90',\n 'light-green-accent-2': '#B2FF59',\n 'light-green-accent-3': '#76FF03',\n 'light-green-accent-4': '#64DD17',\n 'lime': '#CDDC39',\n 'lime-lighten-5': '#F9FBE7',\n 'lime-lighten-4': '#F0F4C3',\n 'lime-lighten-3': '#E6EE9C',\n 'lime-lighten-2': '#DCE775',\n 'lime-lighten-1': '#D4E157',\n 'lime-darken-1': '#C0CA33',\n 'lime-darken-2': '#AFB42B',\n 'lime-darken-3': '#9E9D24',\n 'lime-darken-4': '#827717',\n 'lime-accent-1': '#F4FF81',\n 'lime-accent-2': '#EEFF41',\n 'lime-accent-3': '#C6FF00',\n 'lime-accent-4': '#AEEA00',\n 'yellow': '#FFEB3B',\n 'yellow-lighten-5': '#FFFDE7',\n 'yellow-lighten-4': '#FFF9C4',\n 'yellow-lighten-3': '#FFF59D',\n 'yellow-lighten-2': '#FFF176',\n 'yellow-lighten-1': '#FFEE58',\n 'yellow-darken-1': '#FDD835',\n 'yellow-darken-2': '#FBC02D',\n 'yellow-darken-3': '#F9A825',\n 'yellow-darken-4': '#F57F17',\n 'yellow-accent-1': '#FFFF8D',\n 'yellow-accent-2': '#FFFF00',\n 'yellow-accent-3': '#FFEA00',\n 'yellow-accent-4': '#FFD600',\n 'amber': '#FFC107',\n 'amber-lighten-5': '#FFF8E1',\n 'amber-lighten-4': '#FFECB3',\n 'amber-lighten-3': '#FFE082',\n 'amber-lighten-2': '#FFD54F',\n 'amber-lighten-1': '#FFCA28',\n 'amber-darken-1': '#FFB300',\n 'amber-darken-2': '#FFA000',\n 'amber-darken-3': '#FF8F00',\n 'amber-darken-4': '#FF6F00',\n 'amber-accent-1': '#FFE57F',\n 'amber-accent-2': '#FFD740',\n 'amber-accent-3': '#FFC400',\n 'amber-accent-4': '#FFAB00',\n 'orange': '#FF9800',\n 'orange-lighten-5': '#FFF3E0',\n 'orange-lighten-4': '#FFE0B2',\n 'orange-lighten-3': '#FFCC80',\n 'orange-lighten-2': '#FFB74D',\n 'orange-lighten-1': '#FFA726',\n 'orange-darken-1': '#FB8C00',\n 'orange-darken-2': '#F57C00',\n 'orange-darken-3': '#EF6C00',\n 'orange-darken-4': '#E65100',\n 'orange-accent-1': '#FFD180',\n 'orange-accent-2': '#FFAB40',\n 'orange-accent-3': '#FF9100',\n 'orange-accent-4': '#FF6D00',\n 'deep-orange': '#FF5722',\n 'deep-orange-lighten-5': '#FBE9E7',\n 'deep-orange-lighten-4': '#FFCCBC',\n 'deep-orange-lighten-3': '#FFAB91',\n 'deep-orange-lighten-2': '#FF8A65',\n 'deep-orange-lighten-1': '#FF7043',\n 'deep-orange-darken-1': '#F4511E',\n 'deep-orange-darken-2': '#E64A19',\n 'deep-orange-darken-3': '#D84315',\n 'deep-orange-darken-4': '#BF360C',\n 'deep-orange-accent-1': '#FF9E80',\n 'deep-orange-accent-2': '#FF6E40',\n 'deep-orange-accent-3': '#FF3D00',\n 'deep-orange-accent-4': '#DD2C00',\n 'brown': '#795548',\n 'brown-lighten-5': '#EFEBE9',\n 'brown-lighten-4': '#D7CCC8',\n 'brown-lighten-3': '#BCAAA4',\n 'brown-lighten-2': '#A1887F',\n 'brown-lighten-1': '#8D6E63',\n 'brown-darken-1': '#6D4C41',\n 'brown-darken-2': '#5D4037',\n 'brown-darken-3': '#4E342E',\n 'brown-darken-4': '#3E2723',\n 'blue-grey': '#607D8B',\n 'blue-grey-lighten-5': '#ECEFF1',\n 'blue-grey-lighten-4': '#CFD8DC',\n 'blue-grey-lighten-3': '#B0BEC5',\n 'blue-grey-lighten-2': '#90A4AE',\n 'blue-grey-lighten-1': '#78909C',\n 'blue-grey-darken-1': '#546E7A',\n 'blue-grey-darken-2': '#455A64',\n 'blue-grey-darken-3': '#37474F',\n 'blue-grey-darken-4': '#263238',\n 'grey': '#9E9E9E',\n 'gray': '#9E9E9E',\n 'grey-lighten-5': '#FAFAFA',\n 'grey-lighten-4': '#F5F5F5',\n 'grey-lighten-3': '#EEEEEE',\n 'grey-lighten-2': '#E0E0E0',\n 'grey-lighten-1': '#BDBDBD',\n 'grey-darken-1': '#757575',\n 'grey-darken-2': '#616161',\n 'grey-darken-3': '#424242',\n 'grey-darken-4': '#212121',\n}\n\nfunction parseColor(input: string): RGB | null {\n const trimmed = input.trim()\n const lower = trimmed.toLowerCase()\n\n if (NAMED_COLORS[lower]) {\n return hexToRgb(NAMED_COLORS[lower])\n }\n\n if (trimmed.startsWith('#')) return hexToRgb(trimmed)\n if (lower.startsWith('rgb(')) return parseRgbString(trimmed)\n if (lower.startsWith('hsl(')) {\n const hsl = parseHslString(trimmed)\n return hsl ? hslToRgb(hsl) : null\n }\n\n return hexToRgb(trimmed)\n}\n\nfunction rgbToHex(rgb: RGB): string {\n const toHex = (n: number) =>\n Math.round(Math.max(0, Math.min(255, n)))\n .toString(16)\n .padStart(2, '0')\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`\n}\n\nfunction rgbToHsl(rgb: RGB): HSL {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n\n if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) }\n\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n let h = 0\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n else if (max === g) h = ((b - r) / d + 2) / 6\n else h = ((r - g) / d + 4) / 6\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n }\n}\n\nfunction hslToRgb(hsl: HSL): RGB {\n const h = hsl.h / 360\n const s = hsl.s / 100\n const l = hsl.l / 100\n\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n\n return {\n r: Math.round(hue2rgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, h) * 255),\n b: Math.round(hue2rgb(p, q, h - 1 / 3) * 255),\n }\n}\n\nfunction relativeLuminance(rgb: RGB): number {\n const srgb = [rgb.r, rgb.g, rgb.b].map((c) => {\n const s = c / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2]\n}\n\nfunction contrastRatio(c1: RGB, c2: RGB): number {\n const l1 = relativeLuminance(c1)\n const l2 = relativeLuminance(c2)\n const lighter = Math.max(l1, l2)\n const darker = Math.min(l1, l2)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\nfunction rotateHue(hsl: HSL, degrees: number): HSL {\n return { h: (hsl.h + degrees + 360) % 360, s: hsl.s, l: hsl.l }\n}\n\nfunction formatColor(rgb: RGB): string {\n const hex = rgbToHex(rgb)\n const hsl = rgbToHsl(rgb)\n return `${hex} / rgb(${rgb.r}, ${rgb.g}, ${rgb.b}) / hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`\n}\n\n/**\n * Compute the WCAG 2.1 contrast ratio between two colours.\n *\n * @remarks\n * Accepts hex (`#rgb`, `#rrggbb`), `rgb()`, `hsl()`, or one of the CSS / Material Design named\n * colours. Reports the ratio and pass/fail against WCAG AA and AAA at both normal and large text\n * sizes. If the foreground/background combination fails AA Normal (4.5:1), the tool suggests\n * lightened or darkened variants that would pass.\n */\nexport const colorContrastTool = new Tool({\n name: 'color_contrast',\n description:\n 'Check the contrast ratio between two colors for WCAG accessibility compliance. Reports the contrast ratio and pass/fail for WCAG AA and AAA levels.',\n inputSchema: validator.object({\n foreground: validator\n .string()\n .required()\n .description('Foreground color (hex, rgb(), hsl(), or named color).'),\n background: validator\n .string()\n .required()\n .description('Background color (hex, rgb(), hsl(), or named color).'),\n }),\n handler: async (args) => {\n const { foreground, background } = args as { foreground: string; background: string }\n const fg = parseColor(foreground)\n const bg = parseColor(background)\n\n if (!fg) return `Error: could not parse foreground color \"${foreground}\".`\n if (!bg) return `Error: could not parse background color \"${background}\".`\n\n const ratio = contrastRatio(fg, bg)\n const rounded = Math.round(ratio * 100) / 100\n\n const aaLargeText = ratio >= 3\n const aaNormalText = ratio >= 4.5\n const aaaLargeText = ratio >= 4.5\n const aaaNormalText = ratio >= 7\n\n const lines = [\n `Foreground: ${formatColor(fg)}`,\n `Background: ${formatColor(bg)}`,\n `Contrast ratio: ${rounded}:1`,\n '',\n 'WCAG 2.1 compliance:',\n ` AA Normal text (4.5:1): ${aaNormalText ? 'PASS' : 'FAIL'}`,\n ` AA Large text (3.0:1): ${aaLargeText ? 'PASS' : 'FAIL'}`,\n ` AAA Normal text (7.0:1): ${aaaNormalText ? 'PASS' : 'FAIL'}`,\n ` AAA Large text (4.5:1): ${aaaLargeText ? 'PASS' : 'FAIL'}`,\n ]\n\n if (!aaNormalText) {\n const fgHsl = rgbToHsl(fg)\n const bgHsl = rgbToHsl(bg)\n const fgLighter = fgHsl.l > bgHsl.l\n\n const suggestions: string[] = []\n if (fgLighter) {\n const lighter = hslToRgb({ ...fgHsl, l: Math.min(100, fgHsl.l + 15) })\n const darkerBg = hslToRgb({ ...bgHsl, l: Math.max(0, bgHsl.l - 15) })\n if (contrastRatio(lighter, bg) >= 4.5) {\n suggestions.push(\n ` Lighten foreground to ${rgbToHex(lighter)} (ratio: ${Math.round(contrastRatio(lighter, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, darkerBg) >= 4.5) {\n suggestions.push(\n ` Darken background to ${rgbToHex(darkerBg)} (ratio: ${Math.round(contrastRatio(fg, darkerBg) * 100) / 100}:1)`\n )\n }\n } else {\n const darker = hslToRgb({ ...fgHsl, l: Math.max(0, fgHsl.l - 15) })\n const lighterBg = hslToRgb({ ...bgHsl, l: Math.min(100, bgHsl.l + 15) })\n if (contrastRatio(darker, bg) >= 4.5) {\n suggestions.push(\n ` Darken foreground to ${rgbToHex(darker)} (ratio: ${Math.round(contrastRatio(darker, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, lighterBg) >= 4.5) {\n suggestions.push(\n ` Lighten background to ${rgbToHex(lighterBg)} (ratio: ${Math.round(contrastRatio(fg, lighterBg) * 100) / 100}:1)`\n )\n }\n }\n\n if (suggestions.length > 0) {\n lines.push('', 'Suggestions to reach AA Normal (4.5:1):')\n lines.push(...suggestions)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Generate a colour palette from a base colour using a named harmony.\n *\n * @remarks\n * Supported schemes: `complementary`, `analogous`, `triadic`, `split-complementary`,\n * `monochromatic`. Each entry reports its hex, rgb, and hsl forms, plus the contrast ratio\n * relative to the base colour.\n */\nexport const colorSchemeTool = new Tool({\n name: 'color_scheme',\n description:\n 'Generate a color palette from a base color. Supports complementary, analogous, triadic, split-complementary, and monochromatic schemes.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Base color (hex, rgb(), hsl(), or named color).'),\n scheme: validator\n .string()\n .valid('complementary', 'analogous', 'triadic', 'split-complementary', 'monochromatic')\n .required()\n .description('Type of color scheme to generate.'),\n }),\n handler: async (args) => {\n const { color, scheme } = args as {\n color: string\n scheme: 'complementary' | 'analogous' | 'triadic' | 'split-complementary' | 'monochromatic'\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const hsl = rgbToHsl(rgb)\n const palette: { label: string; rgb: RGB }[] = [{ label: 'Base', rgb }]\n\n switch (scheme) {\n case 'complementary':\n palette.push({ label: 'Complement', rgb: hslToRgb(rotateHue(hsl, 180)) })\n break\n\n case 'analogous':\n palette.push({ label: 'Analogous -30', rgb: hslToRgb(rotateHue(hsl, -30)) })\n palette.push({ label: 'Analogous +30', rgb: hslToRgb(rotateHue(hsl, 30)) })\n break\n\n case 'triadic':\n palette.push({ label: 'Triadic +120', rgb: hslToRgb(rotateHue(hsl, 120)) })\n palette.push({ label: 'Triadic +240', rgb: hslToRgb(rotateHue(hsl, 240)) })\n break\n\n case 'split-complementary':\n palette.push({ label: 'Split +150', rgb: hslToRgb(rotateHue(hsl, 150)) })\n palette.push({ label: 'Split +210', rgb: hslToRgb(rotateHue(hsl, 210)) })\n break\n\n case 'monochromatic':\n palette.push({ label: 'Light', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 20) }) })\n palette.push({ label: 'Lighter', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 35) }) })\n palette.push({ label: 'Dark', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 20) }) })\n palette.push({ label: 'Darker', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 35) }) })\n break\n }\n\n const lines = [`Color scheme: ${scheme}`, '']\n for (const entry of palette) {\n lines.push(`${entry.label}: ${formatColor(entry.rgb)}`)\n }\n\n if (palette.length > 1) {\n lines.push('', 'Contrast ratios with base:')\n for (const entry of palette.slice(1)) {\n const ratio = Math.round(contrastRatio(rgb, entry.rgb) * 100) / 100\n lines.push(` ${entry.label}: ${ratio}:1`)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Lighten or darken a colour by a percentage of HSL lightness.\n *\n * @remarks\n * `amount` is clamped to `[1, 100]`; `steps` is clamped to `[1, 10]`. With `steps > 1` the tool\n * emits a ramp of progressively-adjusted colours, useful for generating tint/shade scales.\n */\nexport const colorAdjustTool = new Tool({\n name: 'color_adjust',\n description:\n 'Lighten or darken a color by a specified amount. Returns the adjusted color in hex, rgb, and hsl formats. Can generate multiple steps for a tint/shade scale.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Color to adjust (hex, rgb(), hsl(), or named color).'),\n action: validator\n .string()\n .valid('lighten', 'darken')\n .required()\n .description('Whether to lighten or darken the color.'),\n amount: validator\n .number()\n .default(15)\n .description('Amount to adjust per step (1-100, percentage of lightness). Default: 15.'),\n steps: validator\n .number()\n .default(1)\n .description('Generate multiple steps of adjustment (1-10). Default: 1.'),\n }),\n handler: async (args) => {\n const {\n color,\n action,\n amount: rawAmount,\n steps: rawSteps,\n } = args as {\n color: string\n action: 'lighten' | 'darken'\n amount: number\n steps: number\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const amount = Math.max(1, Math.min(100, rawAmount))\n const steps = Math.max(1, Math.min(10, rawSteps))\n const hsl = rgbToHsl(rgb)\n\n const lines = [`Original: ${formatColor(rgb)}`]\n\n for (let i = 1; i <= steps; i++) {\n const delta = amount * i\n const newL = action === 'lighten' ? Math.min(100, hsl.l + delta) : Math.max(0, hsl.l - delta)\n const adjusted = hslToRgb({ ...hsl, l: newL })\n const label =\n steps === 1\n ? `${action === 'lighten' ? 'Lightened' : 'Darkened'} (${delta}%)`\n : `Step ${i} (${action} ${delta}%)`\n lines.push(`${label}: ${formatColor(adjusted)}`)\n }\n\n return lines.join('\\n')\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"color.cjs","names":[],"sources":["../../../src/batteries/tools/color/index.ts"],"sourcesContent":["/**\n * Pre-constructed tools for color conversion and palette-oriented calculations.\n *\n * @module @nhtio/adk/batteries/tools/color\n *\n * @remarks\n * Pre-constructed bundled tools for the `color` category. Import individually, the whole\n * category, or import every tool via `@nhtio/adk/batteries`.\n */\n\nimport { Tool } from '@nhtio/adk/common'\nimport { validator } from '@nhtio/validation'\n\ntype RGB = { r: number; g: number; b: number }\ntype HSL = { h: number; s: number; l: number }\n\nfunction hexToRgb(hex: string): RGB | null {\n const cleaned = hex.replace(/^#/, '')\n // Reject any non-hex character up front. `Number.parseInt('1Z', 16)` silently drops the trailing\n // 'Z' and returns 1 (passing the NaN check below), so '#1Z2Z3Z' would otherwise be accepted as a\n // bogus colour rgb(1, 2, 3).\n if (!/^[0-9a-fA-F]+$/.test(cleaned)) return null\n\n let r: number\n let g: number\n let b: number\n\n if (cleaned.length === 3) {\n r = Number.parseInt(cleaned[0] + cleaned[0], 16)\n g = Number.parseInt(cleaned[1] + cleaned[1], 16)\n b = Number.parseInt(cleaned[2] + cleaned[2], 16)\n } else if (cleaned.length === 6) {\n r = Number.parseInt(cleaned.slice(0, 2), 16)\n g = Number.parseInt(cleaned.slice(2, 4), 16)\n b = Number.parseInt(cleaned.slice(4, 6), 16)\n } else {\n return null\n }\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return null\n return { r, g, b }\n}\n\nfunction parseRgbString(input: string): RGB | null {\n const match = input.match(/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i)\n if (!match) return null\n const r = Number.parseInt(match[1], 10)\n const g = Number.parseInt(match[2], 10)\n const b = Number.parseInt(match[3], 10)\n if (r > 255 || g > 255 || b > 255) return null\n return { r, g, b }\n}\n\nfunction parseHslString(input: string): HSL | null {\n const match = input.match(/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?\\s*\\)$/i)\n if (!match) return null\n return {\n h: Number.parseInt(match[1], 10) % 360,\n s: Math.min(100, Number.parseInt(match[2], 10)),\n l: Math.min(100, Number.parseInt(match[3], 10)),\n }\n}\n\nconst NAMED_COLORS: Record<string, string> = {\n 'black': '#000000',\n 'white': '#FFFFFF',\n 'transparent': '#FFFFFF',\n 'aqua': '#00FFFF',\n 'magenta': '#FF00FF',\n 'fuchsia': '#FF00FF',\n 'silver': '#C0C0C0',\n 'maroon': '#800000',\n 'olive': '#808000',\n 'navy': '#000080',\n 'coral': '#FF7F50',\n 'crimson': '#DC143C',\n 'gold': '#FFD700',\n 'ivory': '#FFFFF0',\n 'khaki': '#F0E68C',\n 'lavender': '#E6E6FA',\n 'plum': '#DDA0DD',\n 'salmon': '#FA8072',\n 'sienna': '#A0522D',\n 'tan': '#D2B48C',\n 'tomato': '#FF6347',\n 'turquoise': '#40E0D0',\n 'violet': '#EE82EE',\n 'wheat': '#F5DEB3',\n 'red': '#F44336',\n 'red-lighten-5': '#FFEBEE',\n 'red-lighten-4': '#FFCDD2',\n 'red-lighten-3': '#EF9A9A',\n 'red-lighten-2': '#E57373',\n 'red-lighten-1': '#EF5350',\n 'red-darken-1': '#E53935',\n 'red-darken-2': '#D32F2F',\n 'red-darken-3': '#C62828',\n 'red-darken-4': '#B71C1C',\n 'red-accent-1': '#FF8A80',\n 'red-accent-2': '#FF5252',\n 'red-accent-3': '#FF1744',\n 'red-accent-4': '#D50000',\n 'pink': '#E91E63',\n 'pink-lighten-5': '#FCE4EC',\n 'pink-lighten-4': '#F8BBD0',\n 'pink-lighten-3': '#F48FB1',\n 'pink-lighten-2': '#F06292',\n 'pink-lighten-1': '#EC407A',\n 'pink-darken-1': '#D81B60',\n 'pink-darken-2': '#C2185B',\n 'pink-darken-3': '#AD1457',\n 'pink-darken-4': '#880E4F',\n 'pink-accent-1': '#FF80AB',\n 'pink-accent-2': '#FF4081',\n 'pink-accent-3': '#F50057',\n 'pink-accent-4': '#C51162',\n 'purple': '#9C27B0',\n 'purple-lighten-5': '#F3E5F5',\n 'purple-lighten-4': '#E1BEE7',\n 'purple-lighten-3': '#CE93D8',\n 'purple-lighten-2': '#BA68C8',\n 'purple-lighten-1': '#AB47BC',\n 'purple-darken-1': '#8E24AA',\n 'purple-darken-2': '#7B1FA2',\n 'purple-darken-3': '#6A1B9A',\n 'purple-darken-4': '#4A148C',\n 'purple-accent-1': '#EA80FC',\n 'purple-accent-2': '#E040FB',\n 'purple-accent-3': '#D500F9',\n 'purple-accent-4': '#AA00FF',\n 'deep-purple': '#673AB7',\n 'deep-purple-lighten-5': '#EDE7F6',\n 'deep-purple-lighten-4': '#D1C4E9',\n 'deep-purple-lighten-3': '#B39DDB',\n 'deep-purple-lighten-2': '#9575CD',\n 'deep-purple-lighten-1': '#7E57C2',\n 'deep-purple-darken-1': '#5E35B1',\n 'deep-purple-darken-2': '#512DA8',\n 'deep-purple-darken-3': '#4527A0',\n 'deep-purple-darken-4': '#311B92',\n 'deep-purple-accent-1': '#B388FF',\n 'deep-purple-accent-2': '#7C4DFF',\n 'deep-purple-accent-3': '#651FFF',\n 'deep-purple-accent-4': '#6200EA',\n 'indigo': '#3F51B5',\n 'indigo-lighten-5': '#E8EAF6',\n 'indigo-lighten-4': '#C5CAE9',\n 'indigo-lighten-3': '#9FA8DA',\n 'indigo-lighten-2': '#7986CB',\n 'indigo-lighten-1': '#5C6BC0',\n 'indigo-darken-1': '#3949AB',\n 'indigo-darken-2': '#303F9F',\n 'indigo-darken-3': '#283593',\n 'indigo-darken-4': '#1A237E',\n 'indigo-accent-1': '#8C9EFF',\n 'indigo-accent-2': '#536DFE',\n 'indigo-accent-3': '#3D5AFE',\n 'indigo-accent-4': '#304FFE',\n 'blue': '#2196F3',\n 'blue-lighten-5': '#E3F2FD',\n 'blue-lighten-4': '#BBDEFB',\n 'blue-lighten-3': '#90CAF9',\n 'blue-lighten-2': '#64B5F6',\n 'blue-lighten-1': '#42A5F5',\n 'blue-darken-1': '#1E88E5',\n 'blue-darken-2': '#1976D2',\n 'blue-darken-3': '#1565C0',\n 'blue-darken-4': '#0D47A1',\n 'blue-accent-1': '#82B1FF',\n 'blue-accent-2': '#448AFF',\n 'blue-accent-3': '#2979FF',\n 'blue-accent-4': '#2962FF',\n 'light-blue': '#03A9F4',\n 'light-blue-lighten-5': '#E1F5FE',\n 'light-blue-lighten-4': '#B3E5FC',\n 'light-blue-lighten-3': '#81D4FA',\n 'light-blue-lighten-2': '#4FC3F7',\n 'light-blue-lighten-1': '#29B6F6',\n 'light-blue-darken-1': '#039BE5',\n 'light-blue-darken-2': '#0288D1',\n 'light-blue-darken-3': '#0277BD',\n 'light-blue-darken-4': '#01579B',\n 'light-blue-accent-1': '#80D8FF',\n 'light-blue-accent-2': '#40C4FF',\n 'light-blue-accent-3': '#00B0FF',\n 'light-blue-accent-4': '#0091EA',\n 'cyan': '#00BCD4',\n 'cyan-lighten-5': '#E0F7FA',\n 'cyan-lighten-4': '#B2EBF2',\n 'cyan-lighten-3': '#80DEEA',\n 'cyan-lighten-2': '#4DD0E1',\n 'cyan-lighten-1': '#26C6DA',\n 'cyan-darken-1': '#00ACC1',\n 'cyan-darken-2': '#0097A7',\n 'cyan-darken-3': '#00838F',\n 'cyan-darken-4': '#006064',\n 'cyan-accent-1': '#84FFFF',\n 'cyan-accent-2': '#18FFFF',\n 'cyan-accent-3': '#00E5FF',\n 'cyan-accent-4': '#00B8D4',\n 'teal': '#009688',\n 'teal-lighten-5': '#E0F2F1',\n 'teal-lighten-4': '#B2DFDB',\n 'teal-lighten-3': '#80CBC4',\n 'teal-lighten-2': '#4DB6AC',\n 'teal-lighten-1': '#26A69A',\n 'teal-darken-1': '#00897B',\n 'teal-darken-2': '#00796B',\n 'teal-darken-3': '#00695C',\n 'teal-darken-4': '#004D40',\n 'teal-accent-1': '#A7FFEB',\n 'teal-accent-2': '#64FFDA',\n 'teal-accent-3': '#1DE9B6',\n 'teal-accent-4': '#00BFA5',\n 'green': '#4CAF50',\n 'green-lighten-5': '#E8F5E9',\n 'green-lighten-4': '#C8E6C9',\n 'green-lighten-3': '#A5D6A7',\n 'green-lighten-2': '#81C784',\n 'green-lighten-1': '#66BB6A',\n 'green-darken-1': '#43A047',\n 'green-darken-2': '#388E3C',\n 'green-darken-3': '#2E7D32',\n 'green-darken-4': '#1B5E20',\n 'green-accent-1': '#B9F6CA',\n 'green-accent-2': '#69F0AE',\n 'green-accent-3': '#00E676',\n 'green-accent-4': '#00C853',\n 'light-green': '#8BC34A',\n 'light-green-lighten-5': '#F1F8E9',\n 'light-green-lighten-4': '#DCEDC8',\n 'light-green-lighten-3': '#C5E1A5',\n 'light-green-lighten-2': '#AED581',\n 'light-green-lighten-1': '#9CCC65',\n 'light-green-darken-1': '#7CB342',\n 'light-green-darken-2': '#689F38',\n 'light-green-darken-3': '#558B2F',\n 'light-green-darken-4': '#33691E',\n 'light-green-accent-1': '#CCFF90',\n 'light-green-accent-2': '#B2FF59',\n 'light-green-accent-3': '#76FF03',\n 'light-green-accent-4': '#64DD17',\n 'lime': '#CDDC39',\n 'lime-lighten-5': '#F9FBE7',\n 'lime-lighten-4': '#F0F4C3',\n 'lime-lighten-3': '#E6EE9C',\n 'lime-lighten-2': '#DCE775',\n 'lime-lighten-1': '#D4E157',\n 'lime-darken-1': '#C0CA33',\n 'lime-darken-2': '#AFB42B',\n 'lime-darken-3': '#9E9D24',\n 'lime-darken-4': '#827717',\n 'lime-accent-1': '#F4FF81',\n 'lime-accent-2': '#EEFF41',\n 'lime-accent-3': '#C6FF00',\n 'lime-accent-4': '#AEEA00',\n 'yellow': '#FFEB3B',\n 'yellow-lighten-5': '#FFFDE7',\n 'yellow-lighten-4': '#FFF9C4',\n 'yellow-lighten-3': '#FFF59D',\n 'yellow-lighten-2': '#FFF176',\n 'yellow-lighten-1': '#FFEE58',\n 'yellow-darken-1': '#FDD835',\n 'yellow-darken-2': '#FBC02D',\n 'yellow-darken-3': '#F9A825',\n 'yellow-darken-4': '#F57F17',\n 'yellow-accent-1': '#FFFF8D',\n 'yellow-accent-2': '#FFFF00',\n 'yellow-accent-3': '#FFEA00',\n 'yellow-accent-4': '#FFD600',\n 'amber': '#FFC107',\n 'amber-lighten-5': '#FFF8E1',\n 'amber-lighten-4': '#FFECB3',\n 'amber-lighten-3': '#FFE082',\n 'amber-lighten-2': '#FFD54F',\n 'amber-lighten-1': '#FFCA28',\n 'amber-darken-1': '#FFB300',\n 'amber-darken-2': '#FFA000',\n 'amber-darken-3': '#FF8F00',\n 'amber-darken-4': '#FF6F00',\n 'amber-accent-1': '#FFE57F',\n 'amber-accent-2': '#FFD740',\n 'amber-accent-3': '#FFC400',\n 'amber-accent-4': '#FFAB00',\n 'orange': '#FF9800',\n 'orange-lighten-5': '#FFF3E0',\n 'orange-lighten-4': '#FFE0B2',\n 'orange-lighten-3': '#FFCC80',\n 'orange-lighten-2': '#FFB74D',\n 'orange-lighten-1': '#FFA726',\n 'orange-darken-1': '#FB8C00',\n 'orange-darken-2': '#F57C00',\n 'orange-darken-3': '#EF6C00',\n 'orange-darken-4': '#E65100',\n 'orange-accent-1': '#FFD180',\n 'orange-accent-2': '#FFAB40',\n 'orange-accent-3': '#FF9100',\n 'orange-accent-4': '#FF6D00',\n 'deep-orange': '#FF5722',\n 'deep-orange-lighten-5': '#FBE9E7',\n 'deep-orange-lighten-4': '#FFCCBC',\n 'deep-orange-lighten-3': '#FFAB91',\n 'deep-orange-lighten-2': '#FF8A65',\n 'deep-orange-lighten-1': '#FF7043',\n 'deep-orange-darken-1': '#F4511E',\n 'deep-orange-darken-2': '#E64A19',\n 'deep-orange-darken-3': '#D84315',\n 'deep-orange-darken-4': '#BF360C',\n 'deep-orange-accent-1': '#FF9E80',\n 'deep-orange-accent-2': '#FF6E40',\n 'deep-orange-accent-3': '#FF3D00',\n 'deep-orange-accent-4': '#DD2C00',\n 'brown': '#795548',\n 'brown-lighten-5': '#EFEBE9',\n 'brown-lighten-4': '#D7CCC8',\n 'brown-lighten-3': '#BCAAA4',\n 'brown-lighten-2': '#A1887F',\n 'brown-lighten-1': '#8D6E63',\n 'brown-darken-1': '#6D4C41',\n 'brown-darken-2': '#5D4037',\n 'brown-darken-3': '#4E342E',\n 'brown-darken-4': '#3E2723',\n 'blue-grey': '#607D8B',\n 'blue-grey-lighten-5': '#ECEFF1',\n 'blue-grey-lighten-4': '#CFD8DC',\n 'blue-grey-lighten-3': '#B0BEC5',\n 'blue-grey-lighten-2': '#90A4AE',\n 'blue-grey-lighten-1': '#78909C',\n 'blue-grey-darken-1': '#546E7A',\n 'blue-grey-darken-2': '#455A64',\n 'blue-grey-darken-3': '#37474F',\n 'blue-grey-darken-4': '#263238',\n 'grey': '#9E9E9E',\n 'gray': '#9E9E9E',\n 'grey-lighten-5': '#FAFAFA',\n 'grey-lighten-4': '#F5F5F5',\n 'grey-lighten-3': '#EEEEEE',\n 'grey-lighten-2': '#E0E0E0',\n 'grey-lighten-1': '#BDBDBD',\n 'grey-darken-1': '#757575',\n 'grey-darken-2': '#616161',\n 'grey-darken-3': '#424242',\n 'grey-darken-4': '#212121',\n}\n\nfunction parseColor(input: string): RGB | null {\n const trimmed = input.trim()\n const lower = trimmed.toLowerCase()\n\n if (NAMED_COLORS[lower]) {\n return hexToRgb(NAMED_COLORS[lower])\n }\n\n if (trimmed.startsWith('#')) return hexToRgb(trimmed)\n if (lower.startsWith('rgb(')) return parseRgbString(trimmed)\n if (lower.startsWith('hsl(')) {\n const hsl = parseHslString(trimmed)\n return hsl ? hslToRgb(hsl) : null\n }\n\n return hexToRgb(trimmed)\n}\n\nfunction rgbToHex(rgb: RGB): string {\n const toHex = (n: number) =>\n Math.round(Math.max(0, Math.min(255, n)))\n .toString(16)\n .padStart(2, '0')\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`\n}\n\nfunction rgbToHsl(rgb: RGB): HSL {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n\n if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) }\n\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n let h = 0\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n else if (max === g) h = ((b - r) / d + 2) / 6\n else h = ((r - g) / d + 4) / 6\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n }\n}\n\nfunction hslToRgb(hsl: HSL): RGB {\n const h = hsl.h / 360\n const s = hsl.s / 100\n const l = hsl.l / 100\n\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n\n return {\n r: Math.round(hue2rgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, h) * 255),\n b: Math.round(hue2rgb(p, q, h - 1 / 3) * 255),\n }\n}\n\nfunction relativeLuminance(rgb: RGB): number {\n const srgb = [rgb.r, rgb.g, rgb.b].map((c) => {\n const s = c / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2]\n}\n\nfunction contrastRatio(c1: RGB, c2: RGB): number {\n const l1 = relativeLuminance(c1)\n const l2 = relativeLuminance(c2)\n const lighter = Math.max(l1, l2)\n const darker = Math.min(l1, l2)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\nfunction rotateHue(hsl: HSL, degrees: number): HSL {\n return { h: (hsl.h + degrees + 360) % 360, s: hsl.s, l: hsl.l }\n}\n\nfunction formatColor(rgb: RGB): string {\n const hex = rgbToHex(rgb)\n const hsl = rgbToHsl(rgb)\n return `${hex} / rgb(${rgb.r}, ${rgb.g}, ${rgb.b}) / hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`\n}\n\n/**\n * Compute the WCAG 2.1 contrast ratio between two colours.\n *\n * @remarks\n * Accepts hex (`#rgb`, `#rrggbb`), `rgb()`, `hsl()`, or one of the CSS / Material Design named\n * colours. Reports the ratio and pass/fail against WCAG AA and AAA at both normal and large text\n * sizes. If the foreground/background combination fails AA Normal (4.5:1), the tool suggests\n * lightened or darkened variants that would pass.\n */\nexport const colorContrastTool = new Tool({\n name: 'color_contrast',\n description:\n 'Check the contrast ratio between two colors for WCAG accessibility compliance. Reports the contrast ratio and pass/fail for WCAG AA and AAA levels.',\n inputSchema: validator.object({\n foreground: validator\n .string()\n .required()\n .description('Foreground color (hex, rgb(), hsl(), or named color).'),\n background: validator\n .string()\n .required()\n .description('Background color (hex, rgb(), hsl(), or named color).'),\n }),\n handler: async (args) => {\n const { foreground, background } = args as { foreground: string; background: string }\n const fg = parseColor(foreground)\n const bg = parseColor(background)\n\n if (!fg) return `Error: could not parse foreground color \"${foreground}\".`\n if (!bg) return `Error: could not parse background color \"${background}\".`\n\n const ratio = contrastRatio(fg, bg)\n const rounded = Math.round(ratio * 100) / 100\n\n const aaLargeText = ratio >= 3\n const aaNormalText = ratio >= 4.5\n const aaaLargeText = ratio >= 4.5\n const aaaNormalText = ratio >= 7\n\n const lines = [\n `Foreground: ${formatColor(fg)}`,\n `Background: ${formatColor(bg)}`,\n `Contrast ratio: ${rounded}:1`,\n '',\n 'WCAG 2.1 compliance:',\n ` AA Normal text (4.5:1): ${aaNormalText ? 'PASS' : 'FAIL'}`,\n ` AA Large text (3.0:1): ${aaLargeText ? 'PASS' : 'FAIL'}`,\n ` AAA Normal text (7.0:1): ${aaaNormalText ? 'PASS' : 'FAIL'}`,\n ` AAA Large text (4.5:1): ${aaaLargeText ? 'PASS' : 'FAIL'}`,\n ]\n\n if (!aaNormalText) {\n const fgHsl = rgbToHsl(fg)\n const bgHsl = rgbToHsl(bg)\n const fgLighter = fgHsl.l > bgHsl.l\n\n const suggestions: string[] = []\n if (fgLighter) {\n const lighter = hslToRgb({ ...fgHsl, l: Math.min(100, fgHsl.l + 15) })\n const darkerBg = hslToRgb({ ...bgHsl, l: Math.max(0, bgHsl.l - 15) })\n if (contrastRatio(lighter, bg) >= 4.5) {\n suggestions.push(\n ` Lighten foreground to ${rgbToHex(lighter)} (ratio: ${Math.round(contrastRatio(lighter, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, darkerBg) >= 4.5) {\n suggestions.push(\n ` Darken background to ${rgbToHex(darkerBg)} (ratio: ${Math.round(contrastRatio(fg, darkerBg) * 100) / 100}:1)`\n )\n }\n } else {\n const darker = hslToRgb({ ...fgHsl, l: Math.max(0, fgHsl.l - 15) })\n const lighterBg = hslToRgb({ ...bgHsl, l: Math.min(100, bgHsl.l + 15) })\n if (contrastRatio(darker, bg) >= 4.5) {\n suggestions.push(\n ` Darken foreground to ${rgbToHex(darker)} (ratio: ${Math.round(contrastRatio(darker, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, lighterBg) >= 4.5) {\n suggestions.push(\n ` Lighten background to ${rgbToHex(lighterBg)} (ratio: ${Math.round(contrastRatio(fg, lighterBg) * 100) / 100}:1)`\n )\n }\n }\n\n if (suggestions.length > 0) {\n lines.push('', 'Suggestions to reach AA Normal (4.5:1):')\n lines.push(...suggestions)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Generate a colour palette from a base colour using a named harmony.\n *\n * @remarks\n * Supported schemes: `complementary`, `analogous`, `triadic`, `split-complementary`,\n * `monochromatic`. Each entry reports its hex, rgb, and hsl forms, plus the contrast ratio\n * relative to the base colour.\n */\nexport const colorSchemeTool = new Tool({\n name: 'color_scheme',\n description:\n 'Generate a color palette from a base color. Supports complementary, analogous, triadic, split-complementary, and monochromatic schemes.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Base color (hex, rgb(), hsl(), or named color).'),\n scheme: validator\n .string()\n .valid('complementary', 'analogous', 'triadic', 'split-complementary', 'monochromatic')\n .required()\n .description('Type of color scheme to generate.'),\n }),\n handler: async (args) => {\n const { color, scheme } = args as {\n color: string\n scheme: 'complementary' | 'analogous' | 'triadic' | 'split-complementary' | 'monochromatic'\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const hsl = rgbToHsl(rgb)\n const palette: { label: string; rgb: RGB }[] = [{ label: 'Base', rgb }]\n\n switch (scheme) {\n case 'complementary':\n palette.push({ label: 'Complement', rgb: hslToRgb(rotateHue(hsl, 180)) })\n break\n\n case 'analogous':\n palette.push({ label: 'Analogous -30', rgb: hslToRgb(rotateHue(hsl, -30)) })\n palette.push({ label: 'Analogous +30', rgb: hslToRgb(rotateHue(hsl, 30)) })\n break\n\n case 'triadic':\n palette.push({ label: 'Triadic +120', rgb: hslToRgb(rotateHue(hsl, 120)) })\n palette.push({ label: 'Triadic +240', rgb: hslToRgb(rotateHue(hsl, 240)) })\n break\n\n case 'split-complementary':\n palette.push({ label: 'Split +150', rgb: hslToRgb(rotateHue(hsl, 150)) })\n palette.push({ label: 'Split +210', rgb: hslToRgb(rotateHue(hsl, 210)) })\n break\n\n case 'monochromatic':\n palette.push({ label: 'Light', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 20) }) })\n palette.push({ label: 'Lighter', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 35) }) })\n palette.push({ label: 'Dark', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 20) }) })\n palette.push({ label: 'Darker', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 35) }) })\n break\n }\n\n const lines = [`Color scheme: ${scheme}`, '']\n for (const entry of palette) {\n lines.push(`${entry.label}: ${formatColor(entry.rgb)}`)\n }\n\n if (palette.length > 1) {\n lines.push('', 'Contrast ratios with base:')\n for (const entry of palette.slice(1)) {\n const ratio = Math.round(contrastRatio(rgb, entry.rgb) * 100) / 100\n lines.push(` ${entry.label}: ${ratio}:1`)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Lighten or darken a colour by a percentage of HSL lightness.\n *\n * @remarks\n * `amount` is clamped to `[1, 100]`; `steps` is clamped to `[1, 10]`. With `steps > 1` the tool\n * emits a ramp of progressively-adjusted colours, useful for generating tint/shade scales.\n */\nexport const colorAdjustTool = new Tool({\n name: 'color_adjust',\n description:\n 'Lighten or darken a color by a specified amount. Returns the adjusted color in hex, rgb, and hsl formats. Can generate multiple steps for a tint/shade scale.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Color to adjust (hex, rgb(), hsl(), or named color).'),\n action: validator\n .string()\n .valid('lighten', 'darken')\n .required()\n .description('Whether to lighten or darken the color.'),\n amount: validator\n .number()\n .default(15)\n .description('Amount to adjust per step (1-100, percentage of lightness). Default: 15.'),\n steps: validator\n .number()\n .default(1)\n .description('Generate multiple steps of adjustment (1-10). Default: 1.'),\n }),\n handler: async (args) => {\n const {\n color,\n action,\n amount: rawAmount,\n steps: rawSteps,\n } = args as {\n color: string\n action: 'lighten' | 'darken'\n amount: number\n steps: number\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const amount = Math.max(1, Math.min(100, rawAmount))\n const steps = Math.max(1, Math.min(10, rawSteps))\n const hsl = rgbToHsl(rgb)\n\n const lines = [`Original: ${formatColor(rgb)}`]\n\n for (let i = 1; i <= steps; i++) {\n const delta = amount * i\n const newL = action === 'lighten' ? Math.min(100, hsl.l + delta) : Math.max(0, hsl.l - delta)\n const adjusted = hslToRgb({ ...hsl, l: newL })\n const label =\n steps === 1\n ? `${action === 'lighten' ? 'Lightened' : 'Darkened'} (${delta}%)`\n : `Step ${i} (${action} ${delta}%)`\n lines.push(`${label}: ${formatColor(adjusted)}`)\n }\n\n return lines.join('\\n')\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as Tool } from "../../tool-
|
|
2
|
-
import "../../common-
|
|
1
|
+
import { t as Tool } from "../../tool-wMYMVl60.mjs";
|
|
2
|
+
import "../../common-DYDUi99O.mjs";
|
|
3
3
|
import { validator } from "@nhtio/validation";
|
|
4
4
|
//#region src/batteries/tools/color/index.ts
|
|
5
5
|
/**
|
|
@@ -13,6 +13,7 @@ import { validator } from "@nhtio/validation";
|
|
|
13
13
|
*/
|
|
14
14
|
function hexToRgb(hex) {
|
|
15
15
|
const cleaned = hex.replace(/^#/, "");
|
|
16
|
+
if (!/^[0-9a-fA-F]+$/.test(cleaned)) return null;
|
|
16
17
|
let r;
|
|
17
18
|
let g;
|
|
18
19
|
let b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.mjs","names":[],"sources":["../../../src/batteries/tools/color/index.ts"],"sourcesContent":["/**\n * Pre-constructed tools for color conversion and palette-oriented calculations.\n *\n * @module @nhtio/adk/batteries/tools/color\n *\n * @remarks\n * Pre-constructed bundled tools for the `color` category. Import individually, the whole\n * category, or import every tool via `@nhtio/adk/batteries`.\n */\n\nimport { Tool } from '@nhtio/adk/common'\nimport { validator } from '@nhtio/validation'\n\ntype RGB = { r: number; g: number; b: number }\ntype HSL = { h: number; s: number; l: number }\n\nfunction hexToRgb(hex: string): RGB | null {\n const cleaned = hex.replace(/^#/, '')\n let r: number\n let g: number\n let b: number\n\n if (cleaned.length === 3) {\n r = Number.parseInt(cleaned[0] + cleaned[0], 16)\n g = Number.parseInt(cleaned[1] + cleaned[1], 16)\n b = Number.parseInt(cleaned[2] + cleaned[2], 16)\n } else if (cleaned.length === 6) {\n r = Number.parseInt(cleaned.slice(0, 2), 16)\n g = Number.parseInt(cleaned.slice(2, 4), 16)\n b = Number.parseInt(cleaned.slice(4, 6), 16)\n } else {\n return null\n }\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return null\n return { r, g, b }\n}\n\nfunction parseRgbString(input: string): RGB | null {\n const match = input.match(/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i)\n if (!match) return null\n const r = Number.parseInt(match[1], 10)\n const g = Number.parseInt(match[2], 10)\n const b = Number.parseInt(match[3], 10)\n if (r > 255 || g > 255 || b > 255) return null\n return { r, g, b }\n}\n\nfunction parseHslString(input: string): HSL | null {\n const match = input.match(/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?\\s*\\)$/i)\n if (!match) return null\n return {\n h: Number.parseInt(match[1], 10) % 360,\n s: Math.min(100, Number.parseInt(match[2], 10)),\n l: Math.min(100, Number.parseInt(match[3], 10)),\n }\n}\n\nconst NAMED_COLORS: Record<string, string> = {\n 'black': '#000000',\n 'white': '#FFFFFF',\n 'transparent': '#FFFFFF',\n 'aqua': '#00FFFF',\n 'magenta': '#FF00FF',\n 'fuchsia': '#FF00FF',\n 'silver': '#C0C0C0',\n 'maroon': '#800000',\n 'olive': '#808000',\n 'navy': '#000080',\n 'coral': '#FF7F50',\n 'crimson': '#DC143C',\n 'gold': '#FFD700',\n 'ivory': '#FFFFF0',\n 'khaki': '#F0E68C',\n 'lavender': '#E6E6FA',\n 'plum': '#DDA0DD',\n 'salmon': '#FA8072',\n 'sienna': '#A0522D',\n 'tan': '#D2B48C',\n 'tomato': '#FF6347',\n 'turquoise': '#40E0D0',\n 'violet': '#EE82EE',\n 'wheat': '#F5DEB3',\n 'red': '#F44336',\n 'red-lighten-5': '#FFEBEE',\n 'red-lighten-4': '#FFCDD2',\n 'red-lighten-3': '#EF9A9A',\n 'red-lighten-2': '#E57373',\n 'red-lighten-1': '#EF5350',\n 'red-darken-1': '#E53935',\n 'red-darken-2': '#D32F2F',\n 'red-darken-3': '#C62828',\n 'red-darken-4': '#B71C1C',\n 'red-accent-1': '#FF8A80',\n 'red-accent-2': '#FF5252',\n 'red-accent-3': '#FF1744',\n 'red-accent-4': '#D50000',\n 'pink': '#E91E63',\n 'pink-lighten-5': '#FCE4EC',\n 'pink-lighten-4': '#F8BBD0',\n 'pink-lighten-3': '#F48FB1',\n 'pink-lighten-2': '#F06292',\n 'pink-lighten-1': '#EC407A',\n 'pink-darken-1': '#D81B60',\n 'pink-darken-2': '#C2185B',\n 'pink-darken-3': '#AD1457',\n 'pink-darken-4': '#880E4F',\n 'pink-accent-1': '#FF80AB',\n 'pink-accent-2': '#FF4081',\n 'pink-accent-3': '#F50057',\n 'pink-accent-4': '#C51162',\n 'purple': '#9C27B0',\n 'purple-lighten-5': '#F3E5F5',\n 'purple-lighten-4': '#E1BEE7',\n 'purple-lighten-3': '#CE93D8',\n 'purple-lighten-2': '#BA68C8',\n 'purple-lighten-1': '#AB47BC',\n 'purple-darken-1': '#8E24AA',\n 'purple-darken-2': '#7B1FA2',\n 'purple-darken-3': '#6A1B9A',\n 'purple-darken-4': '#4A148C',\n 'purple-accent-1': '#EA80FC',\n 'purple-accent-2': '#E040FB',\n 'purple-accent-3': '#D500F9',\n 'purple-accent-4': '#AA00FF',\n 'deep-purple': '#673AB7',\n 'deep-purple-lighten-5': '#EDE7F6',\n 'deep-purple-lighten-4': '#D1C4E9',\n 'deep-purple-lighten-3': '#B39DDB',\n 'deep-purple-lighten-2': '#9575CD',\n 'deep-purple-lighten-1': '#7E57C2',\n 'deep-purple-darken-1': '#5E35B1',\n 'deep-purple-darken-2': '#512DA8',\n 'deep-purple-darken-3': '#4527A0',\n 'deep-purple-darken-4': '#311B92',\n 'deep-purple-accent-1': '#B388FF',\n 'deep-purple-accent-2': '#7C4DFF',\n 'deep-purple-accent-3': '#651FFF',\n 'deep-purple-accent-4': '#6200EA',\n 'indigo': '#3F51B5',\n 'indigo-lighten-5': '#E8EAF6',\n 'indigo-lighten-4': '#C5CAE9',\n 'indigo-lighten-3': '#9FA8DA',\n 'indigo-lighten-2': '#7986CB',\n 'indigo-lighten-1': '#5C6BC0',\n 'indigo-darken-1': '#3949AB',\n 'indigo-darken-2': '#303F9F',\n 'indigo-darken-3': '#283593',\n 'indigo-darken-4': '#1A237E',\n 'indigo-accent-1': '#8C9EFF',\n 'indigo-accent-2': '#536DFE',\n 'indigo-accent-3': '#3D5AFE',\n 'indigo-accent-4': '#304FFE',\n 'blue': '#2196F3',\n 'blue-lighten-5': '#E3F2FD',\n 'blue-lighten-4': '#BBDEFB',\n 'blue-lighten-3': '#90CAF9',\n 'blue-lighten-2': '#64B5F6',\n 'blue-lighten-1': '#42A5F5',\n 'blue-darken-1': '#1E88E5',\n 'blue-darken-2': '#1976D2',\n 'blue-darken-3': '#1565C0',\n 'blue-darken-4': '#0D47A1',\n 'blue-accent-1': '#82B1FF',\n 'blue-accent-2': '#448AFF',\n 'blue-accent-3': '#2979FF',\n 'blue-accent-4': '#2962FF',\n 'light-blue': '#03A9F4',\n 'light-blue-lighten-5': '#E1F5FE',\n 'light-blue-lighten-4': '#B3E5FC',\n 'light-blue-lighten-3': '#81D4FA',\n 'light-blue-lighten-2': '#4FC3F7',\n 'light-blue-lighten-1': '#29B6F6',\n 'light-blue-darken-1': '#039BE5',\n 'light-blue-darken-2': '#0288D1',\n 'light-blue-darken-3': '#0277BD',\n 'light-blue-darken-4': '#01579B',\n 'light-blue-accent-1': '#80D8FF',\n 'light-blue-accent-2': '#40C4FF',\n 'light-blue-accent-3': '#00B0FF',\n 'light-blue-accent-4': '#0091EA',\n 'cyan': '#00BCD4',\n 'cyan-lighten-5': '#E0F7FA',\n 'cyan-lighten-4': '#B2EBF2',\n 'cyan-lighten-3': '#80DEEA',\n 'cyan-lighten-2': '#4DD0E1',\n 'cyan-lighten-1': '#26C6DA',\n 'cyan-darken-1': '#00ACC1',\n 'cyan-darken-2': '#0097A7',\n 'cyan-darken-3': '#00838F',\n 'cyan-darken-4': '#006064',\n 'cyan-accent-1': '#84FFFF',\n 'cyan-accent-2': '#18FFFF',\n 'cyan-accent-3': '#00E5FF',\n 'cyan-accent-4': '#00B8D4',\n 'teal': '#009688',\n 'teal-lighten-5': '#E0F2F1',\n 'teal-lighten-4': '#B2DFDB',\n 'teal-lighten-3': '#80CBC4',\n 'teal-lighten-2': '#4DB6AC',\n 'teal-lighten-1': '#26A69A',\n 'teal-darken-1': '#00897B',\n 'teal-darken-2': '#00796B',\n 'teal-darken-3': '#00695C',\n 'teal-darken-4': '#004D40',\n 'teal-accent-1': '#A7FFEB',\n 'teal-accent-2': '#64FFDA',\n 'teal-accent-3': '#1DE9B6',\n 'teal-accent-4': '#00BFA5',\n 'green': '#4CAF50',\n 'green-lighten-5': '#E8F5E9',\n 'green-lighten-4': '#C8E6C9',\n 'green-lighten-3': '#A5D6A7',\n 'green-lighten-2': '#81C784',\n 'green-lighten-1': '#66BB6A',\n 'green-darken-1': '#43A047',\n 'green-darken-2': '#388E3C',\n 'green-darken-3': '#2E7D32',\n 'green-darken-4': '#1B5E20',\n 'green-accent-1': '#B9F6CA',\n 'green-accent-2': '#69F0AE',\n 'green-accent-3': '#00E676',\n 'green-accent-4': '#00C853',\n 'light-green': '#8BC34A',\n 'light-green-lighten-5': '#F1F8E9',\n 'light-green-lighten-4': '#DCEDC8',\n 'light-green-lighten-3': '#C5E1A5',\n 'light-green-lighten-2': '#AED581',\n 'light-green-lighten-1': '#9CCC65',\n 'light-green-darken-1': '#7CB342',\n 'light-green-darken-2': '#689F38',\n 'light-green-darken-3': '#558B2F',\n 'light-green-darken-4': '#33691E',\n 'light-green-accent-1': '#CCFF90',\n 'light-green-accent-2': '#B2FF59',\n 'light-green-accent-3': '#76FF03',\n 'light-green-accent-4': '#64DD17',\n 'lime': '#CDDC39',\n 'lime-lighten-5': '#F9FBE7',\n 'lime-lighten-4': '#F0F4C3',\n 'lime-lighten-3': '#E6EE9C',\n 'lime-lighten-2': '#DCE775',\n 'lime-lighten-1': '#D4E157',\n 'lime-darken-1': '#C0CA33',\n 'lime-darken-2': '#AFB42B',\n 'lime-darken-3': '#9E9D24',\n 'lime-darken-4': '#827717',\n 'lime-accent-1': '#F4FF81',\n 'lime-accent-2': '#EEFF41',\n 'lime-accent-3': '#C6FF00',\n 'lime-accent-4': '#AEEA00',\n 'yellow': '#FFEB3B',\n 'yellow-lighten-5': '#FFFDE7',\n 'yellow-lighten-4': '#FFF9C4',\n 'yellow-lighten-3': '#FFF59D',\n 'yellow-lighten-2': '#FFF176',\n 'yellow-lighten-1': '#FFEE58',\n 'yellow-darken-1': '#FDD835',\n 'yellow-darken-2': '#FBC02D',\n 'yellow-darken-3': '#F9A825',\n 'yellow-darken-4': '#F57F17',\n 'yellow-accent-1': '#FFFF8D',\n 'yellow-accent-2': '#FFFF00',\n 'yellow-accent-3': '#FFEA00',\n 'yellow-accent-4': '#FFD600',\n 'amber': '#FFC107',\n 'amber-lighten-5': '#FFF8E1',\n 'amber-lighten-4': '#FFECB3',\n 'amber-lighten-3': '#FFE082',\n 'amber-lighten-2': '#FFD54F',\n 'amber-lighten-1': '#FFCA28',\n 'amber-darken-1': '#FFB300',\n 'amber-darken-2': '#FFA000',\n 'amber-darken-3': '#FF8F00',\n 'amber-darken-4': '#FF6F00',\n 'amber-accent-1': '#FFE57F',\n 'amber-accent-2': '#FFD740',\n 'amber-accent-3': '#FFC400',\n 'amber-accent-4': '#FFAB00',\n 'orange': '#FF9800',\n 'orange-lighten-5': '#FFF3E0',\n 'orange-lighten-4': '#FFE0B2',\n 'orange-lighten-3': '#FFCC80',\n 'orange-lighten-2': '#FFB74D',\n 'orange-lighten-1': '#FFA726',\n 'orange-darken-1': '#FB8C00',\n 'orange-darken-2': '#F57C00',\n 'orange-darken-3': '#EF6C00',\n 'orange-darken-4': '#E65100',\n 'orange-accent-1': '#FFD180',\n 'orange-accent-2': '#FFAB40',\n 'orange-accent-3': '#FF9100',\n 'orange-accent-4': '#FF6D00',\n 'deep-orange': '#FF5722',\n 'deep-orange-lighten-5': '#FBE9E7',\n 'deep-orange-lighten-4': '#FFCCBC',\n 'deep-orange-lighten-3': '#FFAB91',\n 'deep-orange-lighten-2': '#FF8A65',\n 'deep-orange-lighten-1': '#FF7043',\n 'deep-orange-darken-1': '#F4511E',\n 'deep-orange-darken-2': '#E64A19',\n 'deep-orange-darken-3': '#D84315',\n 'deep-orange-darken-4': '#BF360C',\n 'deep-orange-accent-1': '#FF9E80',\n 'deep-orange-accent-2': '#FF6E40',\n 'deep-orange-accent-3': '#FF3D00',\n 'deep-orange-accent-4': '#DD2C00',\n 'brown': '#795548',\n 'brown-lighten-5': '#EFEBE9',\n 'brown-lighten-4': '#D7CCC8',\n 'brown-lighten-3': '#BCAAA4',\n 'brown-lighten-2': '#A1887F',\n 'brown-lighten-1': '#8D6E63',\n 'brown-darken-1': '#6D4C41',\n 'brown-darken-2': '#5D4037',\n 'brown-darken-3': '#4E342E',\n 'brown-darken-4': '#3E2723',\n 'blue-grey': '#607D8B',\n 'blue-grey-lighten-5': '#ECEFF1',\n 'blue-grey-lighten-4': '#CFD8DC',\n 'blue-grey-lighten-3': '#B0BEC5',\n 'blue-grey-lighten-2': '#90A4AE',\n 'blue-grey-lighten-1': '#78909C',\n 'blue-grey-darken-1': '#546E7A',\n 'blue-grey-darken-2': '#455A64',\n 'blue-grey-darken-3': '#37474F',\n 'blue-grey-darken-4': '#263238',\n 'grey': '#9E9E9E',\n 'gray': '#9E9E9E',\n 'grey-lighten-5': '#FAFAFA',\n 'grey-lighten-4': '#F5F5F5',\n 'grey-lighten-3': '#EEEEEE',\n 'grey-lighten-2': '#E0E0E0',\n 'grey-lighten-1': '#BDBDBD',\n 'grey-darken-1': '#757575',\n 'grey-darken-2': '#616161',\n 'grey-darken-3': '#424242',\n 'grey-darken-4': '#212121',\n}\n\nfunction parseColor(input: string): RGB | null {\n const trimmed = input.trim()\n const lower = trimmed.toLowerCase()\n\n if (NAMED_COLORS[lower]) {\n return hexToRgb(NAMED_COLORS[lower])\n }\n\n if (trimmed.startsWith('#')) return hexToRgb(trimmed)\n if (lower.startsWith('rgb(')) return parseRgbString(trimmed)\n if (lower.startsWith('hsl(')) {\n const hsl = parseHslString(trimmed)\n return hsl ? hslToRgb(hsl) : null\n }\n\n return hexToRgb(trimmed)\n}\n\nfunction rgbToHex(rgb: RGB): string {\n const toHex = (n: number) =>\n Math.round(Math.max(0, Math.min(255, n)))\n .toString(16)\n .padStart(2, '0')\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`\n}\n\nfunction rgbToHsl(rgb: RGB): HSL {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n\n if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) }\n\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n let h = 0\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n else if (max === g) h = ((b - r) / d + 2) / 6\n else h = ((r - g) / d + 4) / 6\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n }\n}\n\nfunction hslToRgb(hsl: HSL): RGB {\n const h = hsl.h / 360\n const s = hsl.s / 100\n const l = hsl.l / 100\n\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n\n return {\n r: Math.round(hue2rgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, h) * 255),\n b: Math.round(hue2rgb(p, q, h - 1 / 3) * 255),\n }\n}\n\nfunction relativeLuminance(rgb: RGB): number {\n const srgb = [rgb.r, rgb.g, rgb.b].map((c) => {\n const s = c / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2]\n}\n\nfunction contrastRatio(c1: RGB, c2: RGB): number {\n const l1 = relativeLuminance(c1)\n const l2 = relativeLuminance(c2)\n const lighter = Math.max(l1, l2)\n const darker = Math.min(l1, l2)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\nfunction rotateHue(hsl: HSL, degrees: number): HSL {\n return { h: (hsl.h + degrees + 360) % 360, s: hsl.s, l: hsl.l }\n}\n\nfunction formatColor(rgb: RGB): string {\n const hex = rgbToHex(rgb)\n const hsl = rgbToHsl(rgb)\n return `${hex} / rgb(${rgb.r}, ${rgb.g}, ${rgb.b}) / hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`\n}\n\n/**\n * Compute the WCAG 2.1 contrast ratio between two colours.\n *\n * @remarks\n * Accepts hex (`#rgb`, `#rrggbb`), `rgb()`, `hsl()`, or one of the CSS / Material Design named\n * colours. Reports the ratio and pass/fail against WCAG AA and AAA at both normal and large text\n * sizes. If the foreground/background combination fails AA Normal (4.5:1), the tool suggests\n * lightened or darkened variants that would pass.\n */\nexport const colorContrastTool = new Tool({\n name: 'color_contrast',\n description:\n 'Check the contrast ratio between two colors for WCAG accessibility compliance. Reports the contrast ratio and pass/fail for WCAG AA and AAA levels.',\n inputSchema: validator.object({\n foreground: validator\n .string()\n .required()\n .description('Foreground color (hex, rgb(), hsl(), or named color).'),\n background: validator\n .string()\n .required()\n .description('Background color (hex, rgb(), hsl(), or named color).'),\n }),\n handler: async (args) => {\n const { foreground, background } = args as { foreground: string; background: string }\n const fg = parseColor(foreground)\n const bg = parseColor(background)\n\n if (!fg) return `Error: could not parse foreground color \"${foreground}\".`\n if (!bg) return `Error: could not parse background color \"${background}\".`\n\n const ratio = contrastRatio(fg, bg)\n const rounded = Math.round(ratio * 100) / 100\n\n const aaLargeText = ratio >= 3\n const aaNormalText = ratio >= 4.5\n const aaaLargeText = ratio >= 4.5\n const aaaNormalText = ratio >= 7\n\n const lines = [\n `Foreground: ${formatColor(fg)}`,\n `Background: ${formatColor(bg)}`,\n `Contrast ratio: ${rounded}:1`,\n '',\n 'WCAG 2.1 compliance:',\n ` AA Normal text (4.5:1): ${aaNormalText ? 'PASS' : 'FAIL'}`,\n ` AA Large text (3.0:1): ${aaLargeText ? 'PASS' : 'FAIL'}`,\n ` AAA Normal text (7.0:1): ${aaaNormalText ? 'PASS' : 'FAIL'}`,\n ` AAA Large text (4.5:1): ${aaaLargeText ? 'PASS' : 'FAIL'}`,\n ]\n\n if (!aaNormalText) {\n const fgHsl = rgbToHsl(fg)\n const bgHsl = rgbToHsl(bg)\n const fgLighter = fgHsl.l > bgHsl.l\n\n const suggestions: string[] = []\n if (fgLighter) {\n const lighter = hslToRgb({ ...fgHsl, l: Math.min(100, fgHsl.l + 15) })\n const darkerBg = hslToRgb({ ...bgHsl, l: Math.max(0, bgHsl.l - 15) })\n if (contrastRatio(lighter, bg) >= 4.5) {\n suggestions.push(\n ` Lighten foreground to ${rgbToHex(lighter)} (ratio: ${Math.round(contrastRatio(lighter, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, darkerBg) >= 4.5) {\n suggestions.push(\n ` Darken background to ${rgbToHex(darkerBg)} (ratio: ${Math.round(contrastRatio(fg, darkerBg) * 100) / 100}:1)`\n )\n }\n } else {\n const darker = hslToRgb({ ...fgHsl, l: Math.max(0, fgHsl.l - 15) })\n const lighterBg = hslToRgb({ ...bgHsl, l: Math.min(100, bgHsl.l + 15) })\n if (contrastRatio(darker, bg) >= 4.5) {\n suggestions.push(\n ` Darken foreground to ${rgbToHex(darker)} (ratio: ${Math.round(contrastRatio(darker, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, lighterBg) >= 4.5) {\n suggestions.push(\n ` Lighten background to ${rgbToHex(lighterBg)} (ratio: ${Math.round(contrastRatio(fg, lighterBg) * 100) / 100}:1)`\n )\n }\n }\n\n if (suggestions.length > 0) {\n lines.push('', 'Suggestions to reach AA Normal (4.5:1):')\n lines.push(...suggestions)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Generate a colour palette from a base colour using a named harmony.\n *\n * @remarks\n * Supported schemes: `complementary`, `analogous`, `triadic`, `split-complementary`,\n * `monochromatic`. Each entry reports its hex, rgb, and hsl forms, plus the contrast ratio\n * relative to the base colour.\n */\nexport const colorSchemeTool = new Tool({\n name: 'color_scheme',\n description:\n 'Generate a color palette from a base color. Supports complementary, analogous, triadic, split-complementary, and monochromatic schemes.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Base color (hex, rgb(), hsl(), or named color).'),\n scheme: validator\n .string()\n .valid('complementary', 'analogous', 'triadic', 'split-complementary', 'monochromatic')\n .required()\n .description('Type of color scheme to generate.'),\n }),\n handler: async (args) => {\n const { color, scheme } = args as {\n color: string\n scheme: 'complementary' | 'analogous' | 'triadic' | 'split-complementary' | 'monochromatic'\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const hsl = rgbToHsl(rgb)\n const palette: { label: string; rgb: RGB }[] = [{ label: 'Base', rgb }]\n\n switch (scheme) {\n case 'complementary':\n palette.push({ label: 'Complement', rgb: hslToRgb(rotateHue(hsl, 180)) })\n break\n\n case 'analogous':\n palette.push({ label: 'Analogous -30', rgb: hslToRgb(rotateHue(hsl, -30)) })\n palette.push({ label: 'Analogous +30', rgb: hslToRgb(rotateHue(hsl, 30)) })\n break\n\n case 'triadic':\n palette.push({ label: 'Triadic +120', rgb: hslToRgb(rotateHue(hsl, 120)) })\n palette.push({ label: 'Triadic +240', rgb: hslToRgb(rotateHue(hsl, 240)) })\n break\n\n case 'split-complementary':\n palette.push({ label: 'Split +150', rgb: hslToRgb(rotateHue(hsl, 150)) })\n palette.push({ label: 'Split +210', rgb: hslToRgb(rotateHue(hsl, 210)) })\n break\n\n case 'monochromatic':\n palette.push({ label: 'Light', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 20) }) })\n palette.push({ label: 'Lighter', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 35) }) })\n palette.push({ label: 'Dark', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 20) }) })\n palette.push({ label: 'Darker', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 35) }) })\n break\n }\n\n const lines = [`Color scheme: ${scheme}`, '']\n for (const entry of palette) {\n lines.push(`${entry.label}: ${formatColor(entry.rgb)}`)\n }\n\n if (palette.length > 1) {\n lines.push('', 'Contrast ratios with base:')\n for (const entry of palette.slice(1)) {\n const ratio = Math.round(contrastRatio(rgb, entry.rgb) * 100) / 100\n lines.push(` ${entry.label}: ${ratio}:1`)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Lighten or darken a colour by a percentage of HSL lightness.\n *\n * @remarks\n * `amount` is clamped to `[1, 100]`; `steps` is clamped to `[1, 10]`. With `steps > 1` the tool\n * emits a ramp of progressively-adjusted colours, useful for generating tint/shade scales.\n */\nexport const colorAdjustTool = new Tool({\n name: 'color_adjust',\n description:\n 'Lighten or darken a color by a specified amount. Returns the adjusted color in hex, rgb, and hsl formats. Can generate multiple steps for a tint/shade scale.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Color to adjust (hex, rgb(), hsl(), or named color).'),\n action: validator\n .string()\n .valid('lighten', 'darken')\n .required()\n .description('Whether to lighten or darken the color.'),\n amount: validator\n .number()\n .default(15)\n .description('Amount to adjust per step (1-100, percentage of lightness). Default: 15.'),\n steps: validator\n .number()\n .default(1)\n .description('Generate multiple steps of adjustment (1-10). Default: 1.'),\n }),\n handler: async (args) => {\n const {\n color,\n action,\n amount: rawAmount,\n steps: rawSteps,\n } = args as {\n color: string\n action: 'lighten' | 'darken'\n amount: number\n steps: number\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const amount = Math.max(1, Math.min(100, rawAmount))\n const steps = Math.max(1, Math.min(10, rawSteps))\n const hsl = rgbToHsl(rgb)\n\n const lines = [`Original: ${formatColor(rgb)}`]\n\n for (let i = 1; i <= steps; i++) {\n const delta = amount * i\n const newL = action === 'lighten' ? Math.min(100, hsl.l + delta) : Math.max(0, hsl.l - delta)\n const adjusted = hslToRgb({ ...hsl, l: newL })\n const label =\n steps === 1\n ? `${action === 'lighten' ? 'Lightened' : 'Darkened'} (${delta}%)`\n : `Step ${i} (${action} ${delta}%)`\n lines.push(`${label}: ${formatColor(adjusted)}`)\n }\n\n return lines.join('\\n')\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"color.mjs","names":[],"sources":["../../../src/batteries/tools/color/index.ts"],"sourcesContent":["/**\n * Pre-constructed tools for color conversion and palette-oriented calculations.\n *\n * @module @nhtio/adk/batteries/tools/color\n *\n * @remarks\n * Pre-constructed bundled tools for the `color` category. Import individually, the whole\n * category, or import every tool via `@nhtio/adk/batteries`.\n */\n\nimport { Tool } from '@nhtio/adk/common'\nimport { validator } from '@nhtio/validation'\n\ntype RGB = { r: number; g: number; b: number }\ntype HSL = { h: number; s: number; l: number }\n\nfunction hexToRgb(hex: string): RGB | null {\n const cleaned = hex.replace(/^#/, '')\n // Reject any non-hex character up front. `Number.parseInt('1Z', 16)` silently drops the trailing\n // 'Z' and returns 1 (passing the NaN check below), so '#1Z2Z3Z' would otherwise be accepted as a\n // bogus colour rgb(1, 2, 3).\n if (!/^[0-9a-fA-F]+$/.test(cleaned)) return null\n\n let r: number\n let g: number\n let b: number\n\n if (cleaned.length === 3) {\n r = Number.parseInt(cleaned[0] + cleaned[0], 16)\n g = Number.parseInt(cleaned[1] + cleaned[1], 16)\n b = Number.parseInt(cleaned[2] + cleaned[2], 16)\n } else if (cleaned.length === 6) {\n r = Number.parseInt(cleaned.slice(0, 2), 16)\n g = Number.parseInt(cleaned.slice(2, 4), 16)\n b = Number.parseInt(cleaned.slice(4, 6), 16)\n } else {\n return null\n }\n\n if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return null\n return { r, g, b }\n}\n\nfunction parseRgbString(input: string): RGB | null {\n const match = input.match(/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i)\n if (!match) return null\n const r = Number.parseInt(match[1], 10)\n const g = Number.parseInt(match[2], 10)\n const b = Number.parseInt(match[3], 10)\n if (r > 255 || g > 255 || b > 255) return null\n return { r, g, b }\n}\n\nfunction parseHslString(input: string): HSL | null {\n const match = input.match(/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?\\s*\\)$/i)\n if (!match) return null\n return {\n h: Number.parseInt(match[1], 10) % 360,\n s: Math.min(100, Number.parseInt(match[2], 10)),\n l: Math.min(100, Number.parseInt(match[3], 10)),\n }\n}\n\nconst NAMED_COLORS: Record<string, string> = {\n 'black': '#000000',\n 'white': '#FFFFFF',\n 'transparent': '#FFFFFF',\n 'aqua': '#00FFFF',\n 'magenta': '#FF00FF',\n 'fuchsia': '#FF00FF',\n 'silver': '#C0C0C0',\n 'maroon': '#800000',\n 'olive': '#808000',\n 'navy': '#000080',\n 'coral': '#FF7F50',\n 'crimson': '#DC143C',\n 'gold': '#FFD700',\n 'ivory': '#FFFFF0',\n 'khaki': '#F0E68C',\n 'lavender': '#E6E6FA',\n 'plum': '#DDA0DD',\n 'salmon': '#FA8072',\n 'sienna': '#A0522D',\n 'tan': '#D2B48C',\n 'tomato': '#FF6347',\n 'turquoise': '#40E0D0',\n 'violet': '#EE82EE',\n 'wheat': '#F5DEB3',\n 'red': '#F44336',\n 'red-lighten-5': '#FFEBEE',\n 'red-lighten-4': '#FFCDD2',\n 'red-lighten-3': '#EF9A9A',\n 'red-lighten-2': '#E57373',\n 'red-lighten-1': '#EF5350',\n 'red-darken-1': '#E53935',\n 'red-darken-2': '#D32F2F',\n 'red-darken-3': '#C62828',\n 'red-darken-4': '#B71C1C',\n 'red-accent-1': '#FF8A80',\n 'red-accent-2': '#FF5252',\n 'red-accent-3': '#FF1744',\n 'red-accent-4': '#D50000',\n 'pink': '#E91E63',\n 'pink-lighten-5': '#FCE4EC',\n 'pink-lighten-4': '#F8BBD0',\n 'pink-lighten-3': '#F48FB1',\n 'pink-lighten-2': '#F06292',\n 'pink-lighten-1': '#EC407A',\n 'pink-darken-1': '#D81B60',\n 'pink-darken-2': '#C2185B',\n 'pink-darken-3': '#AD1457',\n 'pink-darken-4': '#880E4F',\n 'pink-accent-1': '#FF80AB',\n 'pink-accent-2': '#FF4081',\n 'pink-accent-3': '#F50057',\n 'pink-accent-4': '#C51162',\n 'purple': '#9C27B0',\n 'purple-lighten-5': '#F3E5F5',\n 'purple-lighten-4': '#E1BEE7',\n 'purple-lighten-3': '#CE93D8',\n 'purple-lighten-2': '#BA68C8',\n 'purple-lighten-1': '#AB47BC',\n 'purple-darken-1': '#8E24AA',\n 'purple-darken-2': '#7B1FA2',\n 'purple-darken-3': '#6A1B9A',\n 'purple-darken-4': '#4A148C',\n 'purple-accent-1': '#EA80FC',\n 'purple-accent-2': '#E040FB',\n 'purple-accent-3': '#D500F9',\n 'purple-accent-4': '#AA00FF',\n 'deep-purple': '#673AB7',\n 'deep-purple-lighten-5': '#EDE7F6',\n 'deep-purple-lighten-4': '#D1C4E9',\n 'deep-purple-lighten-3': '#B39DDB',\n 'deep-purple-lighten-2': '#9575CD',\n 'deep-purple-lighten-1': '#7E57C2',\n 'deep-purple-darken-1': '#5E35B1',\n 'deep-purple-darken-2': '#512DA8',\n 'deep-purple-darken-3': '#4527A0',\n 'deep-purple-darken-4': '#311B92',\n 'deep-purple-accent-1': '#B388FF',\n 'deep-purple-accent-2': '#7C4DFF',\n 'deep-purple-accent-3': '#651FFF',\n 'deep-purple-accent-4': '#6200EA',\n 'indigo': '#3F51B5',\n 'indigo-lighten-5': '#E8EAF6',\n 'indigo-lighten-4': '#C5CAE9',\n 'indigo-lighten-3': '#9FA8DA',\n 'indigo-lighten-2': '#7986CB',\n 'indigo-lighten-1': '#5C6BC0',\n 'indigo-darken-1': '#3949AB',\n 'indigo-darken-2': '#303F9F',\n 'indigo-darken-3': '#283593',\n 'indigo-darken-4': '#1A237E',\n 'indigo-accent-1': '#8C9EFF',\n 'indigo-accent-2': '#536DFE',\n 'indigo-accent-3': '#3D5AFE',\n 'indigo-accent-4': '#304FFE',\n 'blue': '#2196F3',\n 'blue-lighten-5': '#E3F2FD',\n 'blue-lighten-4': '#BBDEFB',\n 'blue-lighten-3': '#90CAF9',\n 'blue-lighten-2': '#64B5F6',\n 'blue-lighten-1': '#42A5F5',\n 'blue-darken-1': '#1E88E5',\n 'blue-darken-2': '#1976D2',\n 'blue-darken-3': '#1565C0',\n 'blue-darken-4': '#0D47A1',\n 'blue-accent-1': '#82B1FF',\n 'blue-accent-2': '#448AFF',\n 'blue-accent-3': '#2979FF',\n 'blue-accent-4': '#2962FF',\n 'light-blue': '#03A9F4',\n 'light-blue-lighten-5': '#E1F5FE',\n 'light-blue-lighten-4': '#B3E5FC',\n 'light-blue-lighten-3': '#81D4FA',\n 'light-blue-lighten-2': '#4FC3F7',\n 'light-blue-lighten-1': '#29B6F6',\n 'light-blue-darken-1': '#039BE5',\n 'light-blue-darken-2': '#0288D1',\n 'light-blue-darken-3': '#0277BD',\n 'light-blue-darken-4': '#01579B',\n 'light-blue-accent-1': '#80D8FF',\n 'light-blue-accent-2': '#40C4FF',\n 'light-blue-accent-3': '#00B0FF',\n 'light-blue-accent-4': '#0091EA',\n 'cyan': '#00BCD4',\n 'cyan-lighten-5': '#E0F7FA',\n 'cyan-lighten-4': '#B2EBF2',\n 'cyan-lighten-3': '#80DEEA',\n 'cyan-lighten-2': '#4DD0E1',\n 'cyan-lighten-1': '#26C6DA',\n 'cyan-darken-1': '#00ACC1',\n 'cyan-darken-2': '#0097A7',\n 'cyan-darken-3': '#00838F',\n 'cyan-darken-4': '#006064',\n 'cyan-accent-1': '#84FFFF',\n 'cyan-accent-2': '#18FFFF',\n 'cyan-accent-3': '#00E5FF',\n 'cyan-accent-4': '#00B8D4',\n 'teal': '#009688',\n 'teal-lighten-5': '#E0F2F1',\n 'teal-lighten-4': '#B2DFDB',\n 'teal-lighten-3': '#80CBC4',\n 'teal-lighten-2': '#4DB6AC',\n 'teal-lighten-1': '#26A69A',\n 'teal-darken-1': '#00897B',\n 'teal-darken-2': '#00796B',\n 'teal-darken-3': '#00695C',\n 'teal-darken-4': '#004D40',\n 'teal-accent-1': '#A7FFEB',\n 'teal-accent-2': '#64FFDA',\n 'teal-accent-3': '#1DE9B6',\n 'teal-accent-4': '#00BFA5',\n 'green': '#4CAF50',\n 'green-lighten-5': '#E8F5E9',\n 'green-lighten-4': '#C8E6C9',\n 'green-lighten-3': '#A5D6A7',\n 'green-lighten-2': '#81C784',\n 'green-lighten-1': '#66BB6A',\n 'green-darken-1': '#43A047',\n 'green-darken-2': '#388E3C',\n 'green-darken-3': '#2E7D32',\n 'green-darken-4': '#1B5E20',\n 'green-accent-1': '#B9F6CA',\n 'green-accent-2': '#69F0AE',\n 'green-accent-3': '#00E676',\n 'green-accent-4': '#00C853',\n 'light-green': '#8BC34A',\n 'light-green-lighten-5': '#F1F8E9',\n 'light-green-lighten-4': '#DCEDC8',\n 'light-green-lighten-3': '#C5E1A5',\n 'light-green-lighten-2': '#AED581',\n 'light-green-lighten-1': '#9CCC65',\n 'light-green-darken-1': '#7CB342',\n 'light-green-darken-2': '#689F38',\n 'light-green-darken-3': '#558B2F',\n 'light-green-darken-4': '#33691E',\n 'light-green-accent-1': '#CCFF90',\n 'light-green-accent-2': '#B2FF59',\n 'light-green-accent-3': '#76FF03',\n 'light-green-accent-4': '#64DD17',\n 'lime': '#CDDC39',\n 'lime-lighten-5': '#F9FBE7',\n 'lime-lighten-4': '#F0F4C3',\n 'lime-lighten-3': '#E6EE9C',\n 'lime-lighten-2': '#DCE775',\n 'lime-lighten-1': '#D4E157',\n 'lime-darken-1': '#C0CA33',\n 'lime-darken-2': '#AFB42B',\n 'lime-darken-3': '#9E9D24',\n 'lime-darken-4': '#827717',\n 'lime-accent-1': '#F4FF81',\n 'lime-accent-2': '#EEFF41',\n 'lime-accent-3': '#C6FF00',\n 'lime-accent-4': '#AEEA00',\n 'yellow': '#FFEB3B',\n 'yellow-lighten-5': '#FFFDE7',\n 'yellow-lighten-4': '#FFF9C4',\n 'yellow-lighten-3': '#FFF59D',\n 'yellow-lighten-2': '#FFF176',\n 'yellow-lighten-1': '#FFEE58',\n 'yellow-darken-1': '#FDD835',\n 'yellow-darken-2': '#FBC02D',\n 'yellow-darken-3': '#F9A825',\n 'yellow-darken-4': '#F57F17',\n 'yellow-accent-1': '#FFFF8D',\n 'yellow-accent-2': '#FFFF00',\n 'yellow-accent-3': '#FFEA00',\n 'yellow-accent-4': '#FFD600',\n 'amber': '#FFC107',\n 'amber-lighten-5': '#FFF8E1',\n 'amber-lighten-4': '#FFECB3',\n 'amber-lighten-3': '#FFE082',\n 'amber-lighten-2': '#FFD54F',\n 'amber-lighten-1': '#FFCA28',\n 'amber-darken-1': '#FFB300',\n 'amber-darken-2': '#FFA000',\n 'amber-darken-3': '#FF8F00',\n 'amber-darken-4': '#FF6F00',\n 'amber-accent-1': '#FFE57F',\n 'amber-accent-2': '#FFD740',\n 'amber-accent-3': '#FFC400',\n 'amber-accent-4': '#FFAB00',\n 'orange': '#FF9800',\n 'orange-lighten-5': '#FFF3E0',\n 'orange-lighten-4': '#FFE0B2',\n 'orange-lighten-3': '#FFCC80',\n 'orange-lighten-2': '#FFB74D',\n 'orange-lighten-1': '#FFA726',\n 'orange-darken-1': '#FB8C00',\n 'orange-darken-2': '#F57C00',\n 'orange-darken-3': '#EF6C00',\n 'orange-darken-4': '#E65100',\n 'orange-accent-1': '#FFD180',\n 'orange-accent-2': '#FFAB40',\n 'orange-accent-3': '#FF9100',\n 'orange-accent-4': '#FF6D00',\n 'deep-orange': '#FF5722',\n 'deep-orange-lighten-5': '#FBE9E7',\n 'deep-orange-lighten-4': '#FFCCBC',\n 'deep-orange-lighten-3': '#FFAB91',\n 'deep-orange-lighten-2': '#FF8A65',\n 'deep-orange-lighten-1': '#FF7043',\n 'deep-orange-darken-1': '#F4511E',\n 'deep-orange-darken-2': '#E64A19',\n 'deep-orange-darken-3': '#D84315',\n 'deep-orange-darken-4': '#BF360C',\n 'deep-orange-accent-1': '#FF9E80',\n 'deep-orange-accent-2': '#FF6E40',\n 'deep-orange-accent-3': '#FF3D00',\n 'deep-orange-accent-4': '#DD2C00',\n 'brown': '#795548',\n 'brown-lighten-5': '#EFEBE9',\n 'brown-lighten-4': '#D7CCC8',\n 'brown-lighten-3': '#BCAAA4',\n 'brown-lighten-2': '#A1887F',\n 'brown-lighten-1': '#8D6E63',\n 'brown-darken-1': '#6D4C41',\n 'brown-darken-2': '#5D4037',\n 'brown-darken-3': '#4E342E',\n 'brown-darken-4': '#3E2723',\n 'blue-grey': '#607D8B',\n 'blue-grey-lighten-5': '#ECEFF1',\n 'blue-grey-lighten-4': '#CFD8DC',\n 'blue-grey-lighten-3': '#B0BEC5',\n 'blue-grey-lighten-2': '#90A4AE',\n 'blue-grey-lighten-1': '#78909C',\n 'blue-grey-darken-1': '#546E7A',\n 'blue-grey-darken-2': '#455A64',\n 'blue-grey-darken-3': '#37474F',\n 'blue-grey-darken-4': '#263238',\n 'grey': '#9E9E9E',\n 'gray': '#9E9E9E',\n 'grey-lighten-5': '#FAFAFA',\n 'grey-lighten-4': '#F5F5F5',\n 'grey-lighten-3': '#EEEEEE',\n 'grey-lighten-2': '#E0E0E0',\n 'grey-lighten-1': '#BDBDBD',\n 'grey-darken-1': '#757575',\n 'grey-darken-2': '#616161',\n 'grey-darken-3': '#424242',\n 'grey-darken-4': '#212121',\n}\n\nfunction parseColor(input: string): RGB | null {\n const trimmed = input.trim()\n const lower = trimmed.toLowerCase()\n\n if (NAMED_COLORS[lower]) {\n return hexToRgb(NAMED_COLORS[lower])\n }\n\n if (trimmed.startsWith('#')) return hexToRgb(trimmed)\n if (lower.startsWith('rgb(')) return parseRgbString(trimmed)\n if (lower.startsWith('hsl(')) {\n const hsl = parseHslString(trimmed)\n return hsl ? hslToRgb(hsl) : null\n }\n\n return hexToRgb(trimmed)\n}\n\nfunction rgbToHex(rgb: RGB): string {\n const toHex = (n: number) =>\n Math.round(Math.max(0, Math.min(255, n)))\n .toString(16)\n .padStart(2, '0')\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`\n}\n\nfunction rgbToHsl(rgb: RGB): HSL {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n\n if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) }\n\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n let h = 0\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n else if (max === g) h = ((b - r) / d + 2) / 6\n else h = ((r - g) / d + 4) / 6\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n }\n}\n\nfunction hslToRgb(hsl: HSL): RGB {\n const h = hsl.h / 360\n const s = hsl.s / 100\n const l = hsl.l / 100\n\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n\n return {\n r: Math.round(hue2rgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, h) * 255),\n b: Math.round(hue2rgb(p, q, h - 1 / 3) * 255),\n }\n}\n\nfunction relativeLuminance(rgb: RGB): number {\n const srgb = [rgb.r, rgb.g, rgb.b].map((c) => {\n const s = c / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2]\n}\n\nfunction contrastRatio(c1: RGB, c2: RGB): number {\n const l1 = relativeLuminance(c1)\n const l2 = relativeLuminance(c2)\n const lighter = Math.max(l1, l2)\n const darker = Math.min(l1, l2)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\nfunction rotateHue(hsl: HSL, degrees: number): HSL {\n return { h: (hsl.h + degrees + 360) % 360, s: hsl.s, l: hsl.l }\n}\n\nfunction formatColor(rgb: RGB): string {\n const hex = rgbToHex(rgb)\n const hsl = rgbToHsl(rgb)\n return `${hex} / rgb(${rgb.r}, ${rgb.g}, ${rgb.b}) / hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`\n}\n\n/**\n * Compute the WCAG 2.1 contrast ratio between two colours.\n *\n * @remarks\n * Accepts hex (`#rgb`, `#rrggbb`), `rgb()`, `hsl()`, or one of the CSS / Material Design named\n * colours. Reports the ratio and pass/fail against WCAG AA and AAA at both normal and large text\n * sizes. If the foreground/background combination fails AA Normal (4.5:1), the tool suggests\n * lightened or darkened variants that would pass.\n */\nexport const colorContrastTool = new Tool({\n name: 'color_contrast',\n description:\n 'Check the contrast ratio between two colors for WCAG accessibility compliance. Reports the contrast ratio and pass/fail for WCAG AA and AAA levels.',\n inputSchema: validator.object({\n foreground: validator\n .string()\n .required()\n .description('Foreground color (hex, rgb(), hsl(), or named color).'),\n background: validator\n .string()\n .required()\n .description('Background color (hex, rgb(), hsl(), or named color).'),\n }),\n handler: async (args) => {\n const { foreground, background } = args as { foreground: string; background: string }\n const fg = parseColor(foreground)\n const bg = parseColor(background)\n\n if (!fg) return `Error: could not parse foreground color \"${foreground}\".`\n if (!bg) return `Error: could not parse background color \"${background}\".`\n\n const ratio = contrastRatio(fg, bg)\n const rounded = Math.round(ratio * 100) / 100\n\n const aaLargeText = ratio >= 3\n const aaNormalText = ratio >= 4.5\n const aaaLargeText = ratio >= 4.5\n const aaaNormalText = ratio >= 7\n\n const lines = [\n `Foreground: ${formatColor(fg)}`,\n `Background: ${formatColor(bg)}`,\n `Contrast ratio: ${rounded}:1`,\n '',\n 'WCAG 2.1 compliance:',\n ` AA Normal text (4.5:1): ${aaNormalText ? 'PASS' : 'FAIL'}`,\n ` AA Large text (3.0:1): ${aaLargeText ? 'PASS' : 'FAIL'}`,\n ` AAA Normal text (7.0:1): ${aaaNormalText ? 'PASS' : 'FAIL'}`,\n ` AAA Large text (4.5:1): ${aaaLargeText ? 'PASS' : 'FAIL'}`,\n ]\n\n if (!aaNormalText) {\n const fgHsl = rgbToHsl(fg)\n const bgHsl = rgbToHsl(bg)\n const fgLighter = fgHsl.l > bgHsl.l\n\n const suggestions: string[] = []\n if (fgLighter) {\n const lighter = hslToRgb({ ...fgHsl, l: Math.min(100, fgHsl.l + 15) })\n const darkerBg = hslToRgb({ ...bgHsl, l: Math.max(0, bgHsl.l - 15) })\n if (contrastRatio(lighter, bg) >= 4.5) {\n suggestions.push(\n ` Lighten foreground to ${rgbToHex(lighter)} (ratio: ${Math.round(contrastRatio(lighter, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, darkerBg) >= 4.5) {\n suggestions.push(\n ` Darken background to ${rgbToHex(darkerBg)} (ratio: ${Math.round(contrastRatio(fg, darkerBg) * 100) / 100}:1)`\n )\n }\n } else {\n const darker = hslToRgb({ ...fgHsl, l: Math.max(0, fgHsl.l - 15) })\n const lighterBg = hslToRgb({ ...bgHsl, l: Math.min(100, bgHsl.l + 15) })\n if (contrastRatio(darker, bg) >= 4.5) {\n suggestions.push(\n ` Darken foreground to ${rgbToHex(darker)} (ratio: ${Math.round(contrastRatio(darker, bg) * 100) / 100}:1)`\n )\n }\n if (contrastRatio(fg, lighterBg) >= 4.5) {\n suggestions.push(\n ` Lighten background to ${rgbToHex(lighterBg)} (ratio: ${Math.round(contrastRatio(fg, lighterBg) * 100) / 100}:1)`\n )\n }\n }\n\n if (suggestions.length > 0) {\n lines.push('', 'Suggestions to reach AA Normal (4.5:1):')\n lines.push(...suggestions)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Generate a colour palette from a base colour using a named harmony.\n *\n * @remarks\n * Supported schemes: `complementary`, `analogous`, `triadic`, `split-complementary`,\n * `monochromatic`. Each entry reports its hex, rgb, and hsl forms, plus the contrast ratio\n * relative to the base colour.\n */\nexport const colorSchemeTool = new Tool({\n name: 'color_scheme',\n description:\n 'Generate a color palette from a base color. Supports complementary, analogous, triadic, split-complementary, and monochromatic schemes.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Base color (hex, rgb(), hsl(), or named color).'),\n scheme: validator\n .string()\n .valid('complementary', 'analogous', 'triadic', 'split-complementary', 'monochromatic')\n .required()\n .description('Type of color scheme to generate.'),\n }),\n handler: async (args) => {\n const { color, scheme } = args as {\n color: string\n scheme: 'complementary' | 'analogous' | 'triadic' | 'split-complementary' | 'monochromatic'\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const hsl = rgbToHsl(rgb)\n const palette: { label: string; rgb: RGB }[] = [{ label: 'Base', rgb }]\n\n switch (scheme) {\n case 'complementary':\n palette.push({ label: 'Complement', rgb: hslToRgb(rotateHue(hsl, 180)) })\n break\n\n case 'analogous':\n palette.push({ label: 'Analogous -30', rgb: hslToRgb(rotateHue(hsl, -30)) })\n palette.push({ label: 'Analogous +30', rgb: hslToRgb(rotateHue(hsl, 30)) })\n break\n\n case 'triadic':\n palette.push({ label: 'Triadic +120', rgb: hslToRgb(rotateHue(hsl, 120)) })\n palette.push({ label: 'Triadic +240', rgb: hslToRgb(rotateHue(hsl, 240)) })\n break\n\n case 'split-complementary':\n palette.push({ label: 'Split +150', rgb: hslToRgb(rotateHue(hsl, 150)) })\n palette.push({ label: 'Split +210', rgb: hslToRgb(rotateHue(hsl, 210)) })\n break\n\n case 'monochromatic':\n palette.push({ label: 'Light', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 20) }) })\n palette.push({ label: 'Lighter', rgb: hslToRgb({ ...hsl, l: Math.min(100, hsl.l + 35) }) })\n palette.push({ label: 'Dark', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 20) }) })\n palette.push({ label: 'Darker', rgb: hslToRgb({ ...hsl, l: Math.max(0, hsl.l - 35) }) })\n break\n }\n\n const lines = [`Color scheme: ${scheme}`, '']\n for (const entry of palette) {\n lines.push(`${entry.label}: ${formatColor(entry.rgb)}`)\n }\n\n if (palette.length > 1) {\n lines.push('', 'Contrast ratios with base:')\n for (const entry of palette.slice(1)) {\n const ratio = Math.round(contrastRatio(rgb, entry.rgb) * 100) / 100\n lines.push(` ${entry.label}: ${ratio}:1`)\n }\n }\n\n return lines.join('\\n')\n },\n})\n\n/**\n * Lighten or darken a colour by a percentage of HSL lightness.\n *\n * @remarks\n * `amount` is clamped to `[1, 100]`; `steps` is clamped to `[1, 10]`. With `steps > 1` the tool\n * emits a ramp of progressively-adjusted colours, useful for generating tint/shade scales.\n */\nexport const colorAdjustTool = new Tool({\n name: 'color_adjust',\n description:\n 'Lighten or darken a color by a specified amount. Returns the adjusted color in hex, rgb, and hsl formats. Can generate multiple steps for a tint/shade scale.',\n inputSchema: validator.object({\n color: validator\n .string()\n .required()\n .description('Color to adjust (hex, rgb(), hsl(), or named color).'),\n action: validator\n .string()\n .valid('lighten', 'darken')\n .required()\n .description('Whether to lighten or darken the color.'),\n amount: validator\n .number()\n .default(15)\n .description('Amount to adjust per step (1-100, percentage of lightness). Default: 15.'),\n steps: validator\n .number()\n .default(1)\n .description('Generate multiple steps of adjustment (1-10). Default: 1.'),\n }),\n handler: async (args) => {\n const {\n color,\n action,\n amount: rawAmount,\n steps: rawSteps,\n } = args as {\n color: string\n action: 'lighten' | 'darken'\n amount: number\n steps: number\n }\n const rgb = parseColor(color)\n if (!rgb) return `Error: could not parse color \"${color}\".`\n\n const amount = Math.max(1, Math.min(100, rawAmount))\n const steps = Math.max(1, Math.min(10, rawSteps))\n const hsl = rgbToHsl(rgb)\n\n const lines = [`Original: ${formatColor(rgb)}`]\n\n for (let i = 1; i <= steps; i++) {\n const delta = amount * i\n const newL = action === 'lighten' ? Math.min(100, hsl.l + delta) : Math.max(0, hsl.l - delta)\n const adjusted = hslToRgb({ ...hsl, l: newL })\n const label =\n steps === 1\n ? `${action === 'lighten' ? 'Lightened' : 'Darkened'} (${delta}%)`\n : `Step ${i} (${action} ${delta}%)`\n lines.push(`${label}: ${formatColor(adjusted)}`)\n }\n\n return lines.join('\\n')\n },\n})\n"],"mappings":"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"}
|