From 988e90106678bf36fef77eea101200eef21afdee Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Sun, 5 Apr 2026 18:45:16 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20params/output=20sem=C3=A1ntico=20en=205?= =?UTF-8?q?06=20funciones=20para=20composabilidad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Añade campos params y output al frontmatter YAML de las 506 funciones del registry. Cada parámetro tiene descripción semántica (qué representa, unidades, rango típico) y cada función describe qué produce su output. Permite a agentes razonar sobre cadenas de composición (ej: prices → log_return → sharpe_ratio) sin leer código. --- .../infra/assert_docker_container_running.md | 4 ++++ bash/functions/infra/docker_cp_file.md | 8 +++++++ bash/functions/infra/init_uv_venv.md | 4 ++++ bash/functions/infra/install_nbconvert.md | 4 ++++ bash/functions/infra/install_nordvpn.md | 2 ++ bash/functions/infra/nordvpn_connect.md | 6 +++++ bash/functions/infra/nordvpn_disconnect.md | 2 ++ bash/functions/infra/nordvpn_get_ip.md | 2 ++ bash/functions/infra/nordvpn_list_cities.md | 4 ++++ .../functions/infra/nordvpn_list_countries.md | 2 ++ bash/functions/infra/nordvpn_set_protocol.md | 4 ++++ bash/functions/infra/nordvpn_status.md | 2 ++ bash/functions/infra/notebook_to_pdf.md | 8 +++++++ bash/functions/infra/pass_delete.md | 4 ++++ bash/functions/infra/pass_generate.md | 6 +++++ bash/functions/infra/pass_get.md | 4 ++++ bash/functions/infra/pass_list.md | 4 ++++ bash/functions/infra/pass_set.md | 6 +++++ bash/functions/infra/pass_sync.md | 2 ++ bash/functions/infra/uv_add_packages.md | 6 +++++ .../infra/write_claude_jupyter_rules.md | 4 ++++ .../functions/infra/write_jupyter_launcher.md | 4 ++++ .../infra/write_jupyter_registry_kernel.md | 4 ++++ .../infra/write_mcp_jupyter_config.md | 6 +++++ .../pipelines/audit_registry_paths.md | 4 ++++ .../pipelines/export_analysis_pdfs.md | 6 +++++ .../pipelines/init_jupyter_analysis.md | 6 +++++ .../pipelines/setup_metabase_volume.md | 8 +++++++ bash/functions/shell/assert_command_exists.md | 4 ++++ bash/functions/shell/assert_file_exists.md | 4 ++++ bash/functions/shell/exit_with_status.md | 8 +++++++ bash/functions/shell/find_free_port.md | 6 +++++ bash/functions/shell/report_execution_json.md | 16 ++++++++++++++ bash/functions/shell/run_steps.md | 6 +++++ .../shell/validate_registry_paths.md | 8 +++++++ frontend/functions/core/chart_colors.md | 4 ++++ frontend/functions/core/cn.md | 4 ++++ frontend/functions/core/format_compact.md | 6 +++++ frontend/functions/core/generate_theme_css.md | 6 +++++ frontend/functions/core/get_computed_color.md | 4 ++++ frontend/functions/core/get_series_color.md | 6 +++++ frontend/functions/core/get_theme_tokens.md | 1 + .../functions/core/theme_config_to_colors.md | 4 ++++ frontend/functions/core/wails_cache.md | 1 + frontend/functions/ui/accordion.md | 1 + frontend/functions/ui/alert.md | 1 + frontend/functions/ui/analytics_page.md | 4 ++++ frontend/functions/ui/apply_theme.md | 4 ++++ frontend/functions/ui/area_chart.md | 1 + frontend/functions/ui/avatar.md | 1 + frontend/functions/ui/badge.md | 1 + frontend/functions/ui/bar_chart.md | 1 + frontend/functions/ui/breadcrumb.md | 1 + frontend/functions/ui/button.md | 1 + frontend/functions/ui/card.md | 1 + frontend/functions/ui/chart_container.md | 1 + frontend/functions/ui/checkbox.md | 1 + frontend/functions/ui/command.md | 1 + frontend/functions/ui/crud_page.md | 4 ++++ frontend/functions/ui/dashboard_layout.md | 4 ++++ frontend/functions/ui/data_table.md | 1 + frontend/functions/ui/detail_page.md | 4 ++++ frontend/functions/ui/dialog.md | 1 + frontend/functions/ui/dropdown_menu.md | 1 + frontend/functions/ui/form_field.md | 1 + .../functions/ui/graph/graph_container.md | 1 + frontend/functions/ui/input.md | 1 + frontend/functions/ui/kpi_card.md | 1 + frontend/functions/ui/label.md | 1 + frontend/functions/ui/line_chart.md | 1 + frontend/functions/ui/page_header.md | 1 + frontend/functions/ui/pagination.md | 1 + frontend/functions/ui/pie_chart.md | 1 + frontend/functions/ui/popover.md | 1 + frontend/functions/ui/progress_bar.md | 1 + frontend/functions/ui/radio_group.md | 1 + frontend/functions/ui/search_bar.md | 8 +++++++ frontend/functions/ui/select.md | 1 + frontend/functions/ui/settings_page.md | 4 ++++ frontend/functions/ui/sheet.md | 1 + frontend/functions/ui/simple_select.md | 1 + frontend/functions/ui/skeleton.md | 1 + frontend/functions/ui/sparkline.md | 1 + frontend/functions/ui/switch_toggle.md | 1 + frontend/functions/ui/tabs.md | 1 + frontend/functions/ui/textarea.md | 1 + frontend/functions/ui/theme_provider.md | 1 + frontend/functions/ui/toast.md | 1 + frontend/functions/ui/tooltip.md | 1 + frontend/functions/ui/use_animated_canvas.md | 4 ++++ frontend/functions/ui/use_wails_event.md | 4 ++++ frontend/functions/ui/use_wails_mutation.md | 4 ++++ frontend/functions/ui/use_wails_query.md | 4 ++++ frontend/functions/ui/use_wails_stream.md | 4 ++++ frontend/functions/ui/wails_provider.md | 1 + functions/browser/cdp_click.md | 6 +++++ functions/browser/cdp_close.md | 6 +++++ functions/browser/cdp_connect.md | 4 ++++ functions/browser/cdp_evaluate.md | 6 +++++ functions/browser/cdp_get_html.md | 4 ++++ functions/browser/cdp_navigate.md | 6 +++++ functions/browser/cdp_screenshot.md | 8 +++++++ functions/browser/cdp_type_text.md | 6 +++++ functions/browser/cdp_wait_element.md | 8 +++++++ functions/browser/cdp_wait_load.md | 6 +++++ functions/browser/chrome_launch.md | 4 ++++ functions/core/all_slice.md | 6 +++++ functions/core/any_slice.md | 6 +++++ functions/core/chunk.md | 6 +++++ functions/core/compose2.md | 6 +++++ functions/core/const_func.md | 4 ++++ functions/core/curry2.md | 4 ++++ functions/core/detect_cycle.md | 16 ++++++++++++++ functions/core/drop.md | 6 +++++ functions/core/filter_slice.md | 6 +++++ functions/core/find.md | 6 +++++ functions/core/find_index.md | 6 +++++ functions/core/flat_map_slice.md | 6 +++++ functions/core/flatten.md | 4 ++++ functions/core/flip.md | 4 ++++ functions/core/generate_id.md | 8 +++++++ functions/core/group_by.md | 6 +++++ functions/core/identity.md | 4 ++++ functions/core/join_by_key.md | 10 +++++++++ functions/core/map_concurrent.md | 8 +++++++ functions/core/map_slice.md | 6 +++++ functions/core/memoize.md | 4 ++++ functions/core/next_cron_time.md | 6 +++++ functions/core/parse_cron_expr.md | 4 ++++ functions/core/partial2.md | 6 +++++ functions/core/partition.md | 6 +++++ functions/core/pipe2.md | 6 +++++ functions/core/pipe3.md | 8 +++++++ functions/core/pipeline.md | 4 ++++ functions/core/reduce.md | 8 +++++++ functions/core/retry_with_backoff.md | 8 +++++++ functions/core/rewrite_rule.md | 6 +++++ functions/core/take.md | 6 +++++ functions/core/uncurry2.md | 4 ++++ functions/core/unique.md | 4 ++++ functions/core/validate_struct_fields.md | 6 +++++ functions/core/zip.md | 6 +++++ .../cybersecurity/detect_sql_injection.md | 4 ++++ functions/cybersecurity/entropy_shannon.md | 4 ++++ functions/cybersecurity/extract_urls.md | 4 ++++ functions/cybersecurity/fetch_http_headers.md | 4 ++++ functions/cybersecurity/hash_md5.md | 4 ++++ functions/cybersecurity/hash_sha256.md | 4 ++++ functions/cybersecurity/ip_in_range.md | 6 +++++ functions/cybersecurity/is_base64.md | 4 ++++ functions/cybersecurity/is_hex.md | 4 ++++ functions/cybersecurity/jaccard_similarity.md | 6 +++++ .../cybersecurity/levenshtein_distance.md | 6 +++++ functions/cybersecurity/lookup_whois.md | 4 ++++ functions/cybersecurity/normalize_url.md | 4 ++++ functions/cybersecurity/parse_ip_cidr.md | 4 ++++ functions/cybersecurity/resolve_dns.md | 4 ++++ functions/cybersecurity/scan_port_tcp.md | 8 +++++++ functions/datascience/autocorrelation.md | 6 +++++ functions/datascience/clip.md | 8 +++++++ functions/datascience/detect_outliers.md | 6 +++++ functions/datascience/diff_entities.md | 10 +++++++++ functions/datascience/fetch_data_frame.md | 6 +++++ functions/datascience/fft.md | 4 ++++ functions/datascience/group_by.md | 6 +++++ functions/datascience/histogram.md | 6 +++++ functions/datascience/impute.md | 4 ++++ functions/datascience/load_csv.md | 4 ++++ functions/datascience/load_parquet.md | 4 ++++ functions/datascience/lorenz_step.md | 8 +++++++ functions/datascience/min_max_scale.md | 4 ++++ functions/datascience/pearson.md | 6 +++++ functions/datascience/pivot.md | 12 ++++++++++ functions/datascience/rolling_window.md | 6 +++++ functions/datascience/standardize.md | 4 ++++ functions/datascience/zip_slices.md | 6 +++++ functions/finance/annualized_volatility.md | 6 +++++ functions/finance/bollinger_bands.md | 8 +++++++ functions/finance/ema.md | 6 +++++ functions/finance/fetch_ohlcv.md | 6 +++++ functions/finance/load_ohlcv_from_duckdb.md | 6 +++++ functions/finance/log_return.md | 6 +++++ functions/finance/max_drawdown.md | 4 ++++ functions/finance/normalize_ohlcv.md | 12 ++++++++++ functions/finance/rsi.md | 6 +++++ functions/finance/sharpe_ratio.md | 8 +++++++ functions/finance/sma.md | 6 +++++ functions/finance/stream_ticks.md | 4 ++++ functions/finance/tick_to_ohlcv.md | 10 +++++++++ functions/finance/vwap.md | 6 +++++ functions/finance/write_ohlcv_to_parquet.md | 6 +++++ functions/infra/cache_to_sqlite.md | 6 +++++ functions/infra/clickhouse_open.md | 12 ++++++++++ functions/infra/cron_ticker.md | 6 +++++ functions/infra/db_close.md | 4 ++++ functions/infra/db_create_table.md | 8 +++++++ functions/infra/db_exec.md | 8 +++++++ functions/infra/db_insert_batch.md | 10 +++++++++ functions/infra/db_insert_row.md | 8 +++++++ functions/infra/db_query.md | 8 +++++++ functions/infra/deploy_app.md | 10 +++++++++ functions/infra/docker_build_image.md | 8 +++++++ functions/infra/docker_compose_down.md | 6 +++++ functions/infra/docker_compose_up.md | 6 +++++ functions/infra/docker_container_logs.md | 6 +++++ functions/infra/docker_create_network.md | 6 +++++ functions/infra/docker_inspect_container.md | 4 ++++ functions/infra/docker_list_containers.md | 4 ++++ functions/infra/docker_list_images.md | 2 ++ functions/infra/docker_pull_image.md | 4 ++++ functions/infra/docker_remove_container.md | 6 +++++ functions/infra/docker_remove_image.md | 6 +++++ functions/infra/docker_remove_network.md | 4 ++++ functions/infra/docker_run_container.md | 6 +++++ functions/infra/docker_start_container.md | 4 ++++ functions/infra/docker_stop_container.md | 6 +++++ functions/infra/docker_volume_create.md | 4 ++++ functions/infra/docker_volume_list.md | 2 ++ functions/infra/docker_volume_remove.md | 6 +++++ functions/infra/duckdb_open.md | 4 ++++ functions/infra/generate_dockerfile.md | 8 +++++++ functions/infra/go_build_binary.md | 10 +++++++++ functions/infra/health_check_http.md | 8 +++++++ functions/infra/http_download_file.md | 10 +++++++++ functions/infra/http_get_json.md | 8 +++++++ functions/infra/http_post_json.md | 10 +++++++++ functions/infra/metabase_auth.md | 8 +++++++ functions/infra/metabase_create_card.md | 14 ++++++++++++ functions/infra/metabase_create_dashboard.md | 10 +++++++++ functions/infra/metabase_create_user.md | 14 ++++++++++++ functions/infra/metabase_deactivate_user.md | 6 +++++ functions/infra/metabase_delete_card.md | 6 +++++ functions/infra/metabase_delete_dashboard.md | 6 +++++ functions/infra/metabase_execute_card.md | 8 +++++++ functions/infra/metabase_execute_query.md | 10 +++++++++ functions/infra/metabase_get_card.md | 6 +++++ functions/infra/metabase_get_dashboard.md | 6 +++++ functions/infra/metabase_get_user.md | 6 +++++ functions/infra/metabase_list_cards.md | 8 +++++++ functions/infra/metabase_list_dashboards.md | 6 +++++ functions/infra/metabase_list_users.md | 12 ++++++++++ functions/infra/metabase_update_card.md | 8 +++++++ functions/infra/metabase_update_dashboard.md | 8 +++++++ functions/infra/metabase_update_user.md | 8 +++++++ functions/infra/nordvpn_container_run.md | 4 ++++ functions/infra/nordvpn_container_start.md | 4 ++++ functions/infra/nordvpn_container_stop.md | 6 +++++ functions/infra/parse_nordvpn_status.md | 4 ++++ functions/infra/postgres_open.md | 14 ++++++++++++ functions/infra/scaffold_wails_app.md | 6 +++++ functions/infra/sqlite_open.md | 6 +++++ functions/infra/ssh_check.md | 4 ++++ functions/infra/ssh_download.md | 8 +++++++ functions/infra/ssh_exec.md | 6 +++++ functions/infra/ssh_tunnel_close.md | 4 ++++ functions/infra/ssh_tunnel_open.md | 10 +++++++++ functions/infra/ssh_upload.md | 8 +++++++ functions/infra/stop_app.md | 6 +++++ functions/infra/wails_bind_crud.md | 4 ++++ functions/infra/wails_build.md | 6 +++++ functions/infra/wails_emit_event.md | 8 +++++++ functions/infra/wails_stream_data.md | 8 +++++++ functions/infra/write_dockerfile.md | 6 +++++ functions/pipelines/docker_tui.md | 2 ++ functions/pipelines/init_metabase.md | 2 ++ functions/pipelines/pipeline_launcher.md | 2 ++ functions/shell/run_cmd.md | 6 +++++ functions/shell/run_cmd_timeout.md | 8 +++++++ functions/shell/run_pipe.md | 4 ++++ functions/shell/run_shell.md | 4 ++++ functions/shell/run_shell_timeout.md | 6 +++++ functions/shell/which.md | 4 ++++ functions/tui/clear_screen.md | 2 ++ functions/tui/confirm_prompt.md | 4 ++++ functions/tui/dark_styles.md | 2 ++ functions/tui/dark_theme.md | 2 ++ functions/tui/default_styles.md | 2 ++ functions/tui/default_theme.md | 2 ++ functions/tui/hide_cursor.md | 2 ++ functions/tui/new_base_model.md | 2 ++ functions/tui/new_confirm.md | 4 ++++ functions/tui/new_filtered_list.md | 6 +++++ functions/tui/new_list.md | 4 ++++ functions/tui/new_multi_list.md | 4 ++++ functions/tui/new_multi_progress.md | 2 ++ functions/tui/new_progress.md | 6 +++++ functions/tui/new_progress_with_styles.md | 8 +++++++ functions/tui/new_spinner.md | 4 ++++ functions/tui/new_spinner_with_style.md | 6 +++++ functions/tui/new_spinner_with_timeout.md | 6 +++++ functions/tui/new_styles.md | 4 ++++ functions/tui/print_error.md | 4 ++++ functions/tui/print_info.md | 4 ++++ functions/tui/print_muted.md | 4 ++++ functions/tui/print_success.md | 4 ++++ functions/tui/print_warning.md | 4 ++++ functions/tui/quit_msg.md | 2 ++ functions/tui/run_fullscreen.md | 4 ++++ functions/tui/run_model.md | 4 ++++ functions/tui/run_with_mouse.md | 4 ++++ functions/tui/show_cursor.md | 2 ++ .../functions/infra/win_firewall_add_rule.md | 8 +++++++ .../infra/win_firewall_remove_rule.md | 4 ++++ .../functions/infra/win_portproxy_add.md | 10 +++++++++ .../functions/infra/win_portproxy_remove.md | 6 +++++ python/functions/core/all_of.md | 6 +++++ python/functions/core/any_of.md | 6 +++++ .../functions/core/build_tree_from_headers.md | 4 ++++ python/functions/core/cache_decorator.md | 8 +++++++ .../core/calculate_media_strategy.md | 6 +++++ .../functions/core/calculate_page_offset.md | 4 ++++ .../functions/core/call_batch_with_retry.md | 18 +++++++++++++++ python/functions/core/chunk.md | 6 +++++ python/functions/core/circuit_breaker.md | 6 +++++ python/functions/core/classify_api_error.md | 4 ++++ python/functions/core/coerce_types.md | 6 +++++ python/functions/core/compose.md | 4 ++++ .../functions/core/compute_backoff_delay.md | 10 +++++++++ .../core/convert_github_to_raw_url.md | 4 ++++ python/functions/core/create_node_mapping.md | 4 ++++ python/functions/core/cursor_paginate.md | 16 ++++++++++++++ .../functions/core/detect_headings_by_font.md | 8 +++++++ python/functions/core/detect_url_type.md | 6 +++++ python/functions/core/docx_to_markdown.md | 4 ++++ python/functions/core/drop.md | 6 +++++ python/functions/core/epub_to_markdown.md | 4 ++++ python/functions/core/estimate_token_count.md | 4 ++++ python/functions/core/excel_to_markdown.md | 6 +++++ python/functions/core/extract_frontmatter.md | 4 ++++ .../functions/core/extract_json_from_llm.md | 4 ++++ .../core/extract_markdown_headers.md | 4 ++++ .../functions/core/extract_pdf_bookmarks.md | 4 ++++ python/functions/core/extract_pdf_text.md | 4 ++++ .../functions/core/extract_text_from_file.md | 4 ++++ python/functions/core/fetch_and_parse_url.md | 6 +++++ python/functions/core/filter_list.md | 6 +++++ python/functions/core/find.md | 6 +++++ python/functions/core/find_headings.md | 4 ++++ python/functions/core/find_index.md | 6 +++++ python/functions/core/flat_map.md | 6 +++++ python/functions/core/flatten.md | 4 ++++ python/functions/core/flatten_tree.md | 4 ++++ python/functions/core/format_iso8601.md | 4 ++++ python/functions/core/format_simplified.md | 6 +++++ .../core/format_table_to_markdown.md | 6 +++++ .../functions/core/format_tree_structure.md | 6 +++++ python/functions/core/from_csv.md | 8 +++++++ python/functions/core/from_jsonl.md | 4 ++++ python/functions/core/generate_html_report.md | 6 +++++ python/functions/core/get_leaf_nodes.md | 4 ++++ python/functions/core/get_pdf_page_tokens.md | 8 +++++++ python/functions/core/get_text_stats.md | 4 ++++ python/functions/core/group_by.md | 6 +++++ python/functions/core/html_to_markdown.md | 4 ++++ python/functions/core/is_git_repo_url.md | 6 +++++ python/functions/core/join_by_key.md | 10 +++++++++ python/functions/core/list_to_tree.md | 4 ++++ .../functions/core/llm_acompletion_retry.md | 10 +++++++++ python/functions/core/llm_completion_retry.md | 14 ++++++++++++ python/functions/core/load_translations.md | 4 ++++ python/functions/core/map_list.md | 6 +++++ .../functions/core/merge_entity_attributes.md | 4 ++++ python/functions/core/next_cron_time.md | 6 +++++ .../functions/core/normalize_entity_name.md | 6 +++++ python/functions/core/page_list_to_groups.md | 10 +++++++++ python/functions/core/parse_code_ast.md | 6 +++++ python/functions/core/parse_cron_expr.md | 4 ++++ python/functions/core/parse_git_url.md | 6 +++++ python/functions/core/parse_iso_datetime.md | 4 ++++ python/functions/core/parse_llm_json.md | 4 ++++ python/functions/core/parse_page_range.md | 4 ++++ python/functions/core/parser_registry.md | 2 ++ python/functions/core/partition.md | 6 +++++ python/functions/core/pdf_to_markdown.md | 6 +++++ python/functions/core/pipe.md | 6 +++++ python/functions/core/preprocess_text.md | 4 ++++ python/functions/core/react_loop.md | 18 +++++++++++++++ python/functions/core/reduce_list.md | 8 +++++++ python/functions/core/remove_tree_fields.md | 6 +++++ python/functions/core/render_template.md | 8 +++++++ python/functions/core/retry_async.md | 14 ++++++++++++ python/functions/core/retry_sync.md | 14 ++++++++++++ python/functions/core/retry_with_backoff.md | 16 ++++++++++++++ .../core/retry_with_backoff_async.md | 16 ++++++++++++++ python/functions/core/sanitize_for_path.md | 6 +++++ python/functions/core/smart_split_content.md | 8 +++++++ .../functions/core/split_text_into_chunks.md | 8 +++++++ .../core/strip_markdown_codeblock.md | 4 ++++ python/functions/core/strip_think_tags.md | 4 ++++ python/functions/core/t.md | 8 +++++++ python/functions/core/take.md | 6 +++++ python/functions/core/task_manager.md | 2 ++ python/functions/core/to_csv.md | 10 +++++++++ python/functions/core/to_jsonl.md | 4 ++++ python/functions/core/to_pascal_case.md | 4 ++++ python/functions/core/tree_to_flat_list.md | 4 ++++ python/functions/core/unique.md | 4 ++++ python/functions/core/validate_git_ssh_uri.md | 4 ++++ python/functions/core/validate_json_schema.md | 6 +++++ python/functions/core/write_node_ids.md | 6 +++++ python/functions/core/zip_with.md | 8 +++++++ .../cybersecurity/detect_sql_injection.md | 4 ++++ .../cybersecurity/entropy_shannon.md | 4 ++++ .../cybersecurity/envelope_decrypt.md | 6 +++++ .../cybersecurity/envelope_encrypt.md | 6 +++++ .../functions/cybersecurity/extract_urls.md | 4 ++++ python/functions/cybersecurity/hash_md5.md | 4 ++++ python/functions/cybersecurity/hash_sha256.md | 4 ++++ python/functions/cybersecurity/is_base64.md | 4 ++++ python/functions/cybersecurity/is_hex.md | 4 ++++ .../cybersecurity/jaccard_similarity.md | 6 +++++ .../cybersecurity/levenshtein_distance.md | 6 +++++ .../functions/cybersecurity/normalize_url.md | 4 ++++ .../datascience/aggregate_by_group.md | 8 +++++++ .../functions/datascience/autocorrelation.md | 6 +++++ .../datascience/build_entity_schema_prompt.md | 4 ++++ .../build_relation_schema_prompt.md | 4 ++++ python/functions/datascience/clip.md | 8 +++++++ .../datascience/deduplicate_entities.md | 8 +++++++ .../datascience/deduplicate_relations.md | 6 +++++ python/functions/datascience/detect_drift.md | 10 +++++++++ .../functions/datascience/detect_outliers.md | 6 +++++ python/functions/datascience/diff_entities.md | 12 ++++++++++ .../functions/datascience/diff_relations.md | 12 ++++++++++ .../functions/datascience/estimate_hawkes.md | 6 +++++ .../datascience/estimate_pareto_alpha.md | 6 +++++ .../datascience/extract_entities_llm.md | 10 +++++++++ .../datascience/extract_relations_llm.md | 12 ++++++++++ python/functions/datascience/histogram.md | 6 +++++ python/functions/datascience/hotness_score.md | 10 +++++++++ python/functions/datascience/impute.md | 4 ++++ python/functions/datascience/linspace.md | 8 +++++++ python/functions/datascience/melt.md | 12 ++++++++++ python/functions/datascience/merge_graphs.md | 8 +++++++ python/functions/datascience/min_max_scale.md | 4 ++++ .../datascience/ops_to_rdf_triples.md | 6 +++++ .../datascience/ops_to_sigma_json.md | 4 ++++ python/functions/datascience/pearson.md | 6 +++++ python/functions/datascience/pivot.md | 12 ++++++++++ .../datascience/render_sigma_html.md | 8 +++++++ .../functions/datascience/rolling_window.md | 6 +++++ python/functions/datascience/standardize.md | 4 ++++ .../functions/embedding/embedding_encode.md | 8 +++++++ .../embedding/embedding_load_model.md | 4 ++++ .../embedding/embedding_save_model.md | 6 +++++ .../embedding/embedding_search_sqlvec.md | 10 +++++++++ .../embedding/embedding_search_usearch.md | 10 +++++++++ .../embedding/embedding_store_sqlvec.md | 12 ++++++++++ .../embedding/embedding_store_usearch.md | 10 +++++++++ .../finance/annualized_volatility.md | 6 +++++ .../finance/avellaneda_stoikov_quotes.md | 16 ++++++++++++++ python/functions/finance/bollinger_bands.md | 8 +++++++ python/functions/finance/ema.md | 6 +++++ .../functions/finance/generate_gbm_prices.md | 16 ++++++++++++++ .../functions/finance/generate_taker_order.md | 12 ++++++++++ python/functions/finance/hawkes_intensity.md | 12 ++++++++++ python/functions/finance/log_return.md | 6 +++++ python/functions/finance/max_drawdown.md | 4 ++++ python/functions/finance/rsi.md | 6 +++++ python/functions/finance/sharpe_ratio.md | 8 +++++++ python/functions/finance/sma.md | 6 +++++ python/functions/finance/vwap.md | 6 +++++ python/functions/infra/cache_to_file.md | 6 +++++ python/functions/infra/cache_to_sqlite.md | 6 +++++ python/functions/infra/get_logger.md | 4 ++++ python/functions/infra/http_download_file.md | 12 ++++++++++ python/functions/infra/http_get_json.md | 10 +++++++++ python/functions/infra/http_post_json.md | 10 +++++++++ .../infra/normalize_zip_filenames.md | 4 ++++ .../infra/read_file_with_encoding.md | 6 +++++ python/functions/infra/safe_extract_zip.md | 6 +++++ python/functions/infra/scan_directory.md | 14 ++++++++++++ python/functions/infra/setup_logger.md | 8 +++++++ .../metabase/metabase_add_database.md | 10 +++++++++ python/functions/metabase/metabase_auth.md | 8 +++++++ .../metabase/metabase_create_card.md | 14 ++++++++++++ .../metabase/metabase_create_dashboard.md | 10 +++++++++ .../metabase/metabase_create_user.md | 14 ++++++++++++ .../metabase/metabase_deactivate_user.md | 6 +++++ .../metabase/metabase_delete_card.md | 6 +++++ .../metabase/metabase_delete_dashboard.md | 6 +++++ .../metabase/metabase_execute_card.md | 8 +++++++ .../metabase/metabase_execute_query.md | 10 +++++++++ .../functions/metabase/metabase_get_card.md | 6 +++++ .../metabase/metabase_get_dashboard.md | 6 +++++ .../metabase/metabase_get_database.md | 6 +++++ .../functions/metabase/metabase_get_user.md | 6 +++++ .../functions/metabase/metabase_list_cards.md | 8 +++++++ .../metabase/metabase_list_dashboards.md | 6 +++++ .../metabase/metabase_list_databases.md | 6 +++++ .../functions/metabase/metabase_list_users.md | 12 ++++++++++ python/functions/metabase/metabase_setup.md | 16 ++++++++++++++ .../metabase/metabase_update_card.md | 8 +++++++ .../metabase/metabase_update_dashboard.md | 8 +++++++ .../metabase/metabase_update_user.md | 8 +++++++ python/functions/notebook/jupyter_discover.md | 6 +++++ python/functions/notebook/jupyter_exec.md | 10 +++++++++ python/functions/notebook/jupyter_kernel.md | 1 + python/functions/notebook/jupyter_read.md | 10 +++++++++ python/functions/notebook/jupyter_write.md | 1 + .../pipelines/extraction_pipeline.md | 20 +++++++++++++++++ .../pipelines/metabase_add_ops_db.md | 4 ++++ .../metabase_create_ops_dashboard.md | 4 ++++ .../pipelines/metabase_fix_permissions.md | 1 + .../functions/pipelines/monte_carlo_market.md | 10 +++++++++ python/functions/pipelines/run_market_sim.md | 22 +++++++++++++++++++ 506 files changed, 2964 insertions(+) diff --git a/bash/functions/infra/assert_docker_container_running.md b/bash/functions/infra/assert_docker_container_running.md index 734792b9..903c6816 100644 --- a/bash/functions/infra/assert_docker_container_running.md +++ b/bash/functions/infra/assert_docker_container_running.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: container_name + desc: "nombre del contenedor Docker a verificar" +output: "sin salida; exit code 0 si existe y está corriendo, 1 si no" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/docker_cp_file.md b/bash/functions/infra/docker_cp_file.md index 892dc922..858a0fe4 100644 --- a/bash/functions/infra/docker_cp_file.md +++ b/bash/functions/infra/docker_cp_file.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: local_path + desc: "ruta del archivo local a copiar" + - name: container_name + desc: "nombre del contenedor Docker destino" + - name: dest_path + desc: "ruta destino dentro del contenedor" +output: "JSON con local_size y remote_size en bytes" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/init_uv_venv.md b/bash/functions/infra/init_uv_venv.md index e32bcc93..d3abb990 100644 --- a/bash/functions/infra/init_uv_venv.md +++ b/bash/functions/infra/init_uv_venv.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto donde crear el venv (default: directorio actual)" +output: "ruta absoluta del venv creado o existente" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/install_nbconvert.md b/bash/functions/infra/install_nbconvert.md index 4586bacc..75fac7c2 100644 --- a/bash/functions/infra/install_nbconvert.md +++ b/bash/functions/infra/install_nbconvert.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto con venv existente" +output: "sin salida" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/install_nordvpn.md b/bash/functions/infra/install_nordvpn.md index 66aa70fc..6cd40ee5 100644 --- a/bash/functions/infra/install_nordvpn.md +++ b/bash/functions/infra/install_nordvpn.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "sin salida; muestra estado de instalación" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_connect.md b/bash/functions/infra/nordvpn_connect.md index 19d0c0c9..2a2a0bc0 100644 --- a/bash/functions/infra/nordvpn_connect.md +++ b/bash/functions/infra/nordvpn_connect.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: country + desc: "país de destino (opcional; default: auto)" + - name: city + desc: "ciudad de destino (opcional; default: auto)" +output: "JSON con ok, server, country, city" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_disconnect.md b/bash/functions/infra/nordvpn_disconnect.md index 9b01d6c6..cd9b1a1d 100644 --- a/bash/functions/infra/nordvpn_disconnect.md +++ b/bash/functions/infra/nordvpn_disconnect.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "JSON con ok y status" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_get_ip.md b/bash/functions/infra/nordvpn_get_ip.md index 58c06f73..6ca29068 100644 --- a/bash/functions/infra/nordvpn_get_ip.md +++ b/bash/functions/infra/nordvpn_get_ip.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "JSON con ok, ip, vpn_connected, vpn_server, source" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_list_cities.md b/bash/functions/infra/nordvpn_list_cities.md index 21c5bc58..27898faa 100644 --- a/bash/functions/infra/nordvpn_list_cities.md +++ b/bash/functions/infra/nordvpn_list_cities.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: country + desc: "nombre del país en NordVPN (ej: Spain, United_States)" +output: "JSON con ok, country, count, cities (array de strings)" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_list_countries.md b/bash/functions/infra/nordvpn_list_countries.md index e7f38b27..c8574b05 100644 --- a/bash/functions/infra/nordvpn_list_countries.md +++ b/bash/functions/infra/nordvpn_list_countries.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "JSON con ok, count, countries (array de strings ordenado alfabéticamente)" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_set_protocol.md b/bash/functions/infra/nordvpn_set_protocol.md index 952093da..226bd0e2 100644 --- a/bash/functions/infra/nordvpn_set_protocol.md +++ b/bash/functions/infra/nordvpn_set_protocol.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: protocol + desc: "protocolo a usar: NordLynx (WireGuard) u OpenVPN" +output: "JSON con ok y protocol confirmado" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/nordvpn_status.md b/bash/functions/infra/nordvpn_status.md index b197ef62..6b9ac05f 100644 --- a/bash/functions/infra/nordvpn_status.md +++ b/bash/functions/infra/nordvpn_status.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "JSON con estado de VPN: ok, connected, status, hostname, ip, country, city, etc" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/notebook_to_pdf.md b/bash/functions/infra/notebook_to_pdf.md index 088fb76f..901c58d3 100644 --- a/bash/functions/infra/notebook_to_pdf.md +++ b/bash/functions/infra/notebook_to_pdf.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio raíz del proyecto con venv y notebooks" + - name: pattern + desc: "glob de notebooks a convertir (default: notebooks/*.ipynb)" + - name: output_dir + desc: "directorio destino para PDFs relativo a project_dir (default: notebooks/pdf/)" +output: "lista de PDFs generados con sus rutas" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/pass_delete.md b/bash/functions/infra/pass_delete.md index fc6d6dae..5da9ec96 100644 --- a/bash/functions/infra/pass_delete.md +++ b/bash/functions/infra/pass_delete.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: entry + desc: "ruta de entrada en el password store (ej: agentes/token)" +output: "sin salida" tested: true tests: ["elimina entrada de test", "falla con entrada inexistente"] test_file_path: "bash/functions/infra/pass_test.sh" diff --git a/bash/functions/infra/pass_generate.md b/bash/functions/infra/pass_generate.md index c10b314e..4657ed81 100644 --- a/bash/functions/infra/pass_generate.md +++ b/bash/functions/infra/pass_generate.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: entry + desc: "ruta de entrada en el password store" + - name: length + desc: "longitud del password (default: 24 caracteres)" +output: "password generado en texto plano" tested: true tests: ["genera password de longitud especifica", "default 24 chars"] test_file_path: "bash/functions/infra/pass_test.sh" diff --git a/bash/functions/infra/pass_get.md b/bash/functions/infra/pass_get.md index 36c2755d..517f0c36 100644 --- a/bash/functions/infra/pass_get.md +++ b/bash/functions/infra/pass_get.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: entry + desc: "ruta de entrada en el password store" +output: "valor del secreto en texto plano" tested: true tests: ["lee entrada existente", "falla con entrada inexistente"] test_file_path: "bash/functions/infra/pass_test.sh" diff --git a/bash/functions/infra/pass_list.md b/bash/functions/infra/pass_list.md index 461e1bdb..3ba49e75 100644 --- a/bash/functions/infra/pass_list.md +++ b/bash/functions/infra/pass_list.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: prefix + desc: "prefijo para filtrar entradas (opcional; ej: agentes)" +output: "JSON array de nombres de entradas" tested: true tests: ["lista todas las entradas", "filtra por prefijo"] test_file_path: "bash/functions/infra/pass_test.sh" diff --git a/bash/functions/infra/pass_set.md b/bash/functions/infra/pass_set.md index 9b2ea70c..19ccb349 100644 --- a/bash/functions/infra/pass_set.md +++ b/bash/functions/infra/pass_set.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: entry + desc: "ruta de entrada en el password store" + - name: value + desc: "valor del secreto (opcional; se lee de stdin si no se proporciona)" +output: "sin salida" tested: true tests: ["inserta valor y lo lee de vuelta", "sobreescribe valor existente"] test_file_path: "bash/functions/infra/pass_test.sh" diff --git a/bash/functions/infra/pass_sync.md b/bash/functions/infra/pass_sync.md index 4a2d62e2..414ed9c1 100644 --- a/bash/functions/infra/pass_sync.md +++ b/bash/functions/infra/pass_sync.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "JSON con resultados de pull y push" tested: true tests: ["sincroniza con remoto"] test_file_path: "bash/functions/infra/pass_test.sh" diff --git a/bash/functions/infra/uv_add_packages.md b/bash/functions/infra/uv_add_packages.md index 41d7b2bd..b98ce9b7 100644 --- a/bash/functions/infra/uv_add_packages.md +++ b/bash/functions/infra/uv_add_packages.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto con venv existente" + - name: packages + desc: "nombres de paquetes Python a instalar (variadic)" +output: "sin salida" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/write_claude_jupyter_rules.md b/bash/functions/infra/write_claude_jupyter_rules.md index f888b075..b3b10092 100644 --- a/bash/functions/infra/write_claude_jupyter_rules.md +++ b/bash/functions/infra/write_claude_jupyter_rules.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto Jupyter (default: directorio actual)" +output: "ruta del archivo .claude/CLAUDE.md generado o actualizado" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/write_jupyter_launcher.md b/bash/functions/infra/write_jupyter_launcher.md index 13d30bda..5fbe71e0 100644 --- a/bash/functions/infra/write_jupyter_launcher.md +++ b/bash/functions/infra/write_jupyter_launcher.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto Jupyter (default: directorio actual)" +output: "ruta del script run-jupyter-lab.sh generado" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/write_jupyter_registry_kernel.md b/bash/functions/infra/write_jupyter_registry_kernel.md index 6793f593..a00ae895 100644 --- a/bash/functions/infra/write_jupyter_registry_kernel.md +++ b/bash/functions/infra/write_jupyter_registry_kernel.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto Jupyter (default: directorio actual)" +output: "ruta del archivo startup generado" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/infra/write_mcp_jupyter_config.md b/bash/functions/infra/write_mcp_jupyter_config.md index 48290da4..e61a9d4a 100644 --- a/bash/functions/infra/write_mcp_jupyter_config.md +++ b/bash/functions/infra/write_mcp_jupyter_config.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: project_dir + desc: "directorio del proyecto Jupyter (default: directorio actual)" + - name: port + desc: "puerto Jupyter (default: detectado automáticamente)" +output: "ruta del archivo .mcp.json generado o actualizado" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/pipelines/audit_registry_paths.md b/bash/functions/pipelines/audit_registry_paths.md index 826632be..c6800d96 100644 --- a/bash/functions/pipelines/audit_registry_paths.md +++ b/bash/functions/pipelines/audit_registry_paths.md @@ -19,6 +19,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: output_file + desc: "archivo de salida con rutas rotas (default: broken_paths.txt en raíz)" +output: "sin salida directa; genera archivo con rutas inválidas" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/pipelines/export_analysis_pdfs.md b/bash/functions/pipelines/export_analysis_pdfs.md index 22f2fc04..1d5f7173 100644 --- a/bash/functions/pipelines/export_analysis_pdfs.md +++ b/bash/functions/pipelines/export_analysis_pdfs.md @@ -17,6 +17,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: nombre + desc: "nombre del análisis en analysis/{nombre}/" + - name: pattern + desc: "glob de notebooks a exportar (default: notebooks/*.ipynb)" +output: "sin salida directa; genera PDFs en notebooks/pdf/" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/pipelines/init_jupyter_analysis.md b/bash/functions/pipelines/init_jupyter_analysis.md index 37487e2d..482612db 100644 --- a/bash/functions/pipelines/init_jupyter_analysis.md +++ b/bash/functions/pipelines/init_jupyter_analysis.md @@ -22,6 +22,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: nombre + desc: "nombre del análisis a crear" + - name: paquetes_extra + desc: "paquetes Python adicionales a instalar (variadic, opcional)" +output: "sin salida directa; estructura completa en analysis/{nombre}/" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/pipelines/setup_metabase_volume.md b/bash/functions/pipelines/setup_metabase_volume.md index 89d49ac8..c4063295 100644 --- a/bash/functions/pipelines/setup_metabase_volume.md +++ b/bash/functions/pipelines/setup_metabase_volume.md @@ -18,6 +18,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: registry_db_path + desc: "ruta a registry.db local (default: /home/lucas/fn_registry/registry.db)" + - name: container_name + desc: "nombre del contenedor Metabase (default: metabase)" + - name: dest_path + desc: "ruta destino dentro del contenedor (default: /registry.db)" +output: "sin salida directa; verifica transferencia con coincidencia de tamaños" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/assert_command_exists.md b/bash/functions/shell/assert_command_exists.md index 46e1f958..240eb7de 100644 --- a/bash/functions/shell/assert_command_exists.md +++ b/bash/functions/shell/assert_command_exists.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: command_name + desc: "nombre del comando a verificar en PATH" +output: "sin salida en éxito" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/assert_file_exists.md b/bash/functions/shell/assert_file_exists.md index 5c9a35a4..6a303f39 100644 --- a/bash/functions/shell/assert_file_exists.md +++ b/bash/functions/shell/assert_file_exists.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: file_path + desc: "ruta del archivo a verificar" +output: "tamaño del archivo en bytes" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/exit_with_status.md b/bash/functions/shell/exit_with_status.md index 97738a6c..59472fd6 100644 --- a/bash/functions/shell/exit_with_status.md +++ b/bash/functions/shell/exit_with_status.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: total_steps + desc: "número total de pasos ejecutados" + - name: ok_steps + desc: "número de pasos exitosos" + - name: failed_steps + desc: "número de pasos fallidos" +output: "exit code: 0 (éxito), 1 (fallo), o 2 (parcial)" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/find_free_port.md b/bash/functions/shell/find_free_port.md index a9dd0d9c..337107b8 100644 --- a/bash/functions/shell/find_free_port.md +++ b/bash/functions/shell/find_free_port.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: start_port + desc: "puerto inicial del rango (default: 8888)" + - name: end_port + desc: "puerto final del rango (default: 8899)" +output: "número de puerto TCP libre" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/report_execution_json.md b/bash/functions/shell/report_execution_json.md index e6aee5d9..ff10ae67 100644 --- a/bash/functions/shell/report_execution_json.md +++ b/bash/functions/shell/report_execution_json.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: flow_name + desc: "nombre del flujo ejecutado" + - name: status + desc: "estado final: success, failure, o partial" + - name: exit_code + desc: "código de salida: 0, 1, o 2" + - name: started_at + desc: "timestamp ISO8601 de inicio" + - name: ended_at + desc: "timestamp ISO8601 de fin" + - name: duration_ms + desc: "duración total en milisegundos" + - name: steps_file + desc: "archivo TSV con resultados de cada paso" +output: "JSON estructurado con metadatos de ejecución y array de pasos" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/run_steps.md b/bash/functions/shell/run_steps.md index e24f6ad2..1c5a9ee0 100644 --- a/bash/functions/shell/run_steps.md +++ b/bash/functions/shell/run_steps.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: yaml_file + desc: "archivo YAML con especificación de pasos" + - name: --strict + desc: "flag opcional para mapear partial a failure" +output: "JSON de ejecución con detalles de cada paso" tested: false tests: [] test_file_path: "" diff --git a/bash/functions/shell/validate_registry_paths.md b/bash/functions/shell/validate_registry_paths.md index 4f5b7063..7e3d1109 100644 --- a/bash/functions/shell/validate_registry_paths.md +++ b/bash/functions/shell/validate_registry_paths.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: db_path + desc: "ruta a registry.db" + - name: table + desc: "tabla a validar: functions o types" + - name: root_dir + desc: "directorio raíz del repositorio" +output: "TSV con id, file_path, domain, tabla de rutas inválidas" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/chart_colors.md b/frontend/functions/core/chart_colors.md index 93a8ac13..14c350c9 100644 --- a/frontend/functions/core/chart_colors.md +++ b/frontend/functions/core/chart_colors.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: index + desc: "Índice cíclico en la paleta de colores (ciclará sobre 5 colores disponibles)" +output: "String con variable CSS de color para gráficos (ej: 'hsl(var(--chart-1, 220 70% 50%))')" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/cn.md b/frontend/functions/core/cn.md index d6f01622..f36db57f 100644 --- a/frontend/functions/core/cn.md +++ b/frontend/functions/core/cn.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [clsx, tailwind-merge] +params: + - name: inputs + desc: "Clases CSS en cualquier formato: strings, arrays, objetos con condiciones booleanas" +output: "String con clases CSS combinadas y mergeadas, sin duplicados y conflictos Tailwind resueltos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/format_compact.md b/frontend/functions/core/format_compact.md index 5b9bc2a7..19980245 100644 --- a/frontend/functions/core/format_compact.md +++ b/frontend/functions/core/format_compact.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: "n" + desc: "Número a formatear de forma compacta" + - name: decimals + desc: "Cantidad de decimales a mostrar (por defecto 1)" +output: "String con número formateado en notación compacta (ej: '1.2K', '1.5M', '1.0G')" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/generate_theme_css.md b/frontend/functions/core/generate_theme_css.md index 5f9c0121..7b971d57 100644 --- a/frontend/functions/core/generate_theme_css.md +++ b/frontend/functions/core/generate_theme_css.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: colors + desc: "Objeto con pares clave-valor de nombre variable CSS a valor de color" + - name: selector + desc: "Selector CSS donde inyectar variables (':root' por defecto)" +output: "String con bloque CSS completo conteniendo definiciones de variables de tema" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/get_computed_color.md b/frontend/functions/core/get_computed_color.md index 60f24a9a..506d0b91 100644 --- a/frontend/functions/core/get_computed_color.md +++ b/frontend/functions/core/get_computed_color.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: cssVar + desc: "Variable CSS a resolver (acepta '--primary', 'primary' o 'var(--primary)')" +output: "String con valor RGB computado por el browser (ej: 'rgb(120, 80, 220)')" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/get_series_color.md b/frontend/functions/core/get_series_color.md index a58f8a48..5cb6c4b5 100644 --- a/frontend/functions/core/get_series_color.md +++ b/frontend/functions/core/get_series_color.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: index + desc: "Índice de serie (ciclará sobre paleta de 5 colores)" + - name: color + desc: "Color explícito a usar si se proporciona (opcional)" +output: "String con color HEX o el color explícito proporcionado" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/get_theme_tokens.md b/frontend/functions/core/get_theme_tokens.md index 32a9317c..ac3640d5 100644 --- a/frontend/functions/core/get_theme_tokens.md +++ b/frontend/functions/core/get_theme_tokens.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +output: "Objeto ThemeTokens con todas las variables CSS de tema resueltas (colores, tipografía, espaciado)" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/theme_config_to_colors.md b/frontend/functions/core/theme_config_to_colors.md index 9c08c3d5..07266fc1 100644 --- a/frontend/functions/core/theme_config_to_colors.md +++ b/frontend/functions/core/theme_config_to_colors.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: config + desc: "Configuración de tema con propiedades semánticas de color" +output: "Objeto ThemeColors con variables CSS estandarizadas mapeadas de la config" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/core/wails_cache.md b/frontend/functions/core/wails_cache.md index fcf2cc20..fa74652b 100644 --- a/frontend/functions/core/wails_cache.md +++ b/frontend/functions/core/wails_cache.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [] +output: "Clase WailsCache con métodos get, set, invalidate, subscribe para gestionar caché reactiva con invalidación jerárquica" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/accordion.md b/frontend/functions/ui/accordion.md index f66db4cb..a2926de8 100644 --- a/frontend/functions/ui/accordion.md +++ b/frontend/functions/ui/accordion.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/collapsible", "lucide-react"] +output: "Componente Accordion que renderiza secciones colapsables con soporte para múltiples items abiertos simultáneamente" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/alert.md b/frontend/functions/ui/alert.md index 7022ff19..e3204043 100644 --- a/frontend/functions/ui/alert.md +++ b/frontend/functions/ui/alert.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react, class-variance-authority] +output: "Componente Alert que renderiza una alerta accesible con slots para título, descripción, icono y acción" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/analytics_page.md b/frontend/functions/ui/analytics_page.md index 307af435..e303a3d8 100644 --- a/frontend/functions/ui/analytics_page.md +++ b/frontend/functions/ui/analytics_page.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: props + desc: "Configuración del dashboard: título, métricas con deltas, y lista de charts con span" +output: "Componente ReactElement que renderiza un dashboard de analytics completo con header, KPIs y grid de charts" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/apply_theme.md b/frontend/functions/ui/apply_theme.md index e8eaf2e6..250857d5 100644 --- a/frontend/functions/ui/apply_theme.md +++ b/frontend/functions/ui/apply_theme.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: theme + desc: "Objeto Theme con nombre, label y colores a inyectar como CSS variables" +output: "Void - función impura que inyecta CSS variables en document.documentElement" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/area_chart.md b/frontend/functions/ui/area_chart.md index 2e6b65a6..0c1adec2 100644 --- a/frontend/functions/ui/area_chart.md +++ b/frontend/functions/ui/area_chart.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [recharts] +output: "Componente JSX que renderiza un gráfico de área con gradientes, multi-series y tooltips temáticos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/avatar.md b/frontend/functions/ui/avatar.md index c153f024..4133037d 100644 --- a/frontend/functions/ui/avatar.md +++ b/frontend/functions/ui/avatar.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["class-variance-authority"] +output: "Componente Avatar que renderiza imagen de usuario circular con fallback a iniciales generadas" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/badge.md b/frontend/functions/ui/badge.md index 691da46f..47d47317 100644 --- a/frontend/functions/ui/badge.md +++ b/frontend/functions/ui/badge.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["class-variance-authority"] +output: "Componente Badge que renderiza un indicador visual con 10 variantes semánticas de estado" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/bar_chart.md b/frontend/functions/ui/bar_chart.md index 1193a013..f9db5e34 100644 --- a/frontend/functions/ui/bar_chart.md +++ b/frontend/functions/ui/bar_chart.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [recharts] +output: "Componente JSX que renderiza un gráfico de barras vertical u horizontal con multi-series y tooltips temáticos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/breadcrumb.md b/frontend/functions/ui/breadcrumb.md index c2d788c8..b0430774 100644 --- a/frontend/functions/ui/breadcrumb.md +++ b/frontend/functions/ui/breadcrumb.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["lucide-react"] +output: "Componente Breadcrumb que renderiza navegación jerárquica con separadores, elipsis y soporte para router links" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/button.md b/frontend/functions/ui/button.md index cc83f2c4..57e1fd25 100644 --- a/frontend/functions/ui/button.md +++ b/frontend/functions/ui/button.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react", "class-variance-authority"] +output: "JSX.Element: botón renderizado con los estilos y comportamientos configurados" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/card.md b/frontend/functions/ui/card.md index eba1baca..7e7bca2c 100644 --- a/frontend/functions/ui/card.md +++ b/frontend/functions/ui/card.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["react"] +output: "Componente Card que renderiza un contenedor con slots composables (header, content, footer) y 3 variantes visuales" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/chart_container.md b/frontend/functions/ui/chart_container.md index eb9bae70..4535fa66 100644 --- a/frontend/functions/ui/chart_container.md +++ b/frontend/functions/ui/chart_container.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [recharts, react] +output: "Componente ChartContainer que renderiza base responsive para gráficos Recharts con tooltip y legend temáticos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/checkbox.md b/frontend/functions/ui/checkbox.md index b96ac941..26a3b850 100644 --- a/frontend/functions/ui/checkbox.md +++ b/frontend/functions/ui/checkbox.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/checkbox", "class-variance-authority"] +output: "Componente Checkbox que renderiza input booleano accesible con label opcional y estado indeterminate" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/command.md b/frontend/functions/ui/command.md index 22c466a2..493c7954 100644 --- a/frontend/functions/ui/command.md +++ b/frontend/functions/ui/command.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["lucide-react"] +output: "Componente Command que renderiza combobox de búsqueda y selección con filtrado reactivo, grupos e iconos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/crud_page.md b/frontend/functions/ui/crud_page.md index 495b7768..68f07c23 100644 --- a/frontend/functions/ui/crud_page.md +++ b/frontend/functions/ui/crud_page.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: props + desc: "Configuración CRUD: título, datos, columnas de tabla, campos de formulario y callbacks para add/edit/delete" +output: "Componente ReactElement que renderiza página CRUD completa con tabla y botones de acción" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/dashboard_layout.md b/frontend/functions/ui/dashboard_layout.md index be1454d7..947a8c36 100644 --- a/frontend/functions/ui/dashboard_layout.md +++ b/frontend/functions/ui/dashboard_layout.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: props + desc: "Configuración de layout: número de columnas y array de widgets con id, título, contenido y span" +output: "Componente ReactElement que renderiza grid responsive de dashboard con ancho adaptable por widget" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/data_table.md b/frontend/functions/ui/data_table.md index 31967ae3..f6b2440b 100644 --- a/frontend/functions/ui/data_table.md +++ b/frontend/functions/ui/data_table.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente DataTable que renderiza tabla con sticky header, heatmap condicional y formato automático de datos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/detail_page.md b/frontend/functions/ui/detail_page.md index 3797db06..00dab53a 100644 --- a/frontend/functions/ui/detail_page.md +++ b/frontend/functions/ui/detail_page.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: props + desc: "Configuración de página de detalle: título, avatar, badge, tabs, timeline y campos de metadata" +output: "Componente ReactElement que renderiza página de detalle con header, grid de campos y timeline de actividad" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/dialog.md b/frontend/functions/ui/dialog.md index 0a128601..ae84dc09 100644 --- a/frontend/functions/ui/dialog.md +++ b/frontend/functions/ui/dialog.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react", lucide-react, react] +output: "Componente Dialog que renderiza modal accesible con overlay blur, focus trap y sistema de slots composables" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/dropdown_menu.md b/frontend/functions/ui/dropdown_menu.md index 30563419..b68da7ee 100644 --- a/frontend/functions/ui/dropdown_menu.md +++ b/frontend/functions/ui/dropdown_menu.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/menu", "lucide-react"] +output: "Componente DropdownMenu que renderiza menú desplegable accesible con items, checkboxes, radios y submenus" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/form_field.md b/frontend/functions/ui/form_field.md index ceb8a94c..6913ced7 100644 --- a/frontend/functions/ui/form_field.md +++ b/frontend/functions/ui/form_field.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente FormField que renderiza wrapper de campo con label, helper text, error y ARIA automáticos" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/graph/graph_container.md b/frontend/functions/ui/graph/graph_container.md index edbfc2ef..7e47892b 100644 --- a/frontend/functions/ui/graph/graph_container.md +++ b/frontend/functions/ui/graph/graph_container.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["graphology", "graphology-layout-forceatlas2", "sigma"] +output: "Componente GraphContainer que renderiza grafo interactivo con sigma.js, ForceAtlas2 layout y legend" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/input.md b/frontend/functions/ui/input.md index c3405c9e..c0f197ba 100644 --- a/frontend/functions/ui/input.md +++ b/frontend/functions/ui/input.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react", "react"] +output: "Componente Input que renderiza campo de entrada accesible con soporte para iconos y validación ARIA" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/kpi_card.md b/frontend/functions/ui/kpi_card.md index bea318e7..90699eed 100644 --- a/frontend/functions/ui/kpi_card.md +++ b/frontend/functions/ui/kpi_card.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente KPICard que renderiza card de métrica con label, valor, delta descriptivo, icono y slot de mini chart" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/label.md b/frontend/functions/ui/label.md index 069310b4..7dd73b2b 100644 --- a/frontend/functions/ui/label.md +++ b/frontend/functions/ui/label.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["react"] +output: "Componente Label que renderiza etiqueta de formulario accesible con soporte para estados disabled" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/line_chart.md b/frontend/functions/ui/line_chart.md index 84b16756..524ae4f6 100644 --- a/frontend/functions/ui/line_chart.md +++ b/frontend/functions/ui/line_chart.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [recharts] +output: "Componente LineChart que renderiza gráfico de líneas multi-series con zoom, curvas customizables y líneas de referencia" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/page_header.md b/frontend/functions/ui/page_header.md index 69ff92cc..45d6db21 100644 --- a/frontend/functions/ui/page_header.md +++ b/frontend/functions/ui/page_header.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente PageHeader que renderiza cabecera de página con título, acciones, tabs integrados y modo sticky" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/pagination.md b/frontend/functions/ui/pagination.md index 4844e1f2..17384130 100644 --- a/frontend/functions/ui/pagination.md +++ b/frontend/functions/ui/pagination.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["lucide-react", "./button"] +output: "Componente Pagination que renderiza controles de navegación de páginas con Previous/Next y números" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/pie_chart.md b/frontend/functions/ui/pie_chart.md index 971842ae..7f062fc9 100644 --- a/frontend/functions/ui/pie_chart.md +++ b/frontend/functions/ui/pie_chart.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [recharts] +output: "Componente PieChart que renderiza gráfico de torta o dona con labels de porcentaje, leyenda y tooltip" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/popover.md b/frontend/functions/ui/popover.md index c909bcce..5257d8f0 100644 --- a/frontend/functions/ui/popover.md +++ b/frontend/functions/ui/popover.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/popover"] +output: "Componente Popover que renderiza contenido flotante accesible posicionado automáticamente" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/progress_bar.md b/frontend/functions/ui/progress_bar.md index 2859b6ab..23510ca4 100644 --- a/frontend/functions/ui/progress_bar.md +++ b/frontend/functions/ui/progress_bar.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [class-variance-authority] +output: "Componente ProgressBar que renderiza barra de progreso con animaciones, buffer y modo indeterminado" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/radio_group.md b/frontend/functions/ui/radio_group.md index b331c4ff..8d8d56fc 100644 --- a/frontend/functions/ui/radio_group.md +++ b/frontend/functions/ui/radio_group.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/radio-group", "@base-ui/react/radio"] +output: "Componente RadioGroup que renderiza grupo de opciones exclusivas accesible" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/search_bar.md b/frontend/functions/ui/search_bar.md index 8f14571a..343c3cf1 100644 --- a/frontend/functions/ui/search_bar.md +++ b/frontend/functions/ui/search_bar.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: ["lucide-react"] +params: + - name: onSearch + desc: "Callback que se ejecuta con la query debounceada" + - name: placeholder + desc: "Placeholder del input (por defecto 'Search...')" + - name: debounceMs + desc: "Delay en milisegundos para el debounce (por defecto 300)" +output: "Componente SearchBar que renderiza input de búsqueda con icono y botón de limpiar" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/select.md b/frontend/functions/ui/select.md index 5592f2bc..47165272 100644 --- a/frontend/functions/ui/select.md +++ b/frontend/functions/ui/select.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react", lucide-react, react] +output: "Componente Select que renderiza dropdown genérico accesible con grupos, separadores y posicionamiento automático" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/settings_page.md b/frontend/functions/ui/settings_page.md index 8e03cf8b..797be63a 100644 --- a/frontend/functions/ui/settings_page.md +++ b/frontend/functions/ui/settings_page.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: props + desc: "Configuración: título, secciones con campos (text, number, toggle, select, textarea) y callback onSave" +output: "Componente ReactElement que renderiza página de configuración con sidebar y secciones navegables" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/sheet.md b/frontend/functions/ui/sheet.md index 194e19d5..9aa45b43 100644 --- a/frontend/functions/ui/sheet.md +++ b/frontend/functions/ui/sheet.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/dialog", "class-variance-authority", "lucide-react"] +output: "Componente Sheet que renderiza panel deslizante lateral accesible con animaciones" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/simple_select.md b/frontend/functions/ui/simple_select.md index e366194a..519b05c8 100644 --- a/frontend/functions/ui/simple_select.md +++ b/frontend/functions/ui/simple_select.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente SimpleSelect que renderiza dropdown simplificado con soporte para opciones planas o agrupadas" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/skeleton.md b/frontend/functions/ui/skeleton.md index 3b46e167..bb42b046 100644 --- a/frontend/functions/ui/skeleton.md +++ b/frontend/functions/ui/skeleton.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente Skeleton que renderiza placeholder de carga con 6 variantes preconfiguradas (text, card, avatar, button, table)" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/sparkline.md b/frontend/functions/ui/sparkline.md index d39048bd..aafced8d 100644 --- a/frontend/functions/ui/sparkline.md +++ b/frontend/functions/ui/sparkline.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente Sparkline que renderiza mini gráfico SVG inline con variantes line, area y bar" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/switch_toggle.md b/frontend/functions/ui/switch_toggle.md index 539cae3d..4041dc94 100644 --- a/frontend/functions/ui/switch_toggle.md +++ b/frontend/functions/ui/switch_toggle.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react/switch"] +output: "Componente SwitchToggle que renderiza switch on/off accesible con label opcional" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/tabs.md b/frontend/functions/ui/tabs.md index 2ae1fa10..61bae4ca 100644 --- a/frontend/functions/ui/tabs.md +++ b/frontend/functions/ui/tabs.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react", class-variance-authority] +output: "Componente Tabs que renderiza sistema de navegación por tabs con orientación y variantes configurables" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/textarea.md b/frontend/functions/ui/textarea.md index 57d37928..e48acb55 100644 --- a/frontend/functions/ui/textarea.md +++ b/frontend/functions/ui/textarea.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [] +output: "Componente Textarea que renderiza input multilinea accesible con auto-resize opcional" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/theme_provider.md b/frontend/functions/ui/theme_provider.md index efe7d53b..36563e0e 100644 --- a/frontend/functions/ui/theme_provider.md +++ b/frontend/functions/ui/theme_provider.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente ThemeProvider que renderiza context de tema con persistencia en localStorage y hook useTheme" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/toast.md b/frontend/functions/ui/toast.md index 01efb906..876416f7 100644 --- a/frontend/functions/ui/toast.md +++ b/frontend/functions/ui/toast.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["class-variance-authority", "lucide-react"] +output: "Componente Toast que renderiza notificación temporal con variantes semánticas, auto-dismiss y hook useToast" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/tooltip.md b/frontend/functions/ui/tooltip.md index 576199a6..4de4592e 100644 --- a/frontend/functions/ui/tooltip.md +++ b/frontend/functions/ui/tooltip.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: ["@base-ui/react", react] +output: "Componente Tooltip que renderiza tooltip accesible con posicionamiento automático y delay configurable" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/use_animated_canvas.md b/frontend/functions/ui/use_animated_canvas.md index 904f7a86..0ab58156 100644 --- a/frontend/functions/ui/use_animated_canvas.md +++ b/frontend/functions/ui/use_animated_canvas.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: options + desc: "Configuración: fps (target), draw (callback de renderizado), opcionalmente DPR" +output: "Hook que retorna canvasRef y renderFpsRef para renderizado animado a N fps" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/use_wails_event.md b/frontend/functions/ui/use_wails_event.md index fa04706b..f13692b7 100644 --- a/frontend/functions/ui/use_wails_event.md +++ b/frontend/functions/ui/use_wails_event.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: opts + desc: "Configuración: eventName, onEvent callback, once, enabled para controlar suscripción" +output: "Hook que retorna lastData, eventCount, emit y funciones para suscribirse a eventos Wails bidireccionales" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/use_wails_mutation.md b/frontend/functions/ui/use_wails_mutation.md index 82eb4463..b7e051ee 100644 --- a/frontend/functions/ui/use_wails_mutation.md +++ b/frontend/functions/ui/use_wails_mutation.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: opts + desc: "Configuración: mutationFn, invalidateQueries, onMutate para optimistic updates" +output: "Hook que retorna mutate, mutateAsync, isLoading, error para ejecutar escrituras IPC con cache" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/use_wails_query.md b/frontend/functions/ui/use_wails_query.md index 116f98c7..b1b14b40 100644 --- a/frontend/functions/ui/use_wails_query.md +++ b/frontend/functions/ui/use_wails_query.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: opts + desc: "Configuración: queryKey para cache, queryFn que ejecuta binding Wails, enabled, refetchInterval, staleTime" +output: "Hook que retorna data, loading, error, refetch, invalidate para queries cacheadas vía IPC" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/use_wails_stream.md b/frontend/functions/ui/use_wails_stream.md index 2556c333..4be35bbe 100644 --- a/frontend/functions/ui/use_wails_stream.md +++ b/frontend/functions/ui/use_wails_stream.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [react] +params: + - name: opts + desc: "Configuración: streamName, startFn/stopFn para control, bufferSize, transform para procesamiento" +output: "Hook que retorna data (array bufferado), isStreaming, start, stop, clear para streaming Go→TS" tested: false tests: [] test_file_path: "" diff --git a/frontend/functions/ui/wails_provider.md b/frontend/functions/ui/wails_provider.md index eee2b31d..5bd24d51 100644 --- a/frontend/functions/ui/wails_provider.md +++ b/frontend/functions/ui/wails_provider.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "" imports: [react] +output: "Componente WailsProvider que proporciona context de cache y opciones default para hooks Wails" tested: false tests: [] test_file_path: "" diff --git a/functions/browser/cdp_click.md b/functions/browser/cdp_click.md index 7c053b00..96f998c3 100644 --- a/functions/browser/cdp_click.md +++ b/functions/browser/cdp_click.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, strconv, strings] +params: + - name: c + desc: "conexión CDP activa" + - name: selector + desc: "selector CSS del elemento a hacer click" +output: "error si el selector no coincide o falla la acción" tested: false tests: [] test_file_path: "" diff --git a/functions/browser/cdp_close.md b/functions/browser/cdp_close.md index 139a0c2f..39d59c8b 100644 --- a/functions/browser/cdp_close.md +++ b/functions/browser/cdp_close.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os] +params: + - name: c + desc: "conexión CDP (puede ser nil)" + - name: pid + desc: "PID del proceso Chrome (0 para no matar)" +output: "error si falla la desconexión o el cierre del proceso" tested: false tests: [] test_file_path: "" diff --git a/functions/browser/cdp_connect.md b/functions/browser/cdp_connect.md index b4554f8f..63607cc5 100644 --- a/functions/browser/cdp_connect.md +++ b/functions/browser/cdp_connect.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, net, net/url, strings] +params: + - name: port + desc: "puerto del servidor CDP (localhost:{port})" +output: "(*CDPConn, error): conexión WebSocket lista para usar" tested: true tests: ["TestChromeLaunchAndConnect"] test_file_path: "functions/browser/chrome_launch_test.go" diff --git a/functions/browser/cdp_evaluate.md b/functions/browser/cdp_evaluate.md index 6b6e7ba9..32ba6206 100644 --- a/functions/browser/cdp_evaluate.md +++ b/functions/browser/cdp_evaluate.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: c + desc: "conexión CDP activa" + - name: expression + desc: "expresión JavaScript a evaluar" +output: "string: resultado serializado, o error si falla" tested: true tests: ["TestCdpEvaluate"] test_file_path: "functions/browser/chrome_launch_test.go" diff --git a/functions/browser/cdp_get_html.md b/functions/browser/cdp_get_html.md index 956e9e06..f54ab736 100644 --- a/functions/browser/cdp_get_html.md +++ b/functions/browser/cdp_get_html.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: c + desc: "conexión CDP activa" +output: "string: HTML completo de la página (post-JavaScript)" tested: true tests: ["TestCdpGetHTML"] test_file_path: "functions/browser/chrome_launch_test.go" diff --git a/functions/browser/cdp_navigate.md b/functions/browser/cdp_navigate.md index d31056ef..fd333728 100644 --- a/functions/browser/cdp_navigate.md +++ b/functions/browser/cdp_navigate.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: c + desc: "conexión CDP activa" + - name: targetURL + desc: "URL a navegar" +output: "error si la navegación falla" tested: true tests: ["TestChromeLaunchAndConnect"] test_file_path: "functions/browser/chrome_launch_test.go" diff --git a/functions/browser/cdp_screenshot.md b/functions/browser/cdp_screenshot.md index f9c5e09e..36e4eac3 100644 --- a/functions/browser/cdp_screenshot.md +++ b/functions/browser/cdp_screenshot.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [encoding/base64, fmt, os, path/filepath] +params: + - name: c + desc: "conexión CDP activa" + - name: outputPath + desc: "ruta del archivo PNG/JPEG de salida" + - name: opts + desc: "opciones de captura (FullPage, Quality, Format)" +output: "error si falla la captura o la escritura del archivo" tested: true tests: ["TestCdpScreenshot"] test_file_path: "functions/browser/chrome_launch_test.go" diff --git a/functions/browser/cdp_type_text.md b/functions/browser/cdp_type_text.md index 0e86afa9..9413b0e9 100644 --- a/functions/browser/cdp_type_text.md +++ b/functions/browser/cdp_type_text.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, time] +params: + - name: c + desc: "conexión CDP activa" + - name: text + desc: "texto a escribir en el elemento enfocado" +output: "error si falla la escritura" tested: false tests: [] test_file_path: "" diff --git a/functions/browser/cdp_wait_element.md b/functions/browser/cdp_wait_element.md index 0c73c06b..c59f8baf 100644 --- a/functions/browser/cdp_wait_element.md +++ b/functions/browser/cdp_wait_element.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, time] +params: + - name: c + desc: "conexión CDP activa" + - name: selector + desc: "selector CSS del elemento a esperar" + - name: timeout + desc: "duración máxima de espera" +output: "error si el elemento no aparece antes del timeout" tested: false tests: [] test_file_path: "" diff --git a/functions/browser/cdp_wait_load.md b/functions/browser/cdp_wait_load.md index d7e96686..cbbaae96 100644 --- a/functions/browser/cdp_wait_load.md +++ b/functions/browser/cdp_wait_load.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, time] +params: + - name: c + desc: "conexión CDP activa" + - name: timeout + desc: "duración máxima de espera por carga completa" +output: "error si document.readyState no llega a complete" tested: false tests: [] test_file_path: "" diff --git a/functions/browser/chrome_launch.md b/functions/browser/chrome_launch.md index 9bfc40eb..693a9d36 100644 --- a/functions/browser/chrome_launch.md +++ b/functions/browser/chrome_launch.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, net, os, os/exec, time] +params: + - name: opts + desc: "opciones de lanzamiento: Port, UserDataDir, Headless" +output: "int: PID del proceso Chrome lanzado" tested: true tests: ["TestFindChrome", "TestChromeLaunchAndConnect"] test_file_path: "functions/browser/chrome_launch_test.go" diff --git a/functions/core/all_slice.md b/functions/core/all_slice.md index 90d9b3dc..a2398e59 100644 --- a/functions/core/all_slice.md +++ b/functions/core/all_slice.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice de elementos a validar" + - name: predicate + desc: "función que evalúa cada elemento; retorna true si cumple la condición" +output: "true si todos los elementos cumplen el predicado; false en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/core/any_slice.md b/functions/core/any_slice.md index 99edcf93..a98a0a8f 100644 --- a/functions/core/any_slice.md +++ b/functions/core/any_slice.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice de elementos a validar" + - name: predicate + desc: "función que evalúa cada elemento; retorna true si cumple la condición" +output: "true si al menos un elemento cumple el predicado; false en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/core/chunk.md b/functions/core/chunk.md index 37dc7796..de17b36e 100644 --- a/functions/core/chunk.md +++ b/functions/core/chunk.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "slice de elementos a dividir" + - name: size + desc: "tamaño de cada trozo; debe ser > 0 (entra en pánico si size <= 0)" +output: "slice de slices, donde cada sub-slice contiene hasta 'size' elementos; el último puede contener menos" tested: false tests: [] test_file_path: "" diff --git a/functions/core/compose2.md b/functions/core/compose2.md index 9fabdbd9..efdba5f2 100644 --- a/functions/core/compose2.md +++ b/functions/core/compose2.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f2 + desc: "segunda función a aplicar (derecha): B -> C" + - name: f1 + desc: "primera función a aplicar (izquierda): A -> B" +output: "función compuesta que aplica f1 después f2, equivalente a f2(f1(x))" tested: false tests: [] test_file_path: "" diff --git a/functions/core/const_func.md b/functions/core/const_func.md index 420fa9c6..3a42c8d1 100644 --- a/functions/core/const_func.md +++ b/functions/core/const_func.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: value + desc: "valor constante a retornar siempre" +output: "función que ignora su argumento y siempre retorna el valor constante" tested: false tests: [] test_file_path: "" diff --git a/functions/core/curry2.md b/functions/core/curry2.md index ce05416a..3d8d4f47 100644 --- a/functions/core/curry2.md +++ b/functions/core/curry2.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f + desc: "función de dos argumentos a currificar: (A, B) -> C" +output: "función currificada que retorna una función parcial: A -> (B -> C)" tested: false tests: [] test_file_path: "" diff --git a/functions/core/detect_cycle.md b/functions/core/detect_cycle.md index 318c2cc0..ef57ea05 100644 --- a/functions/core/detect_cycle.md +++ b/functions/core/detect_cycle.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql"] +params: + - name: conn + desc: "conexión abierta a base de datos SQLite" + - name: table + desc: "nombre de la tabla que almacena el grafo" + - name: fromCol + desc: "nombre de la columna que contiene el nodo origen de cada arista" + - name: toCol + desc: "nombre de la columna que contiene el nodo destino de cada arista" + - name: filterCol + desc: "nombre de columna opcional para filtrar aristas semánticas; si es vacío, se consideran todas las aristas" + - name: fromNode + desc: "nodo origen de la nueva arista a validar" + - name: toNode + desc: "nodo destino de la nueva arista a validar" +output: "error si agregaría un ciclo; nil si no hay ciclo" tested: false tests: [] test_file_path: "" diff --git a/functions/core/drop.md b/functions/core/drop.md index 63e80b79..d0715873 100644 --- a/functions/core/drop.md +++ b/functions/core/drop.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice del cual eliminar elementos del inicio" + - name: n + desc: "cantidad de elementos a eliminar desde el inicio" +output: "nuevo slice con los primeros n elementos eliminados; si n >= len(slice), retorna slice vacío" tested: false tests: [] test_file_path: "" diff --git a/functions/core/filter_slice.md b/functions/core/filter_slice.md index 448873b0..6fd875b3 100644 --- a/functions/core/filter_slice.md +++ b/functions/core/filter_slice.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "slice de elementos a filtrar" + - name: pred + desc: "función predicado que retorna true para elementos a incluir" +output: "nuevo slice con solo los elementos que cumplen el predicado" tested: true tests: ["filtra pares", "slice vacio retorna vacio", "ningun match retorna vacio"] test_file_path: "functions/core/filter_slice_test.go" diff --git a/functions/core/find.md b/functions/core/find.md index a6add199..81c409a8 100644 --- a/functions/core/find.md +++ b/functions/core/find.md @@ -14,6 +14,12 @@ returns: [option_go_core] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice donde buscar" + - name: predicate + desc: "función que evalúa cada elemento; retorna true para el buscado" +output: "Option[T] envolviendo el primer elemento que cumple, o None si ninguno cumple" tested: false tests: [] test_file_path: "" diff --git a/functions/core/find_index.md b/functions/core/find_index.md index c30b4156..7448f01a 100644 --- a/functions/core/find_index.md +++ b/functions/core/find_index.md @@ -14,6 +14,12 @@ returns: [option_go_core] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice donde buscar" + - name: predicate + desc: "función que evalúa cada elemento; retorna true para el buscado" +output: "Option[int] envolviendo el índice del primer elemento que cumple, o None si ninguno cumple" tested: false tests: [] test_file_path: "" diff --git a/functions/core/flat_map_slice.md b/functions/core/flat_map_slice.md index 1fb2a388..d321552e 100644 --- a/functions/core/flat_map_slice.md +++ b/functions/core/flat_map_slice.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice de elementos a transformar" + - name: f + desc: "función que transforma cada elemento en un slice de resultados" +output: "slice aplandado con todos los resultados concatenados" tested: false tests: [] test_file_path: "" diff --git a/functions/core/flatten.md b/functions/core/flatten.md index 56542cee..2ff9696f 100644 --- a/functions/core/flatten.md +++ b/functions/core/flatten.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slices + desc: "slice de slices a aplanar" +output: "slice único con todos los elementos concatenados preservando orden" tested: false tests: [] test_file_path: "" diff --git a/functions/core/flip.md b/functions/core/flip.md index e06f04d1..8c636247 100644 --- a/functions/core/flip.md +++ b/functions/core/flip.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f + desc: "función de dos argumentos a invertir: (A, B) -> C" +output: "función con argumentos intercambiados: (B, A) -> C" tested: false tests: [] test_file_path: "" diff --git a/functions/core/generate_id.md b/functions/core/generate_id.md index 5c37751d..87574ec2 100644 --- a/functions/core/generate_id.md +++ b/functions/core/generate_id.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: name + desc: "nombre de la entidad en snake_case" + - name: lang + desc: "lenguaje: 'go', 'py', 'bash', 'ts'" + - name: domain + desc: "dominio de la función: 'core', 'finance', etc." +output: "ID canonizado en formato 'name_lang_domain' convertido a minúsculas" tested: false tests: [] test_file_path: "" diff --git a/functions/core/group_by.md b/functions/core/group_by.md index dabf6a5a..329a1ab0 100644 --- a/functions/core/group_by.md +++ b/functions/core/group_by.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice de elementos a agrupar" + - name: keyFn + desc: "función que extrae la clave de agrupación para cada elemento" +output: "mapa donde cada clave única mapea a un slice de elementos con esa clave" tested: false tests: [] test_file_path: "" diff --git a/functions/core/identity.md b/functions/core/identity.md index fccbcae2..338e9a57 100644 --- a/functions/core/identity.md +++ b/functions/core/identity.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: x + desc: "valor a retornar sin modificación" +output: "el mismo valor recibido como entrada" tested: false tests: [] test_file_path: "" diff --git a/functions/core/join_by_key.md b/functions/core/join_by_key.md index 8458f8ba..6e4407de 100644 --- a/functions/core/join_by_key.md +++ b/functions/core/join_by_key.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: left + desc: "slice izquierdo de map[string]any a unir" + - name: right + desc: "slice derecho de map[string]any a unir" + - name: key + desc: "nombre del campo común a usar como clave de unión" + - name: how + desc: "tipo de unión: 'inner', 'left', 'right', 'outer'" +output: "slice de map[string]any con el resultado de la unión; campos duplicados del right se sufijan con '_right'" tested: true tests: - "Inner join solo matches" diff --git a/functions/core/map_concurrent.md b/functions/core/map_concurrent.md index a976eee8..edd9cd43 100644 --- a/functions/core/map_concurrent.md +++ b/functions/core/map_concurrent.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: xs + desc: "slice de elementos a procesar" + - name: fn + desc: "función a aplicar a cada elemento" + - name: workers + desc: "número de goroutines concurrentes; se ajusta a max(1, min(workers, len(xs)))" +output: "slice de resultados en el mismo orden original que la entrada" tested: false tests: [] test_file_path: "" diff --git a/functions/core/map_slice.md b/functions/core/map_slice.md index 61904bb8..a891878d 100644 --- a/functions/core/map_slice.md +++ b/functions/core/map_slice.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "slice de elementos a transformar" + - name: fn + desc: "función que transforma cada elemento de tipo T a tipo U" +output: "nuevo slice de resultados transformados, mismo tamaño que entrada" tested: true tests: ["transforma enteros a strings", "slice vacio retorna vacio", "preserva orden"] test_file_path: "functions/core/map_slice_test.go" diff --git a/functions/core/memoize.md b/functions/core/memoize.md index e6db007c..c48ef5ef 100644 --- a/functions/core/memoize.md +++ b/functions/core/memoize.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: fn + desc: "función pura a memorizar: K -> V; los resultados se cachean por clave" +output: "función memoizada que retorna resultados en caché para claves ya calculadas; no es thread-safe" tested: false tests: [] test_file_path: "" diff --git a/functions/core/next_cron_time.md b/functions/core/next_cron_time.md index a8d05bca..9508f8b1 100644 --- a/functions/core/next_cron_time.md +++ b/functions/core/next_cron_time.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [time] +params: + - name: schedule + desc: "CronSchedule con listas de minutos, horas, días, etc. válidos" + - name: after + desc: "tiempo a partir del cual buscar la próxima ejecución" +output: "time.Time con la próxima ejecución; zero time si no hay match dentro de 366 días" tested: true tests: - "0 * * * * desde :30 retorna la proxima hora en punto" diff --git a/functions/core/parse_cron_expr.md b/functions/core/parse_cron_expr.md index aa2059a9..f29878c2 100644 --- a/functions/core/parse_cron_expr.md +++ b/functions/core/parse_cron_expr.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [fmt, strconv, strings] +params: + - name: expr + desc: "expresión cron de 5 campos: minuto hora día_mes mes día_semana; soporta *, rangos, listas, pasos y aliases" +output: "CronSchedule con listas de valores válidos por campo; error si la expresión es inválida" tested: true tests: - "*/15 expande minutos a [0 15 30 45]" diff --git a/functions/core/partial2.md b/functions/core/partial2.md index 9028b891..c2ea7d31 100644 --- a/functions/core/partial2.md +++ b/functions/core/partial2.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f + desc: "función de dos argumentos a aplicar parcialmente: (A, B) -> C" + - name: a + desc: "valor para fijar el primer argumento" +output: "función parcial con primer argumento fijo: B -> C" tested: false tests: [] test_file_path: "" diff --git a/functions/core/partition.md b/functions/core/partition.md index e73442f9..99a485f6 100644 --- a/functions/core/partition.md +++ b/functions/core/partition.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "slice a particionar" + - name: pred + desc: "función predicado que retorna true para la primera partición" +output: "par de slices: (que cumplen predicado, que no cumplen); ambos preservan orden original" tested: false tests: [] test_file_path: "" diff --git a/functions/core/pipe2.md b/functions/core/pipe2.md index a693ae0b..ebe15e76 100644 --- a/functions/core/pipe2.md +++ b/functions/core/pipe2.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f1 + desc: "primera función a aplicar (izquierda): A -> B" + - name: f2 + desc: "segunda función a aplicar (derecha): B -> C" +output: "función compuesta que aplica f1 después f2, equivalente a f2(f1(x))" tested: false tests: [] test_file_path: "" diff --git a/functions/core/pipe3.md b/functions/core/pipe3.md index 957b62d2..0d426fc6 100644 --- a/functions/core/pipe3.md +++ b/functions/core/pipe3.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f1 + desc: "primera función: A -> B" + - name: f2 + desc: "segunda función: B -> C" + - name: f3 + desc: "tercera función: C -> D" +output: "función compuesta que aplica f1, luego f2, luego f3, equivalente a f3(f2(f1(x)))" tested: false tests: [] test_file_path: "" diff --git a/functions/core/pipeline.md b/functions/core/pipeline.md index 6b1856be..33f72561 100644 --- a/functions/core/pipeline.md +++ b/functions/core/pipeline.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: fns + desc: "funciones variádicas de tipo T -> T a componer en secuencia" +output: "función que aplica todas las funciones de izquierda a derecha; si no hay funciones, retorna la identidad" tested: false tests: [] test_file_path: "" diff --git a/functions/core/reduce.md b/functions/core/reduce.md index ec70f7b1..8e65e0c2 100644 --- a/functions/core/reduce.md +++ b/functions/core/reduce.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice de elementos a reducir" + - name: initial + desc: "valor inicial del acumulador" + - name: f + desc: "función acumuladora que toma (acumulador, elemento) y retorna nuevo acumulador" +output: "valor final del acumulador después de procesar todos los elementos" tested: false tests: [] test_file_path: "" diff --git a/functions/core/retry_with_backoff.md b/functions/core/retry_with_backoff.md index 05b59f17..476aa5e1 100644 --- a/functions/core/retry_with_backoff.md +++ b/functions/core/retry_with_backoff.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: fn + desc: "función impura a reintentar; retorna (resultado, error)" + - name: maxRetries + desc: "número máximo de reintentos después del intento inicial" + - name: baseDelay + desc: "delay base en time.Duration; cada reintento usa baseDelay * 2^i" +output: "primer (resultado, nil) exitoso, o último error si se agotan los reintentos" tested: false tests: [] test_file_path: "" diff --git a/functions/core/rewrite_rule.md b/functions/core/rewrite_rule.md index c3eb739b..fc597fc0 100644 --- a/functions/core/rewrite_rule.md +++ b/functions/core/rewrite_rule.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: ["regexp"] +params: + - name: rule + desc: "expresión SQL con campos bare (sin prefijo) a reescribir como json_extract" + - name: jsonColumn + desc: "nombre de la columna JSON donde extraer los valores" +output: "expresión SQL reescrita con json_extract para cada campo bare" tested: false tests: [] test_file_path: "" diff --git a/functions/core/take.md b/functions/core/take.md index d69c101e..a50998c0 100644 --- a/functions/core/take.md +++ b/functions/core/take.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice del cual tomar elementos del inicio" + - name: n + desc: "cantidad de elementos a tomar desde el inicio" +output: "nuevo slice con los primeros n elementos; si n > len(slice), retorna el slice completo" tested: false tests: [] test_file_path: "" diff --git a/functions/core/uncurry2.md b/functions/core/uncurry2.md index bc0e04ad..68dc9f69 100644 --- a/functions/core/uncurry2.md +++ b/functions/core/uncurry2.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: f + desc: "función currificada a descurrificar: A -> (B -> C)" +output: "función normal de dos argumentos: (A, B) -> C" tested: false tests: [] test_file_path: "" diff --git a/functions/core/unique.md b/functions/core/unique.md index a16d0e74..914bf01e 100644 --- a/functions/core/unique.md +++ b/functions/core/unique.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: slice + desc: "slice del cual eliminar duplicados" +output: "nuevo slice con elementos únicos preservando orden de primera aparición" tested: false tests: [] test_file_path: "" diff --git a/functions/core/validate_struct_fields.md b/functions/core/validate_struct_fields.md index 5482b308..766f5aae 100644 --- a/functions/core/validate_struct_fields.md +++ b/functions/core/validate_struct_fields.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [fmt, regexp, strconv, strings] +params: + - name: data + desc: "map[string]any con los campos a validar" + - name: rules + desc: "map[string]string donde cada clave es un campo y el valor es una lista de reglas (required, type, min/max, minlen/maxlen, oneof, pattern)" +output: "tupla (válido: bool, errores: []string); si válido es true, errores está vacío" tested: true tests: - "campo required presente y ausente" diff --git a/functions/core/zip.md b/functions/core/zip.md index 3c0a3fa0..432d5c61 100644 --- a/functions/core/zip.md +++ b/functions/core/zip.md @@ -14,6 +14,12 @@ returns: [pair_go_core] returns_optional: false error_type: "" imports: [] +params: + - name: a + desc: "primer slice" + - name: b + desc: "segundo slice" +output: "slice de pares (Pair[T, U]) emparejando elementos por índice; la longitud es min(len(a), len(b))" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/detect_sql_injection.md b/functions/cybersecurity/detect_sql_injection.md index 76a751da..5ffc2a6a 100644 --- a/functions/cybersecurity/detect_sql_injection.md +++ b/functions/cybersecurity/detect_sql_injection.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [regexp, strings] +params: + - name: input + desc: "string a analizar en busca de patrones de SQL injection" +output: "tupla (isThreat, pattern): booleano indicando si se detectó amenaza, y nombre del patron encontrado" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/entropy_shannon.md b/functions/cybersecurity/entropy_shannon.md index 45824b93..cf263e23 100644 --- a/functions/cybersecurity/entropy_shannon.md +++ b/functions/cybersecurity/entropy_shannon.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: data + desc: "slice de bytes cuya entropia se desea calcular" +output: "valor de entropia Shannon entre 0 y 8 bits por byte" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/extract_urls.md b/functions/cybersecurity/extract_urls.md index 02a1b72a..11f548ed 100644 --- a/functions/cybersecurity/extract_urls.md +++ b/functions/cybersecurity/extract_urls.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [regexp] +params: + - name: text + desc: "string de texto del cual extraer URLs HTTP/HTTPS" +output: "slice de strings con todas las URLs encontradas" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/fetch_http_headers.md b/functions/cybersecurity/fetch_http_headers.md index b7422e70..d4f0029b 100644 --- a/functions/cybersecurity/fetch_http_headers.md +++ b/functions/cybersecurity/fetch_http_headers.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, net/http, time] +params: + - name: url + desc: "URL destino para realizar la solicitud HTTP HEAD" +output: "mapa de headers de la respuesta (map[string][]string) o error si la solicitud falla" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/hash_md5.md b/functions/cybersecurity/hash_md5.md index 6bdaf9de..c332e46f 100644 --- a/functions/cybersecurity/hash_md5.md +++ b/functions/cybersecurity/hash_md5.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [crypto/md5, encoding/hex] +params: + - name: data + desc: "slice de bytes a ser hasheado" +output: "string hexadecimal del hash MD5 (32 caracteres)" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/hash_sha256.md b/functions/cybersecurity/hash_sha256.md index 65bd2ca6..b7dde729 100644 --- a/functions/cybersecurity/hash_sha256.md +++ b/functions/cybersecurity/hash_sha256.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [crypto/sha256, encoding/hex] +params: + - name: data + desc: "slice de bytes a ser hasheado" +output: "string hexadecimal del hash SHA-256 (64 caracteres)" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/ip_in_range.md b/functions/cybersecurity/ip_in_range.md index 1fb32230..8f831a5b 100644 --- a/functions/cybersecurity/ip_in_range.md +++ b/functions/cybersecurity/ip_in_range.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [net] +params: + - name: ip + desc: "direccion IP en formato string (ej: 192.168.1.1)" + - name: cidr + desc: "rango CIDR en formato string (ej: 192.168.0.0/24)" +output: "booleano indicando si la IP se encuentra dentro del rango CIDR" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/is_base64.md b/functions/cybersecurity/is_base64.md index 3f7be675..dd82cf93 100644 --- a/functions/cybersecurity/is_base64.md +++ b/functions/cybersecurity/is_base64.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [encoding/base64] +params: + - name: s + desc: "string a validar como base64" +output: "booleano indicando si el string es base64 valido segun el encoding estandar" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/is_hex.md b/functions/cybersecurity/is_hex.md index 73a049e9..494ecb19 100644 --- a/functions/cybersecurity/is_hex.md +++ b/functions/cybersecurity/is_hex.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: s + desc: "string a validar como hexadecimal" +output: "booleano indicando si el string es hexadecimal valido (caracteres 0-9 a-f A-F con longitud par)" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/jaccard_similarity.md b/functions/cybersecurity/jaccard_similarity.md index f82f1b8d..9963f83b 100644 --- a/functions/cybersecurity/jaccard_similarity.md +++ b/functions/cybersecurity/jaccard_similarity.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: a + desc: "primer slice de strings para comparacion" + - name: b + desc: "segundo slice de strings para comparacion" +output: "coeficiente de similitud de Jaccard entre 0.0 y 1.0" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/levenshtein_distance.md b/functions/cybersecurity/levenshtein_distance.md index 1eb6bee6..5da47c4a 100644 --- a/functions/cybersecurity/levenshtein_distance.md +++ b/functions/cybersecurity/levenshtein_distance.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: a + desc: "primer string para comparacion de distancia de edicion" + - name: b + desc: "segundo string para comparacion de distancia de edicion" +output: "entero con la distancia de Levenshtein (minimo numero de ediciones necesarias)" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/lookup_whois.md b/functions/cybersecurity/lookup_whois.md index d216d27e..0a3cf65f 100644 --- a/functions/cybersecurity/lookup_whois.md +++ b/functions/cybersecurity/lookup_whois.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, io, net, strings, time] +params: + - name: domain + desc: "nombre de dominio para el cual realizar la consulta WHOIS" +output: "string con la respuesta WHOIS del servidor, o error si la consulta falla" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/normalize_url.md b/functions/cybersecurity/normalize_url.md index 4b33429c..9ab72e74 100644 --- a/functions/cybersecurity/normalize_url.md +++ b/functions/cybersecurity/normalize_url.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [net/url, strings] +params: + - name: rawURL + desc: "URL en formato string a normalizar" +output: "URL normalizada con host en minusculas, sin fragmentos ni parametros de tracking" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/parse_ip_cidr.md b/functions/cybersecurity/parse_ip_cidr.md index 23938903..40b7268f 100644 --- a/functions/cybersecurity/parse_ip_cidr.md +++ b/functions/cybersecurity/parse_ip_cidr.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [encoding/binary, fmt, net] +params: + - name: cidr + desc: "notacion CIDR IPv4 a parsear (ej: 192.168.0.0/24)" +output: "tupla (network, broadcast, hosts, err) con direccion de red, broadcast, cantidad de hosts usables, y error si aplica" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/resolve_dns.md b/functions/cybersecurity/resolve_dns.md index 5c0b5a76..597809e9 100644 --- a/functions/cybersecurity/resolve_dns.md +++ b/functions/cybersecurity/resolve_dns.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, net] +params: + - name: host + desc: "hostname a resolver" +output: "slice de strings con direcciones IP resueltas, o error si la resolucion falla" tested: false tests: [] test_file_path: "" diff --git a/functions/cybersecurity/scan_port_tcp.md b/functions/cybersecurity/scan_port_tcp.md index be961707..43cf5450 100644 --- a/functions/cybersecurity/scan_port_tcp.md +++ b/functions/cybersecurity/scan_port_tcp.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, net, time] +params: + - name: host + desc: "hostname o direccion IP del host a escanear" + - name: port + desc: "numero de puerto TCP a escanear" + - name: timeoutMs + desc: "timeout en milisegundos para la conexion" +output: "tupla (status, banner, err) con estado del puerto (open/closed/filtered), banner si esta abierto, y error si aplica" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/autocorrelation.md b/functions/datascience/autocorrelation.md index 20020767..6ea0bfd9 100644 --- a/functions/datascience/autocorrelation.md +++ b/functions/datascience/autocorrelation.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "slice de valores de serie temporal (ej: [100, 102, 101, 103, ...])" + - name: lag + desc: "desfase en períodos (ej: 1 para correlación con el período anterior, 12 para correlación anual en datos mensuales)" +output: "coeficiente de correlación de Pearson entre data y su versión desfasada, rango [-1, 1]" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/clip.md b/functions/datascience/clip.md index 73931624..670003ce 100644 --- a/functions/datascience/clip.md +++ b/functions/datascience/clip.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "slice de valores reales a recortar" + - name: min + desc: "límite inferior del rango permitido" + - name: max + desc: "límite superior del rango permitido" +output: "slice con cada valor limitado al rango [min, max]" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/detect_outliers.md b/functions/datascience/detect_outliers.md index 617132ac..ddca4047 100644 --- a/functions/datascience/detect_outliers.md +++ b/functions/datascience/detect_outliers.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: ["math"] +params: + - name: data + desc: "slice de valores numéricos a analizar" + - name: threshold + desc: "umbral de z-score para considerar un valor outlier (ej: 2.0 para 2 desviaciones estándar)" +output: "slice de booleanos del mismo tamaño que data, true si el elemento es outlier" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/diff_entities.md b/functions/datascience/diff_entities.md index 1a64e3d2..72b3fc7d 100644 --- a/functions/datascience/diff_entities.md +++ b/functions/datascience/diff_entities.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: ["fmt"] +params: + - name: before + desc: "slice de snapshots de entities antes (ej: resultado de query anterior)" + - name: after + desc: "slice de snapshots de entities después (ej: resultado de query actual)" + - name: key + desc: "nombre del campo clave para emparejar entities (ej: 'id', 'uuid')" + - name: ignoreFields + desc: "slice de nombres de campos a ignorar en comparación (nil usa defaults ['created_at', 'updated_at'])" +output: "mapa con 'summary', 'added', 'removed', 'modified', 'unchanged' - análisis completo de diferencias" tested: true tests: - "entity añadida" diff --git a/functions/datascience/fetch_data_frame.md b/functions/datascience/fetch_data_frame.md index 874455c8..0bb03a27 100644 --- a/functions/datascience/fetch_data_frame.md +++ b/functions/datascience/fetch_data_frame.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["fmt"] +params: + - name: dsn + desc: "connection string para la BD (ej: 'user:pass@tcp(host:3306)/dbname', 'bigquery://project-id')" + - name: query + desc: "consulta SQL a ejecutar (ej: 'SELECT * FROM users WHERE status = \"active\"')" +output: "slice de mapas columna-valor (ej: [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}])" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/fft.md b/functions/datascience/fft.md index 4fbebad7..8cc3d754 100644 --- a/functions/datascience/fft.md +++ b/functions/datascience/fft.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["math", "math/cmplx"] +params: + - name: data + desc: "slice de valores de serie temporal o señal (ej: [1.0, 2.0, 3.0, ...], se aplica zero-padding si no es potencia de 2)" +output: "slice de números complejos representando amplitud y fase en dominio de frecuencia, tamaño potencia de 2" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/group_by.md b/functions/datascience/group_by.md index b0e1750e..479408c3 100644 --- a/functions/datascience/group_by.md +++ b/functions/datascience/group_by.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "slice de elementos a agrupar (tipo genérico T)" + - name: keyFn + desc: "función que extrae la clave de agrupación de cada elemento (ej: func(u User) string { return u.Department })" +output: "mapa de clave a slice de elementos agrupados (ej: {'Sales': [user1, user2], 'Engineering': [user3]})" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/histogram.md b/functions/datascience/histogram.md index 3ab07638..e7a936a8 100644 --- a/functions/datascience/histogram.md +++ b/functions/datascience/histogram.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: ["math"] +params: + - name: data + desc: "slice de valores numéricos a distribuir en el histograma" + - name: buckets + desc: "número de buckets equiespaciados (ej: 10, 50, 100)" +output: "slice de enteros con frecuencias en cada bucket, tamaño igual a buckets" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/impute.md b/functions/datascience/impute.md index 10daffe8..9c4929a0 100644 --- a/functions/datascience/impute.md +++ b/functions/datascience/impute.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["math"] +params: + - name: data + desc: "slice de valores que pueden contener NaN (valores faltantes)" +output: "slice sin NaN, cada valor NaN reemplazado por el último valor válido anterior (forward-fill)" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/load_csv.md b/functions/datascience/load_csv.md index df198579..794dc5ac 100644 --- a/functions/datascience/load_csv.md +++ b/functions/datascience/load_csv.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["fmt"] +params: + - name: path + desc: "ruta al archivo CSV (ej: '/data/sales.csv')" +output: "slice de mapas donde cada mapa es una fila (columna -> valor), ej: [{'id': '1', 'name': 'Alice', 'sales': '100'}]" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/load_parquet.md b/functions/datascience/load_parquet.md index 79914bc3..28fcd9b1 100644 --- a/functions/datascience/load_parquet.md +++ b/functions/datascience/load_parquet.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["fmt"] +params: + - name: path + desc: "ruta al archivo Parquet (ej: '/data/events.parquet')" +output: "slice de mapas donde cada mapa es una fila (columna -> valor), ej: [{'user_id': 123, 'timestamp': '2026-01-01T10:00:00'}]" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/lorenz_step.md b/functions/datascience/lorenz_step.md index 49364e58..5526a4bf 100644 --- a/functions/datascience/lorenz_step.md +++ b/functions/datascience/lorenz_step.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: s + desc: "estado actual del atractor como {X, Y, Z} (coordenadas 3D del sistema)" + - name: dt + desc: "paso temporal de integración (ej: 0.005 segundos, valores menores = más preciso)" + - name: p + desc: "parámetros del sistema Lorenz (sigma≈10, rho≈28, beta≈8/3 para el butterfly clásico)" +output: "nuevo estado después de un paso de integración Euler, coordenadas típicamente en rango [-20, 20]" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/min_max_scale.md b/functions/datascience/min_max_scale.md index d3ccf08d..49939873 100644 --- a/functions/datascience/min_max_scale.md +++ b/functions/datascience/min_max_scale.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["math"] +params: + - name: data + desc: "slice de valores numéricos a normalizar" +output: "slice escalado al rango [0, 1] donde min(data)→0 y max(data)→1" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/pearson.md b/functions/datascience/pearson.md index df7d48e1..9f381a87 100644 --- a/functions/datascience/pearson.md +++ b/functions/datascience/pearson.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: ["math"] +params: + - name: xs + desc: "primer slice de valores (ej: precios del activo X, o variable independiente)" + - name: ys + desc: "segundo slice de valores (ej: precios del activo Y, o variable dependiente, mismo tamaño que xs)" +output: "coeficiente de correlación de Pearson en rango [-1, 1], donde 1=correlación perfecta, -1=anticorrelación, 0=sin correlación" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/pivot.md b/functions/datascience/pivot.md index 009df8af..47c881f7 100644 --- a/functions/datascience/pivot.md +++ b/functions/datascience/pivot.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: rows + desc: "slice de mapas columna-valor (ej: resultado de load_csv o fetch_data_frame)" + - name: index + desc: "nombre de columna que se convierte en fila (ej: 'region')" + - name: columns + desc: "nombre de columna cuyos valores únicos se convierten en nuevas columnas (ej: 'product')" + - name: values + desc: "nombre de columna con valores a agregar (ej: 'sales')" + - name: agg + desc: "función de agregación: 'sum', 'count', 'mean', 'min', 'max', 'first', 'last'" +output: "slice de mapas pivotados donde cada fila agrupa por index, con nuevas columnas por cada valor unique de columns" tested: true tests: - "Pivot basico con sum" diff --git a/functions/datascience/rolling_window.md b/functions/datascience/rolling_window.md index 29af39f9..44eaa2d7 100644 --- a/functions/datascience/rolling_window.md +++ b/functions/datascience/rolling_window.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "slice de elementos a ventanar (tipo genérico T)" + - name: size + desc: "tamaño de cada ventana deslizante (ej: 10 para ventanas de 10 elementos)" +output: "slice de slices donde cada inner slice es una ventana de tamaño size, total ventanas = len(xs) - size + 1" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/standardize.md b/functions/datascience/standardize.md index 339b518a..8dc3f8dc 100644 --- a/functions/datascience/standardize.md +++ b/functions/datascience/standardize.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["math"] +params: + - name: data + desc: "slice de valores numéricos a normalizar" +output: "slice estandarizado donde cada valor x → (x - media) / desviación_estándar, media=0 y desviación_estándar=1" tested: false tests: [] test_file_path: "" diff --git a/functions/datascience/zip_slices.md b/functions/datascience/zip_slices.md index 69eed967..3fc2dedf 100644 --- a/functions/datascience/zip_slices.md +++ b/functions/datascience/zip_slices.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: as + desc: "primer slice de valores (ej: precios)" + - name: bs + desc: "segundo slice de valores (ej: volúmenes)" +output: "slice de pares [2]float64 donde cada par es [as[i], bs[i]], longitud = min(len(as), len(bs))" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/annualized_volatility.md b/functions/finance/annualized_volatility.md index bc61864d..edc8548e 100644 --- a/functions/finance/annualized_volatility.md +++ b/functions/finance/annualized_volatility.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: returns + desc: "slice de retornos diarios/periódicos, valores típicamente entre -0.1 y 0.1 (ej: -2% = -0.02)" + - name: periodsPerYear + desc: "número de períodos por año (252 para diarios, 12 para mensuales, 52 para semanales)" +output: "volatilidad anualizada como ratio (ej: 0.25 = 25% volatilidad anual)" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/bollinger_bands.md b/functions/finance/bollinger_bands.md index 4e9fcb3c..f5683594 100644 --- a/functions/finance/bollinger_bands.md +++ b/functions/finance/bollinger_bands.md @@ -14,6 +14,14 @@ returns: [bollinger_result_go_finance] returns_optional: false error_type: "" imports: [math] +params: + - name: data + desc: "slice de precios de cierre (ej: [22.5, 23.1, 22.8, ...])" + - name: period + desc: "período de la media móvil simple (ej: 5, 20, 50 días)" + - name: numStdDev + desc: "número de desviaciones estándar para las bandas (típicamente 2.0)" +output: "tupla (upper, middle, lower) - tres slices de precios banda superior, media (SMA) e inferior" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/ema.md b/functions/finance/ema.md index 1a2acff5..ec76794a 100644 --- a/functions/finance/ema.md +++ b/functions/finance/ema.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "slice de precios de cierre o valores de serie temporal (ej: [10.0, 11.0, 12.0, ...])" + - name: period + desc: "período de suavizado (ej: 5, 12, 26 días), determina multiplicador 2/(period+1)" +output: "slice de valores EMA del mismo tamaño que data, primeros period-1 elementos son 0" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/fetch_ohlcv.md b/functions/finance/fetch_ohlcv.md index 30906363..a81b4fc7 100644 --- a/functions/finance/fetch_ohlcv.md +++ b/functions/finance/fetch_ohlcv.md @@ -14,6 +14,12 @@ returns: [ohlcv_go_finance] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: symbol + desc: "símbolo del instrumento (ej: 'BTC/USDT', 'EUR/USD', 'AAPL')" + - name: interval + desc: "intervalo temporal (ej: '1m', '5m', '1h', '1d')" +output: "slice de slices de 5 floats en orden [open, high, low, close, volume] por cada vela" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/load_ohlcv_from_duckdb.md b/functions/finance/load_ohlcv_from_duckdb.md index 55c5f496..ca0b029f 100644 --- a/functions/finance/load_ohlcv_from_duckdb.md +++ b/functions/finance/load_ohlcv_from_duckdb.md @@ -14,6 +14,12 @@ returns: [ohlcv_go_finance] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: dbPath + desc: "ruta al archivo DuckDB (ej: '/data/market.duckdb')" + - name: query + desc: "consulta SQL para extraer filas (ej: 'SELECT open, high, low, close, volume FROM ohlcv WHERE symbol=\"BTC\"')" +output: "slice de slices de 5 floats en orden [open, high, low, close, volume] por cada fila de resultado" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/log_return.md b/functions/finance/log_return.md index d05ec662..a2f88ac0 100644 --- a/functions/finance/log_return.md +++ b/functions/finance/log_return.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: priceStart + desc: "precio inicial en unidad de moneda (ej: 100.0 USD)" + - name: priceEnd + desc: "precio final en unidad de moneda (ej: 110.0 USD)" +output: "retorno logarítmico sin dimensión (ej: 0.09531 ≈ 9.53%), devuelve 0 si precios <= 0" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/max_drawdown.md b/functions/finance/max_drawdown.md index d7874086..a9a4bb8f 100644 --- a/functions/finance/max_drawdown.md +++ b/functions/finance/max_drawdown.md @@ -14,6 +14,10 @@ returns: [drawdown_result_go_finance] returns_optional: false error_type: "" imports: [] +params: + - name: values + desc: "slice de valores de equity curve o net worth (ej: [1000, 1200, 900, 1100, 800])" +output: "tupla (maxDD, start, end) - drawdown como ratio [0,1] (ej: 0.333 = 33.3%), índice de pico, índice de valle" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/normalize_ohlcv.md b/functions/finance/normalize_ohlcv.md index 95574180..f085f069 100644 --- a/functions/finance/normalize_ohlcv.md +++ b/functions/finance/normalize_ohlcv.md @@ -14,6 +14,18 @@ returns: [ohlcv_go_finance] returns_optional: false error_type: "" imports: [] +params: + - name: open + desc: "slice de precios de apertura" + - name: high + desc: "slice de precios máximos" + - name: low + desc: "slice de precios mínimos" + - name: close + desc: "slice de precios de cierre" + - name: factor + desc: "multiplicador escalar (ej: 2.0 para duplicar precios, 1/100 para convertir centavos a dólares)" +output: "tupla (open_adj, high_adj, low_adj, close_adj) - cuatro slices de precios ajustados" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/rsi.md b/functions/finance/rsi.md index 21ee69ca..fffdae87 100644 --- a/functions/finance/rsi.md +++ b/functions/finance/rsi.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "slice de precios de cierre o valores de serie temporal" + - name: period + desc: "período de cálculo (ej: 5, 14, 21 días)" +output: "slice de valores RSI del mismo tamaño que data, rango [0, 100], primeros period elementos son 0" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/sharpe_ratio.md b/functions/finance/sharpe_ratio.md index c7e33e54..5431ac88 100644 --- a/functions/finance/sharpe_ratio.md +++ b/functions/finance/sharpe_ratio.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: returns + desc: "slice de retornos periódicos (ej: [0.01, -0.02, 0.015, 0.008])" + - name: riskFreeRate + desc: "tasa libre de riesgo por período (ej: 0.0001 para 0.01% diario)" + - name: periodsPerYear + desc: "número de períodos por año (252 para diarios, 12 para mensuales)" +output: "ratio de Sharpe anualizado sin dimensión (ej: 1.5 = 1.5 unidades de retorno por unidad de riesgo)" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/sma.md b/functions/finance/sma.md index 388f20e4..7ab13d96 100644 --- a/functions/finance/sma.md +++ b/functions/finance/sma.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "slice de precios de cierre o valores de serie temporal (ej: [1.0, 2.0, 3.0, ...])" + - name: period + desc: "período de media móvil (ej: 5, 20, 50, 200 días)" +output: "slice de valores SMA del mismo tamaño que data, primeros period-1 elementos son 0 (sin datos suficientes)" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/stream_ticks.md b/functions/finance/stream_ticks.md index fd30249f..040f3e21 100644 --- a/functions/finance/stream_ticks.md +++ b/functions/finance/stream_ticks.md @@ -14,6 +14,10 @@ returns: [tick_go_finance] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: symbol + desc: "símbolo del instrumento (ej: 'BTC/USDT', 'EUR/USD')" +output: "canal que emite pares [2]float64 de [precio, volumen] en cada tick en tiempo real" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/tick_to_ohlcv.md b/functions/finance/tick_to_ohlcv.md index 849eacde..a50329e1 100644 --- a/functions/finance/tick_to_ohlcv.md +++ b/functions/finance/tick_to_ohlcv.md @@ -14,6 +14,16 @@ returns: [ohlcv_go_finance] returns_optional: false error_type: "" imports: [] +params: + - name: prices + desc: "slice de precios de ticks en orden cronológico" + - name: volumes + desc: "slice de volúmenes de ticks (mismo tamaño que prices)" + - name: timestamps + desc: "slice de timestamps en unix seconds (mismo tamaño que prices, debe estar ordenado)" + - name: intervalSecs + desc: "intervalo de agregación en segundos (ej: 60 para 1 minuto, 3600 para 1 hora)" +output: "tupla (open, high, low, close, volume) - cinco slices de datos OHLCV agregados por intervalo" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/vwap.md b/functions/finance/vwap.md index 66195a9d..1dca7e65 100644 --- a/functions/finance/vwap.md +++ b/functions/finance/vwap.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: prices + desc: "slice de precios de ticks o velas (ej: [100.0, 102.0, 101.0])" + - name: volumes + desc: "slice de volúmenes correspondientes (mismo tamaño que prices)" +output: "precio promedio ponderado por volumen en unidad de moneda (ej: 100.95)" tested: false tests: [] test_file_path: "" diff --git a/functions/finance/write_ohlcv_to_parquet.md b/functions/finance/write_ohlcv_to_parquet.md index 77c0da76..5af170ba 100644 --- a/functions/finance/write_ohlcv_to_parquet.md +++ b/functions/finance/write_ohlcv_to_parquet.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: path + desc: "ruta destino del archivo Parquet (ej: '/data/btc_1h.parquet')" + - name: data + desc: "slice de slices de 5 floats en orden [open, high, low, close, volume] por cada vela" +output: "error si la escritura falla, nil si éxito" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/cache_to_sqlite.md b/functions/infra/cache_to_sqlite.md index 982c6770..3db933e5 100644 --- a/functions/infra/cache_to_sqlite.md +++ b/functions/infra/cache_to_sqlite.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "encoding/json", "sync", "time", "fmt"] +params: + - name: dbPath + desc: "ruta del archivo SQLite donde persiste el cache" + - name: namespace + desc: "prefijo de tabla para aislar caches en el mismo archivo" +output: "instancia thread-safe de SQLiteCache con metodos Get, Set, Delete, Clear, GetOrSet" tested: true tests: - "Set/Get basico" diff --git a/functions/infra/clickhouse_open.md b/functions/infra/clickhouse_open.md index 380968a8..a312bb87 100644 --- a/functions/infra/clickhouse_open.md +++ b/functions/infra/clickhouse_open.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "github.com/ClickHouse/clickhouse-go/v2"] +params: + - name: host + desc: "hostname del servidor ClickHouse" + - name: port + desc: "puerto de ClickHouse (9000 para protocolo nativo, 8123 para HTTP)" + - name: user + desc: "nombre de usuario para autenticacion" + - name: password + desc: "contraseña para autenticacion" + - name: database + desc: "nombre de la base de datos a conectar" +output: "conexion sql.DB abierta a ClickHouse con ping verificado" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/cron_ticker.md b/functions/infra/cron_ticker.md index 6bf92a3b..cc4a944b 100644 --- a/functions/infra/cron_ticker.md +++ b/functions/infra/cron_ticker.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [context, time] +params: + - name: schedule + desc: "estructura CronTickerSchedule con campos Minute, Hour, DayOfMonth, Month, DayOfWeek" + - name: ctx + desc: "context que al cancelarse cierra el channel de ticks" +output: "channel que emite time.Time en cada tick del schedule cron" tested: true tests: - "context cancel cierra el channel" diff --git a/functions/infra/db_close.md b/functions/infra/db_close.md index 8ce8c5d7..f4ead4c0 100644 --- a/functions/infra/db_close.md +++ b/functions/infra/db_close.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql"] +params: + - name: db + desc: "conexion sql.DB a cerrar" +output: "nil si el cierre fue exitoso, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/db_create_table.md b/functions/infra/db_create_table.md index b4430439..6bc3ca5c 100644 --- a/functions/infra/db_create_table.md +++ b/functions/infra/db_create_table.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "regexp", "strings"] +params: + - name: db + desc: "conexion sql.DB abierta" + - name: table + desc: "nombre de la tabla a crear" + - name: columns + desc: "slice de definiciones SQL completas de columnas (incluyen nombre, tipo, constraints)" +output: "nil si la tabla se creo exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/db_exec.md b/functions/infra/db_exec.md index 19288698..dcf31d36 100644 --- a/functions/infra/db_exec.md +++ b/functions/infra/db_exec.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql"] +params: + - name: db + desc: "conexion sql.DB abierta" + - name: query + desc: "statement SQL no-SELECT (INSERT, UPDATE, DELETE, DDL) con placeholders ?" + - name: args + desc: "argumentos para los placeholders en la query" +output: "numero de filas afectadas por la ejecucion" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/db_insert_batch.md b/functions/infra/db_insert_batch.md index 4b91159a..6a740fd1 100644 --- a/functions/infra/db_insert_batch.md +++ b/functions/infra/db_insert_batch.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "strings"] +params: + - name: db + desc: "conexion sql.DB abierta" + - name: table + desc: "nombre de la tabla donde insertar" + - name: columns + desc: "slice de nombres de columnas en el orden de las rows" + - name: rows + desc: "slice de rows, donde cada row es []any con valores en orden de columns" +output: "numero total de filas insertadas exitosamente" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/db_insert_row.md b/functions/infra/db_insert_row.md index 181c0c16..964798b1 100644 --- a/functions/infra/db_insert_row.md +++ b/functions/infra/db_insert_row.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "sort", "strings"] +params: + - name: db + desc: "conexion sql.DB abierta" + - name: table + desc: "nombre de la tabla donde insertar" + - name: row + desc: "mapa de columna → valor con los datos a insertar" +output: "ID autoincrementado de la fila insertada" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/db_query.md b/functions/infra/db_query.md index 582ad209..5f1559f4 100644 --- a/functions/infra/db_query.md +++ b/functions/infra/db_query.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql"] +params: + - name: db + desc: "conexion sql.DB abierta" + - name: query + desc: "statement SELECT con placeholders ?" + - name: args + desc: "argumentos para los placeholders en la query" +output: "slice de maps donde cada map es una fila con columna → valor" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/deploy_app.md b/functions/infra/deploy_app.md index 055cbbe1..c68ce1d2 100644 --- a/functions/infra/deploy_app.md +++ b/functions/infra/deploy_app.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: appDir + desc: "ruta del directorio de la app Go (contiene main.go)" + - name: imageName + desc: "nombre de la imagen Docker a construir y contenedor a lanzar" + - name: port + desc: "puerto a mapear (hostPort == containerPort)" + - name: envVars + desc: "mapa de variables de entorno a pasar al contenedor" +output: "ID del contenedor Docker lanzado exitosamente" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_build_image.md b/functions/infra/docker_build_image.md index 3df92db9..cd4b42c9 100644 --- a/functions/infra/docker_build_image.md +++ b/functions/infra/docker_build_image.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: contextDir + desc: "ruta del directorio que contiene el Dockerfile" + - name: tag + desc: "nombre y tag de la imagen a construir (ej: myapp:latest)" + - name: buildArgs + desc: "mapa de argumentos de construccion (--build-arg key=val)" +output: "ID de la imagen Docker construida" tested: true tests: ["build sin build args retorna image ID", "build con build args incluye --build-arg", "error si contextDir no existe"] test_file_path: "functions/infra/docker_build_image_test.go" diff --git a/functions/infra/docker_compose_down.md b/functions/infra/docker_compose_down.md index 19c595f2..cc342a6d 100644 --- a/functions/infra/docker_compose_down.md +++ b/functions/infra/docker_compose_down.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: composeFile + desc: "ruta del archivo docker-compose.yml" + - name: removeVolumes + desc: "si true elimina tambien los volumes declarados" +output: "stdout combinado con stderr de la ejecucion de docker compose down" tested: true tests: ["removeVolumes true agrega flag -v al comando", "error si composeFile no existe"] test_file_path: "functions/infra/docker_compose_down_test.go" diff --git a/functions/infra/docker_compose_up.md b/functions/infra/docker_compose_up.md index 74642e15..7f1b8c98 100644 --- a/functions/infra/docker_compose_up.md +++ b/functions/infra/docker_compose_up.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: composeFile + desc: "ruta del archivo docker-compose.yml" + - name: detach + desc: "si true ejecuta en background sin bloquear" +output: "stdout combinado con stderr de la ejecucion de docker compose up" tested: true tests: ["detach true agrega flag -d al comando", "error si composeFile no existe"] test_file_path: "functions/infra/docker_compose_up_test.go" diff --git a/functions/infra/docker_container_logs.md b/functions/infra/docker_container_logs.md index 05bb88da..7795e725 100644 --- a/functions/infra/docker_container_logs.md +++ b/functions/infra/docker_container_logs.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strconv] +params: + - name: nameOrID + desc: "nombre o ID del contenedor Docker" + - name: tail + desc: "numero de ultimas lineas a devolver (0 devuelve todos los logs)" +output: "logs del contenedor como string" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_create_network.md b/functions/infra/docker_create_network.md index 1ddd2b31..e9a0b11b 100644 --- a/functions/infra/docker_create_network.md +++ b/functions/infra/docker_create_network.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: name + desc: "nombre de la red Docker a crear" + - name: driver + desc: "driver de la red (bridge, host, overlay, etc. o vacio para bridge por defecto)" +output: "ID de la red Docker creada" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_inspect_container.md b/functions/infra/docker_inspect_container.md index 8217a400..bcc8a55b 100644 --- a/functions/infra/docker_inspect_container.md +++ b/functions/infra/docker_inspect_container.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [encoding/json, fmt, os/exec] +params: + - name: nameOrID + desc: "nombre o ID del contenedor Docker a inspeccionar" +output: "mapa generico con detalles completos del contenedor (estado, red, volumes, etc.)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_list_containers.md b/functions/infra/docker_list_containers.md index 31c1fad9..2fbb003e 100644 --- a/functions/infra/docker_list_containers.md +++ b/functions/infra/docker_list_containers.md @@ -14,6 +14,10 @@ returns: [container_info_go_infra] returns_optional: false error_type: "error_go_core" imports: [encoding/json, fmt, os/exec] +params: + - name: all + desc: "si true incluye contenedores detenidos, si false solo los que estan corriendo" +output: "slice de ContainerInfo con ID, nombre, estado de cada contenedor" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_list_images.md b/functions/infra/docker_list_images.md index 2c0869bd..6dead271 100644 --- a/functions/infra/docker_list_images.md +++ b/functions/infra/docker_list_images.md @@ -14,6 +14,8 @@ returns: [image_info_go_infra] returns_optional: false error_type: "error_go_core" imports: [encoding/json, fmt, os/exec] +params: [] +output: "slice de ImageInfo con repositorio, tag, size de cada imagen" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_pull_image.md b/functions/infra/docker_pull_image.md index 4f69209d..b1ecd3b0 100644 --- a/functions/infra/docker_pull_image.md +++ b/functions/infra/docker_pull_image.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: image + desc: "referencia de imagen Docker en formato image:tag (ej: nginx:latest)" +output: "nil si la descarga fue exitosa, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_remove_container.md b/functions/infra/docker_remove_container.md index 6fe3411a..65be486c 100644 --- a/functions/infra/docker_remove_container.md +++ b/functions/infra/docker_remove_container.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: nameOrID + desc: "nombre o ID del contenedor Docker a eliminar" + - name: force + desc: "si true fuerza la eliminacion incluso si esta en ejecucion" +output: "nil si se elimino exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_remove_image.md b/functions/infra/docker_remove_image.md index 2f80a186..0eaade15 100644 --- a/functions/infra/docker_remove_image.md +++ b/functions/infra/docker_remove_image.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: image + desc: "referencia de imagen Docker (nombre:tag o ID)" + - name: force + desc: "si true fuerza eliminacion incluso si hay contenedores usando la imagen" +output: "nil si se elimino exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_remove_network.md b/functions/infra/docker_remove_network.md index bf497443..24c9081e 100644 --- a/functions/infra/docker_remove_network.md +++ b/functions/infra/docker_remove_network.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: nameOrID + desc: "nombre o ID de la red Docker a eliminar" +output: "nil si se elimino exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_run_container.md b/functions/infra/docker_run_container.md index 60a9409f..e3bebf93 100644 --- a/functions/infra/docker_run_container.md +++ b/functions/infra/docker_run_container.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: image + desc: "referencia de imagen Docker (nombre:tag)" + - name: opts + desc: "estructura DockerRunOpts con Name, Ports, Env, Volumes, Network, Detach, AutoRemove" +output: "ID del contenedor Docker creado y ejecutado" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_start_container.md b/functions/infra/docker_start_container.md index cb1d9b42..8a6257cc 100644 --- a/functions/infra/docker_start_container.md +++ b/functions/infra/docker_start_container.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: nameOrID + desc: "nombre o ID del contenedor Docker a iniciar" +output: "nil si se inicio exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_stop_container.md b/functions/infra/docker_stop_container.md index 7c3e6a9a..fbc577e7 100644 --- a/functions/infra/docker_stop_container.md +++ b/functions/infra/docker_stop_container.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strconv, strings] +params: + - name: nameOrID + desc: "nombre o ID del contenedor Docker a detener" + - name: timeoutSecs + desc: "segundos de gracia antes de SIGKILL (0 usa el default de Docker)" +output: "nil si se detuvo exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/docker_volume_create.md b/functions/infra/docker_volume_create.md index 949d5503..f30fed04 100644 --- a/functions/infra/docker_volume_create.md +++ b/functions/infra/docker_volume_create.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: name + desc: "nombre del volume Docker a crear" +output: "nombre del volume creado confirmado por Docker" tested: true tests: ["crea volume y retorna nombre", "idempotente si el volume ya existe"] test_file_path: "functions/infra/docker_volume_create_test.go" diff --git a/functions/infra/docker_volume_list.md b/functions/infra/docker_volume_list.md index 91611152..77e0e46c 100644 --- a/functions/infra/docker_volume_list.md +++ b/functions/infra/docker_volume_list.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [encoding/json, fmt, os/exec, strings] +params: [] +output: "slice de maps con campos Driver, Name, Scope, Labels, Mountpoint de cada volume" tested: true tests: ["lista vacia retorna nil sin error", "parsea campos Driver y Name correctamente"] test_file_path: "functions/infra/docker_volume_list_test.go" diff --git a/functions/infra/docker_volume_remove.md b/functions/infra/docker_volume_remove.md index b31ac544..4e865542 100644 --- a/functions/infra/docker_volume_remove.md +++ b/functions/infra/docker_volume_remove.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: name + desc: "nombre del volume Docker a eliminar" + - name: force + desc: "si true fuerza la eliminacion incluso si esta siendo usado" +output: "nil si se elimino exitosamente, error en caso contrario" tested: true tests: ["error si volume no existe", "force flag incluye -f en el comando"] test_file_path: "functions/infra/docker_volume_remove_test.go" diff --git a/functions/infra/duckdb_open.md b/functions/infra/duckdb_open.md index b8602c95..566cb05d 100644 --- a/functions/infra/duckdb_open.md +++ b/functions/infra/duckdb_open.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "github.com/marcboeker/go-duckdb"] +params: + - name: path + desc: "ruta del archivo DuckDB o vacio/:memory: para base en memoria" +output: "conexion sql.DB abierta a DuckDB" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/generate_dockerfile.md b/functions/infra/generate_dockerfile.md index 28253f49..75d95328 100644 --- a/functions/infra/generate_dockerfile.md +++ b/functions/infra/generate_dockerfile.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [fmt, sort, strings] +params: + - name: binaryName + desc: "nombre del binario Go a ejecutar en el contenedor" + - name: port + desc: "puerto a exponer en el Dockerfile (0 omite la instruccion EXPOSE)" + - name: envVars + desc: "mapa de variables de entorno a incluir en el Dockerfile" +output: "string con el contenido del Dockerfile multi-stage" tested: true tests: ["contiene stage builder con golang:1.23-alpine", "contiene stage final con alpine:latest", "incluye EXPOSE cuando port mayor a cero", "no incluye EXPOSE cuando port es cero", "env vars aparecen ordenadas alfabeticamente", "binaryName aparece en ENTRYPOINT", "env vars vacias no generan instrucciones ENV"] test_file_path: "functions/infra/generate_dockerfile_test.go" diff --git a/functions/infra/go_build_binary.md b/functions/infra/go_build_binary.md index f4952a1c..8fbdede0 100644 --- a/functions/infra/go_build_binary.md +++ b/functions/infra/go_build_binary.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os, os/exec, path/filepath, strings] +params: + - name: projectDir + desc: "ruta del directorio Go (con main.go o go.mod)" + - name: outputPath + desc: "ruta donde guardar el binario o vacio para usar build/{dirname}" + - name: ldflags + desc: "flags de vinculacion Go o vacio para usar -s -w (strip)" + - name: tags + desc: "build tags Go (ej: fts5,cgo)" +output: "nil si la compilacion fue exitosa, error en caso contrario" tested: true tests: ["compila proyecto valido sin error", "outputPath vacio usa build/dirname por defecto", "ldflags vacio usa -s -w por defecto", "error si projectDir no existe"] test_file_path: "functions/infra/go_build_binary_test.go" diff --git a/functions/infra/health_check_http.md b/functions/infra/health_check_http.md index 00842ed9..cef63b4f 100644 --- a/functions/infra/health_check_http.md +++ b/functions/infra/health_check_http.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, net/http, time] +params: + - name: url + desc: "URL del endpoint HTTP a verificar (GET)" + - name: timeoutSecs + desc: "tiempo maximo en segundos antes de agotar los intentos" + - name: intervalMs + desc: "intervalo en milisegundos entre intentos de verificacion" +output: "nil si el endpoint responde 200, error si se agota el timeout" tested: true tests: ["retorna nil cuando el servidor responde 200", "retorna error si el timeout se agota", "respeta el intervalo entre intentos"] test_file_path: "functions/infra/health_check_http_test.go" diff --git a/functions/infra/http_download_file.md b/functions/infra/http_download_file.md index 3a2e6ecc..fdfb78f8 100644 --- a/functions/infra/http_download_file.md +++ b/functions/infra/http_download_file.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["fmt", "io", "net/http", "os", "path/filepath", "time"] +params: + - name: url + desc: "URL del archivo a descargar" + - name: destPath + desc: "ruta de destino del archivo descargado" + - name: headers + desc: "mapa de headers custom a incluir en la solicitud" + - name: timeout + desc: "duracion maxima para completar la descarga" +output: "numero de bytes descargados exitosamente" tested: true tests: - "httptest.Server sirve archivo binario" diff --git a/functions/infra/http_get_json.md b/functions/infra/http_get_json.md index 368b9b36..ece62587 100644 --- a/functions/infra/http_get_json.md +++ b/functions/infra/http_get_json.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["encoding/json", "fmt", "io", "net/http", "time"] +params: + - name: url + desc: "URL del endpoint HTTP a consultar" + - name: headers + desc: "mapa de headers custom a incluir en la solicitud" + - name: timeout + desc: "duracion maxima para completar la solicitud" +output: "mapa con la estructura JSON decodificada del response" tested: true tests: - "httptest.Server con respuesta JSON" diff --git a/functions/infra/http_post_json.md b/functions/infra/http_post_json.md index f91aeed2..a6ed844c 100644 --- a/functions/infra/http_post_json.md +++ b/functions/infra/http_post_json.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["bytes", "encoding/json", "fmt", "io", "net/http", "time"] +params: + - name: url + desc: "URL del endpoint HTTP" + - name: body + desc: "datos a serializar como JSON en el cuerpo de la solicitud" + - name: headers + desc: "mapa de headers custom a fusionar con los headers por defecto" + - name: timeout + desc: "duracion maxima para completar la solicitud" +output: "mapa con la estructura JSON decodificada del response" tested: true tests: - "httptest.Server recibe body correcto" diff --git a/functions/infra/metabase_auth.md b/functions/infra/metabase_auth.md index 8234de47..3fc08c52 100644 --- a/functions/infra/metabase_auth.md +++ b/functions/infra/metabase_auth.md @@ -14,6 +14,14 @@ returns: [MetabaseClient_go_infra] returns_optional: false error_type: "error_go_core" imports: [bytes, encoding/json, fmt, io, net/http] +params: + - name: baseURL + desc: "URL base de Metabase (ej: http://localhost:3000)" + - name: email + desc: "email de la cuenta para autenticarse" + - name: password + desc: "contraseña de la cuenta" +output: "cliente MetabaseClient con session token valido por 14 dias" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_create_card.md b/functions/infra/metabase_create_card.md index abeab982..7ad971ea 100644 --- a/functions/infra/metabase_create_card.md +++ b/functions/infra/metabase_create_card.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: name + desc: "nombre de la pregunta/card" + - name: datasetQuery + desc: "estructura de query SQL nativa o MBQL (structured query)" + - name: display + desc: "tipo de visualizacion (table, bar, line, pie, scalar, etc.)" + - name: collectionID + desc: "ID de la coleccion destino (0 = root collection)" + - name: description + desc: "descripcion de la pregunta o vacio" +output: "mapa con los detalles de la card creada incluyendo su ID" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_create_dashboard.md b/functions/infra/metabase_create_dashboard.md index 120fb0e6..77e2addf 100644 --- a/functions/infra/metabase_create_dashboard.md +++ b/functions/infra/metabase_create_dashboard.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: name + desc: "nombre del dashboard" + - name: description + desc: "descripcion del dashboard o vacio" + - name: collectionID + desc: "ID de la coleccion destino (0 = root collection)" +output: "mapa con los detalles del dashboard creado incluyendo su ID" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_create_user.md b/functions/infra/metabase_create_user.md index 21b62345..a54e345f 100644 --- a/functions/infra/metabase_create_user.md +++ b/functions/infra/metabase_create_user.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado con permisos admin" + - name: firstName + desc: "nombre del usuario" + - name: lastName + desc: "apellido del usuario" + - name: email + desc: "email unico del usuario" + - name: password + desc: "contraseña o vacio para enviar invitacion por email" + - name: groupIDs + desc: "slice de IDs de grupos a los que agregar el usuario (nil = grupo default)" +output: "mapa con los detalles del usuario creado incluyendo su ID" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_deactivate_user.md b/functions/infra/metabase_deactivate_user.md index dbb0d541..1ca5ab23 100644 --- a/functions/infra/metabase_deactivate_user.md +++ b/functions/infra/metabase_deactivate_user.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado con permisos admin" + - name: userID + desc: "ID del usuario a desactivar" +output: "nil si la desactivacion fue exitosa, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_delete_card.md b/functions/infra/metabase_delete_card.md index d2c296f7..d4699ed6 100644 --- a/functions/infra/metabase_delete_card.md +++ b/functions/infra/metabase_delete_card.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: cardID + desc: "ID de la card/pregunta a eliminar" +output: "nil si la eliminacion fue exitosa, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_delete_dashboard.md b/functions/infra/metabase_delete_dashboard.md index a9e03fe8..cf3feeaa 100644 --- a/functions/infra/metabase_delete_dashboard.md +++ b/functions/infra/metabase_delete_dashboard.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: dashboardID + desc: "ID del dashboard a eliminar" +output: "nil si la eliminacion fue exitosa, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_execute_card.md b/functions/infra/metabase_execute_card.md index 18aff315..c1fde028 100644 --- a/functions/infra/metabase_execute_card.md +++ b/functions/infra/metabase_execute_card.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: cardID + desc: "ID de la card/pregunta guardada a ejecutar" + - name: parameters + desc: "slice de maps con parametros para queries parametrizadas (nil si no hay parametros)" +output: "mapa con status, row_count, running_time, data.columns, data.rows, data.native_form.query" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_execute_query.md b/functions/infra/metabase_execute_query.md index a3bbe527..0ca089b1 100644 --- a/functions/infra/metabase_execute_query.md +++ b/functions/infra/metabase_execute_query.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: databaseID + desc: "ID de la database en Metabase" + - name: sql + desc: "query SQL a ejecutar" + - name: maxResults + desc: "limite de filas (0 = default 2000)" +output: "mapa con status, row_count, running_time, data.columns, data.rows" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_get_card.md b/functions/infra/metabase_get_card.md index 57d3b5aa..1f259b25 100644 --- a/functions/infra/metabase_get_card.md +++ b/functions/infra/metabase_get_card.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: cardID + desc: "ID de la card/pregunta" +output: "mapa con detalles completos de la card (nombre, query, visualizacion, etc.)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_get_dashboard.md b/functions/infra/metabase_get_dashboard.md index 07147b91..7e6267a9 100644 --- a/functions/infra/metabase_get_dashboard.md +++ b/functions/infra/metabase_get_dashboard.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: dashboardID + desc: "ID del dashboard" +output: "mapa con dashboard completo incluyendo dashcards, tabs, parametros" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_get_user.md b/functions/infra/metabase_get_user.md index e884f25c..d7e05717 100644 --- a/functions/infra/metabase_get_user.md +++ b/functions/infra/metabase_get_user.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: userID + desc: "ID del usuario" +output: "mapa con detalles del usuario (email, nombre, grupo, permisos, etc.)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_list_cards.md b/functions/infra/metabase_list_cards.md index 91656b15..0af03497 100644 --- a/functions/infra/metabase_list_cards.md +++ b/functions/infra/metabase_list_cards.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: filter + desc: "filtro opcional (all, mine, fav, archived, recent, popular, database, table)" + - name: modelID + desc: "ID de database/tabla para filtros database/table (0 = ignorar)" +output: "slice de maps con detalles de cada card (ID, nombre, query, visualizacion)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_list_dashboards.md b/functions/infra/metabase_list_dashboards.md index 4c588e51..7bcfb265 100644 --- a/functions/infra/metabase_list_dashboards.md +++ b/functions/infra/metabase_list_dashboards.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: filter + desc: "filtro opcional (all, mine, archived o vacio para todas)" +output: "slice de maps con resumen de cada dashboard (sin dashcards completas)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_list_users.md b/functions/infra/metabase_list_users.md index 764ef170..82db27dc 100644 --- a/functions/infra/metabase_list_users.md +++ b/functions/infra/metabase_list_users.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado con permisos admin" + - name: status + desc: "filtro por estado (active, deactivated, all o vacio)" + - name: query + desc: "filtro por nombre o email (vacio para sin filtro)" + - name: limit + desc: "tamanio de pagina (0 = default de Metabase)" + - name: offset + desc: "offset para paginacion (0 = inicio)" +output: "mapa con data (slice de usuarios), total, limit, offset" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_update_card.md b/functions/infra/metabase_update_card.md index 625d7e53..a621e165 100644 --- a/functions/infra/metabase_update_card.md +++ b/functions/infra/metabase_update_card.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: cardID + desc: "ID de la card/pregunta a actualizar" + - name: fields + desc: "mapa con los campos a modificar (name, description, display, dataset_query, archived, etc.)" +output: "mapa con los detalles de la card actualizada" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_update_dashboard.md b/functions/infra/metabase_update_dashboard.md index 5e384d06..180533df 100644 --- a/functions/infra/metabase_update_dashboard.md +++ b/functions/infra/metabase_update_dashboard.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado" + - name: dashboardID + desc: "ID del dashboard a actualizar" + - name: fields + desc: "mapa con campos a modificar (name, description, dashcards, tabs, archived, etc.)" +output: "mapa con los detalles del dashboard actualizado" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/metabase_update_user.md b/functions/infra/metabase_update_user.md index 3976f233..8b9d5ae8 100644 --- a/functions/infra/metabase_update_user.md +++ b/functions/infra/metabase_update_user.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: client + desc: "cliente MetabaseClient autenticado con permisos admin" + - name: userID + desc: "ID del usuario a actualizar" + - name: fields + desc: "mapa con campos a modificar (first_name, last_name, email, is_superuser, group_ids, locale)" +output: "mapa con los detalles del usuario actualizado" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/nordvpn_container_run.md b/functions/infra/nordvpn_container_run.md index e33ec2e2..528c5da3 100644 --- a/functions/infra/nordvpn_container_run.md +++ b/functions/infra/nordvpn_container_run.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: opts + desc: "estructura NordVPNContainerRunOpts con Image, Cmd, Env, Volumes, Detach, Name, Gateway" +output: "ID del contenedor ejecutado bajo VPN" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/nordvpn_container_start.md b/functions/infra/nordvpn_container_start.md index 4189673f..bed2a3b3 100644 --- a/functions/infra/nordvpn_container_start.md +++ b/functions/infra/nordvpn_container_start.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, strings, time] +params: + - name: opts + desc: "estructura NordVPNContainerOpts con Token, Country, City, Protocol" +output: "ID del contenedor gateway NordVPN" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/nordvpn_container_stop.md b/functions/infra/nordvpn_container_stop.md index f0b68321..36f804fd 100644 --- a/functions/infra/nordvpn_container_stop.md +++ b/functions/infra/nordvpn_container_stop.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: gateway + desc: "nombre del contenedor gateway NordVPN a detener" + - name: clientNames + desc: "nombres opcionales de containers cliente que usan la VPN (se detienen primero)" +output: "nil si se detuvieron exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/parse_nordvpn_status.md b/functions/infra/parse_nordvpn_status.md index 64cf3d1c..d0467370 100644 --- a/functions/infra/parse_nordvpn_status.md +++ b/functions/infra/parse_nordvpn_status.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["regexp", "strings"] +params: + - name: output + desc: "salida de texto de nordvpn status" +output: "struct NordVPNStatus con campos Connected, Hostname, IP, Country, City, Technology" tested: true tests: ["TestParseNordVPNStatus_Connected", "TestParseNordVPNStatus_Disconnected", "TestParseNordVPNStatus_WithANSI"] test_file_path: "functions/infra/parse_nordvpn_status_test.go" diff --git a/functions/infra/postgres_open.md b/functions/infra/postgres_open.md index f9c4f1f2..80885446 100644 --- a/functions/infra/postgres_open.md +++ b/functions/infra/postgres_open.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "github.com/jackc/pgx/v5/stdlib"] +params: + - name: host + desc: "hostname del servidor PostgreSQL" + - name: port + desc: "puerto del servidor (5432 por defecto)" + - name: user + desc: "nombre de usuario para autenticacion" + - name: password + desc: "contraseña para autenticacion" + - name: dbname + desc: "nombre de la base de datos" + - name: sslmode + desc: "modo SSL (disable, require, verify-full o vacio para disable)" +output: "conexion sql.DB abierta a PostgreSQL" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/scaffold_wails_app.md b/functions/infra/scaffold_wails_app.md index a7e4bcb4..f52f2ba6 100644 --- a/functions/infra/scaffold_wails_app.md +++ b/functions/infra/scaffold_wails_app.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [os, os/exec, path/filepath, text/template, fmt, strings, context] +params: + - name: ctx + desc: "context para cancelacion" + - name: cfg + desc: "estructura ScaffoldWailsAppConfig con Name, Dir, Title, Width, Height, Author" +output: "nil si el scaffold fue exitoso, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/sqlite_open.md b/functions/infra/sqlite_open.md index 05d4fede..370b0057 100644 --- a/functions/infra/sqlite_open.md +++ b/functions/infra/sqlite_open.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql", "path/filepath", "github.com/mattn/go-sqlite3"] +params: + - name: path + desc: "ruta del archivo SQLite (:memory: para base en memoria)" + - name: basePath + desc: "ruta base para resolver paths relativos (vacio = relativo al cwd)" +output: "conexion sql.DB abierta a SQLite con WAL mode y foreign keys" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/ssh_check.md b/functions/infra/ssh_check.md index 405b5125..9845f6f1 100644 --- a/functions/infra/ssh_check.md +++ b/functions/infra/ssh_check.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: conn + desc: "estructura SSHConn con Host, User, Port, IdentityFile" +output: "nil si la conectividad SSH es exitosa, error en caso contrario" tested: true tests: ["conecta a organic-machine", "falla con host inexistente"] test_file_path: "functions/infra/ssh_check_test.go" diff --git a/functions/infra/ssh_download.md b/functions/infra/ssh_download.md index 5f964397..1fe1b279 100644 --- a/functions/infra/ssh_download.md +++ b/functions/infra/ssh_download.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: conn + desc: "estructura SSHConn con Host, User, Port, IdentityFile" + - name: remotePath + desc: "ruta del archivo en el host remoto" + - name: localPath + desc: "ruta de destino en el filesystem local" +output: "nil si la descarga fue exitosa, error en caso contrario" tested: true tests: ["upload y download roundtrip"] test_file_path: "functions/infra/ssh_transfer_test.go" diff --git a/functions/infra/ssh_exec.md b/functions/infra/ssh_exec.md index f5faa132..f0b8cb64 100644 --- a/functions/infra/ssh_exec.md +++ b/functions/infra/ssh_exec.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [os/exec] +params: + - name: conn + desc: "estructura SSHConn con Host, User, Port, IdentityFile" + - name: command + desc: "comando a ejecutar en el host remoto" +output: "tupla (stdout, stderr, exit_code, error) del comando ejecutado" tested: true tests: ["echo simple", "captura stderr", "exit code no cero", "comando multilinea"] test_file_path: "functions/infra/ssh_exec_test.go" diff --git a/functions/infra/ssh_tunnel_close.md b/functions/infra/ssh_tunnel_close.md index e5851257..90857ed5 100644 --- a/functions/infra/ssh_tunnel_close.md +++ b/functions/infra/ssh_tunnel_close.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os, syscall] +params: + - name: pid + desc: "ID del proceso ssh del tunel abierto (obtenido de ssh_tunnel_open)" +output: "nil si el tunel se cerro exitosamente, error en caso contrario" tested: true tests: ["abre tunel y lo cierra"] test_file_path: "functions/infra/ssh_tunnel_test.go" diff --git a/functions/infra/ssh_tunnel_open.md b/functions/infra/ssh_tunnel_open.md index 2ade3f79..2f507e79 100644 --- a/functions/infra/ssh_tunnel_open.md +++ b/functions/infra/ssh_tunnel_open.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings, time] +params: + - name: conn + desc: "estructura SSHConn con Host, User, Port, IdentityFile" + - name: localPort + desc: "puerto local donde escuchar conexiones" + - name: remoteHost + desc: "host remoto accesible desde el servidor SSH" + - name: remotePort + desc: "puerto en el host remoto" +output: "PID del proceso ssh del tunel para cerrarlo despues" tested: true tests: ["abre tunel y lo cierra"] test_file_path: "functions/infra/ssh_tunnel_test.go" diff --git a/functions/infra/ssh_upload.md b/functions/infra/ssh_upload.md index c9a9902d..ffcaa643 100644 --- a/functions/infra/ssh_upload.md +++ b/functions/infra/ssh_upload.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os/exec, strings] +params: + - name: conn + desc: "estructura SSHConn con Host, User, Port, IdentityFile" + - name: localPath + desc: "ruta del archivo local a subir" + - name: remotePath + desc: "ruta de destino en el host remoto" +output: "nil si la subida fue exitosa, error en caso contrario" tested: true tests: ["upload y download roundtrip"] test_file_path: "functions/infra/ssh_transfer_test.go" diff --git a/functions/infra/stop_app.md b/functions/infra/stop_app.md index 66116496..6974645f 100644 --- a/functions/infra/stop_app.md +++ b/functions/infra/stop_app.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] +params: + - name: containerName + desc: "nombre del contenedor Docker a detener (coincide con imageName de deploy_app)" + - name: removeImage + desc: "si true elimina tambien la imagen Docker" +output: "nil si la app se detuvo exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/wails_bind_crud.md b/functions/infra/wails_bind_crud.md index 8dc73a1d..4185aec9 100644 --- a/functions/infra/wails_bind_crud.md +++ b/functions/infra/wails_bind_crud.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [fmt, strings] +params: + - name: spec + desc: "estructura WailsCRUDSpec con EntityName, Fields, WithList/Get/Create/Update/Delete flags" +output: "string con codigo Go generado (struct + metodos CRUD stubs)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/wails_build.md b/functions/infra/wails_build.md index 3f75b8bd..585cab03 100644 --- a/functions/infra/wails_build.md +++ b/functions/infra/wails_build.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [os/exec, fmt, strings, context] +params: + - name: ctx + desc: "context para cancelacion" + - name: cfg + desc: "estructura WailsBuildConfig con Dir, Platform (linux/windows/darwin)" +output: "nil si la compilacion fue exitosa, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/wails_emit_event.md b/functions/infra/wails_emit_event.md index 3c08d90d..516b2106 100644 --- a/functions/infra/wails_emit_event.md +++ b/functions/infra/wails_emit_event.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [context, encoding/json, fmt, time, github.com/wailsapp/wails/v2/pkg/runtime] +params: + - name: ctx + desc: "context de Wails" + - name: eventName + desc: "nombre del evento a emitir (ej: price:update)" + - name: data + desc: "datos a serializar y enviar al frontend" +output: "void (sin valor de retorno, efecto es emitir el evento)" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/wails_stream_data.md b/functions/infra/wails_stream_data.md index 333dfb78..6caa9d9e 100644 --- a/functions/infra/wails_stream_data.md +++ b/functions/infra/wails_stream_data.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [context, fmt, time, github.com/wailsapp/wails/v2/pkg/runtime] +params: + - name: ctx + desc: "context de Wails" + - name: cfg + desc: "estructura WailsStreamConfig con StreamName y ChunkDelay" + - name: data + desc: "slice de datos genericos a enviar en chunks" +output: "nil si el stream se completo exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/functions/infra/write_dockerfile.md b/functions/infra/write_dockerfile.md index a326ed9a..dc593a61 100644 --- a/functions/infra/write_dockerfile.md +++ b/functions/infra/write_dockerfile.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os, path/filepath] +params: + - name: dir + desc: "directorio donde crear el archivo Dockerfile (se crea si no existe)" + - name: content + desc: "contenido del Dockerfile como string" +output: "ruta absoluta del archivo Dockerfile escrito" tested: true tests: ["escribe Dockerfile en directorio existente", "crea directorio si no existe", "retorna path absoluto correcto", "error si dir es path invalido"] test_file_path: "functions/infra/write_dockerfile_test.go" diff --git a/functions/pipelines/docker_tui.md b/functions/pipelines/docker_tui.md index bfe5b9ad..40ed559d 100644 --- a/functions/pipelines/docker_tui.md +++ b/functions/pipelines/docker_tui.md @@ -40,6 +40,8 @@ error_type: "error_go_core" imports: - github.com/charmbracelet/bubbletea - github.com/lucasdataproyects/devfactory +params: [] +output: "Ejecutable TUI fullscreen que gestiona Docker containers, images, volumes, networks y compose" tested: false tests: [] test_file_path: "" diff --git a/functions/pipelines/init_metabase.md b/functions/pipelines/init_metabase.md index 54f2a14f..ccabc2bc 100644 --- a/functions/pipelines/init_metabase.md +++ b/functions/pipelines/init_metabase.md @@ -21,6 +21,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [os/exec, encoding/json] +params: [] +output: "stdout: JSON con IDs de red, contenedores (postgres, metabase) y URL de acceso" tested: false tests: [] test_file_path: "" diff --git a/functions/pipelines/pipeline_launcher.md b/functions/pipelines/pipeline_launcher.md index 881dfac2..fc30f4a2 100644 --- a/functions/pipelines/pipeline_launcher.md +++ b/functions/pipelines/pipeline_launcher.md @@ -23,6 +23,8 @@ imports: - github.com/lucasdataproyects/devfactory - fn-registry/registry - fn-registry/fn_operations +params: [] +output: "Ejecutable TUI fullscreen con tabs de Pipelines (lista filtrable + launch) e History (ejecuciones)" tested: false tests: [] test_file_path: "" diff --git a/functions/shell/run_cmd.md b/functions/shell/run_cmd.md index ea99a411..166fa2c6 100644 --- a/functions/shell/run_cmd.md +++ b/functions/shell/run_cmd.md @@ -14,6 +14,12 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: name + desc: "nombre del comando (ej: ls, docker)" + - name: args + desc: "argumentos del comando (variadic)" +output: "Result[CmdResult] con stdout, stderr, exit code" tested: false tests: [] test_file_path: "" diff --git a/functions/shell/run_cmd_timeout.md b/functions/shell/run_cmd_timeout.md index 491dc3a6..d5691b2b 100644 --- a/functions/shell/run_cmd_timeout.md +++ b/functions/shell/run_cmd_timeout.md @@ -14,6 +14,14 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [time] +params: + - name: name + desc: "nombre del comando" + - name: timeout + desc: "duración máxima de ejecución" + - name: args + desc: "argumentos del comando (variadic)" +output: "Result[CmdResult] con stdout, stderr, exit code" tested: false tests: [] test_file_path: "" diff --git a/functions/shell/run_pipe.md b/functions/shell/run_pipe.md index 17420706..2f627ba9 100644 --- a/functions/shell/run_pipe.md +++ b/functions/shell/run_pipe.md @@ -14,6 +14,10 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: commands + desc: "comandos a encadenar con pipe (variadic)" +output: "Result[CmdResult] con output combinado y exit code" tested: false tests: [] test_file_path: "" diff --git a/functions/shell/run_shell.md b/functions/shell/run_shell.md index 8b3cfe11..80fc57fd 100644 --- a/functions/shell/run_shell.md +++ b/functions/shell/run_shell.md @@ -14,6 +14,10 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: command + desc: "comando shell a ejecutar (ej: ls -la | grep go)" +output: "Result[CmdResult] con stdout, stderr, exit code" tested: false tests: [] test_file_path: "" diff --git a/functions/shell/run_shell_timeout.md b/functions/shell/run_shell_timeout.md index 22abd287..6b7a252b 100644 --- a/functions/shell/run_shell_timeout.md +++ b/functions/shell/run_shell_timeout.md @@ -14,6 +14,12 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [time] +params: + - name: command + desc: "comando shell a ejecutar" + - name: timeout + desc: "duración máxima de ejecución" +output: "Result[CmdResult] con stdout, stderr, exit code" tested: false tests: [] test_file_path: "" diff --git a/functions/shell/which.md b/functions/shell/which.md index 599f3966..fd5621c4 100644 --- a/functions/shell/which.md +++ b/functions/shell/which.md @@ -14,6 +14,10 @@ returns: [option_go_core] returns_optional: false error_type: "" imports: [] +params: + - name: name + desc: "nombre del ejecutable a buscar" +output: "Option[string]: Some(ruta_absoluta) o None si no existe" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/clear_screen.md b/functions/tui/clear_screen.md index c788a55e..55d35420 100644 --- a/functions/tui/clear_screen.md +++ b/functions/tui/clear_screen.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: [] +output: "string: código ANSI para limpiar pantalla" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/confirm_prompt.md b/functions/tui/confirm_prompt.md index 45fbee18..ccb907d6 100644 --- a/functions/tui/confirm_prompt.md +++ b/functions/tui/confirm_prompt.md @@ -14,6 +14,10 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: prompt + desc: "pregunta a mostrar al usuario" +output: "Result[bool]: true si confirmó, false si rechazó" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/dark_styles.md b/functions/tui/dark_styles.md index 863ca3ff..572a4171 100644 --- a/functions/tui/dark_styles.md +++ b/functions/tui/dark_styles.md @@ -14,6 +14,8 @@ returns: [styles_go_tui] returns_optional: false error_type: "" imports: [] +params: [] +output: "Styles: conjunto de estilos lipgloss oscuros" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/dark_theme.md b/functions/tui/dark_theme.md index e32ebefe..3457ba52 100644 --- a/functions/tui/dark_theme.md +++ b/functions/tui/dark_theme.md @@ -14,6 +14,8 @@ returns: [theme_go_tui] returns_optional: false error_type: "" imports: [] +params: [] +output: "Theme: paleta de colores oscura" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/default_styles.md b/functions/tui/default_styles.md index 437cd630..efbbd0b9 100644 --- a/functions/tui/default_styles.md +++ b/functions/tui/default_styles.md @@ -14,6 +14,8 @@ returns: [styles_go_tui] returns_optional: false error_type: "" imports: [] +params: [] +output: "Styles: conjunto de estilos lipgloss por defecto" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/default_theme.md b/functions/tui/default_theme.md index adf5f72f..b8ef63b7 100644 --- a/functions/tui/default_theme.md +++ b/functions/tui/default_theme.md @@ -14,6 +14,8 @@ returns: [theme_go_tui] returns_optional: false error_type: "" imports: [] +params: [] +output: "Theme: paleta de colores clara/por defecto" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/hide_cursor.md b/functions/tui/hide_cursor.md index 423d8ca2..f2004760 100644 --- a/functions/tui/hide_cursor.md +++ b/functions/tui/hide_cursor.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: [] +output: "string: código ANSI para ocultar el cursor" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_base_model.md b/functions/tui/new_base_model.md index 66e35c08..234c2e01 100644 --- a/functions/tui/new_base_model.md +++ b/functions/tui/new_base_model.md @@ -14,6 +14,8 @@ returns: [base_model_go_tui] returns_optional: false error_type: "" imports: [] +params: [] +output: "BaseModel: modelo base con dimensiones y estilos" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_confirm.md b/functions/tui/new_confirm.md index 7165a74b..d1b34774 100644 --- a/functions/tui/new_confirm.md +++ b/functions/tui/new_confirm.md @@ -14,6 +14,10 @@ returns: [confirm_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: prompt + desc: "pregunta a mostrar en el diálogo" +output: "ConfirmModel: modelo de confirmación interactivo" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_filtered_list.md b/functions/tui/new_filtered_list.md index f26b7acd..36b7f621 100644 --- a/functions/tui/new_filtered_list.md +++ b/functions/tui/new_filtered_list.md @@ -14,6 +14,12 @@ returns: [filtered_list_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: items + desc: "array de ListItem con título y descripción" + - name: placeholder + desc: "texto a mostrar en el input de filtro vacío" +output: "FilteredListModel: lista con búsqueda en tiempo real" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_list.md b/functions/tui/new_list.md index 4b4c66fd..4dbfe161 100644 --- a/functions/tui/new_list.md +++ b/functions/tui/new_list.md @@ -14,6 +14,10 @@ returns: [list_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: items + desc: "array de ListItem para seleccionar" +output: "ListModel: lista simple seleccionable" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_multi_list.md b/functions/tui/new_multi_list.md index 2732dbb3..df9d8e28 100644 --- a/functions/tui/new_multi_list.md +++ b/functions/tui/new_multi_list.md @@ -14,6 +14,10 @@ returns: [list_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: items + desc: "array de ListItem para seleccionar múltiples" +output: "ListModel: lista con selección múltiple" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_multi_progress.md b/functions/tui/new_multi_progress.md index 0f71756d..94d0c147 100644 --- a/functions/tui/new_multi_progress.md +++ b/functions/tui/new_multi_progress.md @@ -14,6 +14,8 @@ returns: [multi_progress_model_go_tui] returns_optional: false error_type: "" imports: [] +params: [] +output: "MultiProgressModel: contenedor para múltiples barras de progreso" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_progress.md b/functions/tui/new_progress.md index d28e3a24..08ab0908 100644 --- a/functions/tui/new_progress.md +++ b/functions/tui/new_progress.md @@ -14,6 +14,12 @@ returns: [progress_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: total + desc: "valor total para la barra de progreso" + - name: label + desc: "etiqueta descriptiva de la operación" +output: "ProgressModel: barra de progreso" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_progress_with_styles.md b/functions/tui/new_progress_with_styles.md index 1ba6f8c7..6578a115 100644 --- a/functions/tui/new_progress_with_styles.md +++ b/functions/tui/new_progress_with_styles.md @@ -14,6 +14,14 @@ returns: [progress_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: total + desc: "valor total para la barra" + - name: label + desc: "etiqueta descriptiva" + - name: styles + desc: "Styles para aplicar a la barra" +output: "ProgressModel: barra de progreso estilizada" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_spinner.md b/functions/tui/new_spinner.md index fd64da9f..85c8af5d 100644 --- a/functions/tui/new_spinner.md +++ b/functions/tui/new_spinner.md @@ -14,6 +14,10 @@ returns: [spinner_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: message + desc: "mensaje a mostrar junto al spinner" +output: "SpinnerModel: spinner con estilos por defecto" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_spinner_with_style.md b/functions/tui/new_spinner_with_style.md index a6a48231..a916919d 100644 --- a/functions/tui/new_spinner_with_style.md +++ b/functions/tui/new_spinner_with_style.md @@ -14,6 +14,12 @@ returns: [spinner_model_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: message + desc: "mensaje a mostrar" + - name: styles + desc: "Styles para personalizar apariencia" +output: "SpinnerModel: spinner estilizado" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_spinner_with_timeout.md b/functions/tui/new_spinner_with_timeout.md index d8229f3d..c85201b0 100644 --- a/functions/tui/new_spinner_with_timeout.md +++ b/functions/tui/new_spinner_with_timeout.md @@ -14,6 +14,12 @@ returns: [spinner_with_timeout_model_go_tui] returns_optional: false error_type: "" imports: [time] +params: + - name: message + desc: "mensaje del spinner" + - name: timeout + desc: "duración máxima antes de auto-parada" +output: "SpinnerWithTimeoutModel: spinner con límite de tiempo" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/new_styles.md b/functions/tui/new_styles.md index 2033283c..67277c54 100644 --- a/functions/tui/new_styles.md +++ b/functions/tui/new_styles.md @@ -14,6 +14,10 @@ returns: [styles_go_tui] returns_optional: false error_type: "" imports: [] +params: + - name: theme + desc: "Theme con paleta de colores" +output: "Styles: estilos lipgloss aplicables a componentes" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/print_error.md b/functions/tui/print_error.md index 71980aa9..af9b1272 100644 --- a/functions/tui/print_error.md +++ b/functions/tui/print_error.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: msg + desc: "mensaje de error a imprimir" +output: "sin salida; imprime a stderr con estilo rojo" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/print_info.md b/functions/tui/print_info.md index 3b6ca5df..61b6a4e4 100644 --- a/functions/tui/print_info.md +++ b/functions/tui/print_info.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: msg + desc: "mensaje informativo a imprimir" +output: "sin salida; imprime a stdout con estilo cyan" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/print_muted.md b/functions/tui/print_muted.md index 1580eadd..fdf82fcf 100644 --- a/functions/tui/print_muted.md +++ b/functions/tui/print_muted.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: msg + desc: "mensaje atenuado a imprimir" +output: "sin salida; imprime a stdout con estilo gris" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/print_success.md b/functions/tui/print_success.md index f0c267a1..03a56a49 100644 --- a/functions/tui/print_success.md +++ b/functions/tui/print_success.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: msg + desc: "mensaje de éxito a imprimir" +output: "sin salida; imprime a stdout con estilo verde" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/print_warning.md b/functions/tui/print_warning.md index a7214bc2..acafd0c8 100644 --- a/functions/tui/print_warning.md +++ b/functions/tui/print_warning.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: msg + desc: "mensaje de advertencia a imprimir" +output: "sin salida; imprime a stdout con estilo naranja" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/quit_msg.md b/functions/tui/quit_msg.md index 606ac053..73f3a83e 100644 --- a/functions/tui/quit_msg.md +++ b/functions/tui/quit_msg.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "" imports: [github.com/charmbracelet/bubbletea] +params: [] +output: "tea.Msg: mensaje de salida para el event loop" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/run_fullscreen.md b/functions/tui/run_fullscreen.md index 5a88bfb9..2bb7eb6b 100644 --- a/functions/tui/run_fullscreen.md +++ b/functions/tui/run_fullscreen.md @@ -14,6 +14,10 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [github.com/charmbracelet/bubbletea] +params: + - name: model + desc: "modelo Bubble Tea a ejecutar" +output: "Result[T]: modelo final o error" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/run_model.md b/functions/tui/run_model.md index b937b1a0..4b9de104 100644 --- a/functions/tui/run_model.md +++ b/functions/tui/run_model.md @@ -14,6 +14,10 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [github.com/charmbracelet/bubbletea] +params: + - name: model + desc: "modelo Bubble Tea a ejecutar" +output: "Result[T]: modelo final o error" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/run_with_mouse.md b/functions/tui/run_with_mouse.md index c8a822f4..8e4649bc 100644 --- a/functions/tui/run_with_mouse.md +++ b/functions/tui/run_with_mouse.md @@ -14,6 +14,10 @@ returns: [result_go_core] returns_optional: false error_type: "error_go_core" imports: [github.com/charmbracelet/bubbletea] +params: + - name: model + desc: "modelo Bubble Tea a ejecutar con soporte de ratón" +output: "Result[T]: modelo final o error" tested: false tests: [] test_file_path: "" diff --git a/functions/tui/show_cursor.md b/functions/tui/show_cursor.md index 3420edea..943fd143 100644 --- a/functions/tui/show_cursor.md +++ b/functions/tui/show_cursor.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: [] +output: "string: código ANSI para mostrar el cursor" tested: false tests: [] test_file_path: "" diff --git a/powershell/functions/infra/win_firewall_add_rule.md b/powershell/functions/infra/win_firewall_add_rule.md index 5c578949..3b656623 100644 --- a/powershell/functions/infra/win_firewall_add_rule.md +++ b/powershell/functions/infra/win_firewall_add_rule.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: Name + desc: "Nombre de la regla en el firewall" + - name: Port + desc: "Puerto local a permitir (1-65535)" + - name: Protocol + desc: "Protocolo TCP o UDP (default: TCP)" +output: "Void - crea regla de entrada en firewall de Windows, idempotente por nombre" tested: false tests: [] test_file_path: "" diff --git a/powershell/functions/infra/win_firewall_remove_rule.md b/powershell/functions/infra/win_firewall_remove_rule.md index f163c43c..a86466ba 100644 --- a/powershell/functions/infra/win_firewall_remove_rule.md +++ b/powershell/functions/infra/win_firewall_remove_rule.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: Name + desc: "Nombre exacto de la regla a eliminar" +output: "Void - elimina regla del firewall de Windows, idempotente (no falla si no existe)" tested: false tests: [] test_file_path: "" diff --git a/powershell/functions/infra/win_portproxy_add.md b/powershell/functions/infra/win_portproxy_add.md index 503a1f94..93270dea 100644 --- a/powershell/functions/infra/win_portproxy_add.md +++ b/powershell/functions/infra/win_portproxy_add.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: ListenPort + desc: "Puerto en el que escucha el proxy (1-65535)" + - name: ConnectPort + desc: "Puerto de destino al que conectar (default: =ListenPort)" + - name: ListenAddr + desc: "Dirección IP en la que escucha (default: 0.0.0.0)" + - name: ConnectAddr + desc: "Dirección IP de destino (default: 127.0.0.1)" +output: "Void - crea regla de port proxy v4tov4 vía netsh, idempotente por ListenAddr:ListenPort" tested: false tests: [] test_file_path: "" diff --git a/powershell/functions/infra/win_portproxy_remove.md b/powershell/functions/infra/win_portproxy_remove.md index 63e6fb6b..7d3e07b8 100644 --- a/powershell/functions/infra/win_portproxy_remove.md +++ b/powershell/functions/infra/win_portproxy_remove.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: ListenPort + desc: "Puerto de escucha de la regla a eliminar (1-65535)" + - name: ListenAddr + desc: "Dirección IP de escucha (default: 0.0.0.0)" +output: "Void - elimina regla de port proxy, idempotente (no falla si no existe)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/all_of.md b/python/functions/core/all_of.md index a1958a50..178539e6 100644 --- a/python/functions/core/all_of.md +++ b/python/functions/core/all_of.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista de elementos a evaluar" + - name: pred + desc: "predicado (funcion que retorna bool) para evaluar cada elemento" +output: "booleano: True si todos los elementos cumplen el predicado, False en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/any_of.md b/python/functions/core/any_of.md index 2b82a1b7..79654df5 100644 --- a/python/functions/core/any_of.md +++ b/python/functions/core/any_of.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista de elementos a evaluar" + - name: pred + desc: "predicado (funcion que retorna bool) para evaluar cada elemento" +output: "booleano: True si al menos un elemento cumple el predicado, False en caso contrario" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/build_tree_from_headers.md b/python/functions/core/build_tree_from_headers.md index b69f4bd5..0977a03f 100644 --- a/python/functions/core/build_tree_from_headers.md +++ b/python/functions/core/build_tree_from_headers.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: node_list + desc: "lista plana de dicts con campos title, level y opcionalmente line_num" +output: "lista de dicts que forman arbol jerarquico anidado segun niveles" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/cache_decorator.md b/python/functions/core/cache_decorator.md index 1b1dc37d..8b19d26f 100644 --- a/python/functions/core/cache_decorator.md +++ b/python/functions/core/cache_decorator.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["asyncio", "functools", "hashlib", "json"] +params: + - name: store + desc: "store persistente compatible (CacheStore o FileCache) que implementa get/set" + - name: ttl + desc: "tiempo de vida del cache en segundos (0 significa infinito)" + - name: key_fn + desc: "funcion personalizada para generar clave de cache, recibe (func_name, args, kwargs)" +output: "decorator que cachea resultados de la funcion decorada" tested: true tests: - "Funcion llamada una vez, segunda vez desde cache" diff --git a/python/functions/core/calculate_media_strategy.md b/python/functions/core/calculate_media_strategy.md index d67cfab2..a4aca55b 100644 --- a/python/functions/core/calculate_media_strategy.md +++ b/python/functions/core/calculate_media_strategy.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: image_count + desc: "numero total de imagenes en el documento" + - name: line_count + desc: "numero total de lineas de texto en el documento" +output: "string con estrategia optima: 'full_page_vlm', 'extract' o 'text_only'" tested: true tests: - "0 imagenes text_only" diff --git a/python/functions/core/calculate_page_offset.md b/python/functions/core/calculate_page_offset.md index 072a03e2..f77735af 100644 --- a/python/functions/core/calculate_page_offset.md +++ b/python/functions/core/calculate_page_offset.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: pairs + desc: "lista de dicts con campos 'page' (numero logico) y 'physical_index' (indice fisico)" +output: "entero con el offset (diferencia moda entre physical_index - page)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/call_batch_with_retry.md b/python/functions/core/call_batch_with_retry.md index effa58d3..946283cb 100644 --- a/python/functions/core/call_batch_with_retry.md +++ b/python/functions/core/call_batch_with_retry.md @@ -14,6 +14,24 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["time", "random", "typing.Callable", "typing.TypeVar"] +params: + - name: items + desc: "lista de items a procesar" + - name: process_func + desc: "funcion que procesa un item individual" + - name: max_retries + desc: "numero maximo de reintentos por item" + - name: initial_delay + desc: "delay inicial en segundos para exponential backoff" + - name: max_delay + desc: "delay maximo en segundos para el backoff" + - name: backoff_factor + desc: "factor de multiplicacion para el backoff exponencial" + - name: exceptions + desc: "tupla de tipos de excepcion que desencadenan reintentos" + - name: continue_on_failure + desc: "si False, aborta el batch en el primer error; si True continua" +output: "tupla (results, failures) donde results es lista de valores y failures es lista de dicts con index/item/error" tested: true tests: - "todos los items exito" diff --git a/python/functions/core/chunk.md b/python/functions/core/chunk.md index f6429277..e4424d8a 100644 --- a/python/functions/core/chunk.md +++ b/python/functions/core/chunk.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista a dividir" + - name: size + desc: "tamanio de cada sublista (chunk)" +output: "lista de sublistas, cada una con maximo 'size' elementos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/circuit_breaker.md b/python/functions/core/circuit_breaker.md index 6d36d5a7..0153120a 100644 --- a/python/functions/core/circuit_breaker.md +++ b/python/functions/core/circuit_breaker.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [threading, time, enum] +params: + - name: failure_threshold + desc: "numero de fallos consecutivos que dispara el estado OPEN" + - name: reset_timeout + desc: "tiempo en segundos que debe esperar antes de pasar a HALF_OPEN" +output: "instancia de CircuitBreaker con metodos check(), record_success(), record_failure(), retry_after" tested: true tests: - "Transicion CLOSED → OPEN despues de N fallos" diff --git a/python/functions/core/classify_api_error.md b/python/functions/core/classify_api_error.md index b9e25891..a12b8c44 100644 --- a/python/functions/core/classify_api_error.md +++ b/python/functions/core/classify_api_error.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: error + desc: "excepcion de Python (Exception o subclase) a clasificar" +output: "string: 'permanent' (no reintentar), 'transient' (reintentar), o 'unknown'" tested: true tests: ["error 429 es transitorio", "error 401 es permanente", "error timeout es transitorio", "error desconocido retorna unknown", "error con __cause__ transitorio"] test_file_path: "python/functions/core/classify_api_error_test.py" diff --git a/python/functions/core/coerce_types.md b/python/functions/core/coerce_types.md index 77e8555b..3d439bf3 100644 --- a/python/functions/core/coerce_types.md +++ b/python/functions/core/coerce_types.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [datetime] +params: + - name: data + desc: "dict con valores a coercionar (tipicamente strings)" + - name: schema + desc: "dict con campos como keys y tipos esperados como values (int, float, str, bool, datetime, list[str])" +output: "tupla (resultado_coercionado, lista_de_warnings)" tested: true tests: - "string 42 a int 42" diff --git a/python/functions/core/compose.md b/python/functions/core/compose.md index 59c17688..0d7d6967 100644 --- a/python/functions/core/compose.md +++ b/python/functions/core/compose.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: fns + desc: "funciones a componer (variable number of arguments)" +output: "funcion compuesta que aplica las funciones de derecha a izquierda" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/compute_backoff_delay.md b/python/functions/core/compute_backoff_delay.md index 51e6d99a..43c3e036 100644 --- a/python/functions/core/compute_backoff_delay.md +++ b/python/functions/core/compute_backoff_delay.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [random] +params: + - name: attempt + desc: "numero de intento (0-based, siendo 0 el primer reintento)" + - name: base_delay + desc: "delay inicial en segundos" + - name: max_delay + desc: "delay maximo permitido en segundos" + - name: jitter + desc: "si True anade variacion aleatoria al delay" +output: "numero flotante representando el delay en segundos" tested: true tests: ["attempt 0 retorna base_delay sin jitter", "attempt alto se cappea a max_delay", "sin jitter es determinista"] test_file_path: "python/functions/core/compute_backoff_delay_test.py" diff --git a/python/functions/core/convert_github_to_raw_url.md b/python/functions/core/convert_github_to_raw_url.md index 6a815b51..b1a90d79 100644 --- a/python/functions/core/convert_github_to_raw_url.md +++ b/python/functions/core/convert_github_to_raw_url.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["urllib.parse"] +params: + - name: url + desc: "URL a convertir (puede ser GitHub, GitLab o cualquier otra)" +output: "string con la URL convertida a raw format (o sin cambios si no es un blob)" tested: true tests: - "URL GitHub blob" diff --git a/python/functions/core/create_node_mapping.md b/python/functions/core/create_node_mapping.md index afca2a61..ddc6baf2 100644 --- a/python/functions/core/create_node_mapping.md +++ b/python/functions/core/create_node_mapping.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: tree + desc: "lista de dicts representando arbol jerarquico con campos node_id y nodes" +output: "dict con node_id como keys y nodos como values para lookup O(1)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/cursor_paginate.md b/python/functions/core/cursor_paginate.md index 45bb8efe..e9b5091b 100644 --- a/python/functions/core/cursor_paginate.md +++ b/python/functions/core/cursor_paginate.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["time", "typing.Callable", "typing.TypeVar"] +params: + - name: fetch_page + desc: "callable que recibe limit y cursor como kwargs, retorna lista de items" + - name: get_cursor + desc: "callable que recibe un item y retorna su cursor (o None si es el ultimo)" + - name: page_size + desc: "numero de items por pagina a solicitar" + - name: max_items + desc: "limite maximo total de items a acumular" + - name: max_retries + desc: "numero maximo de reintentos por pagina" + - name: retry_delay + desc: "delay inicial en segundos para exponential backoff entre reintentos" + - name: retryable_exceptions + desc: "tupla de tipos de excepcion que desencadenan reintento" +output: "lista de items recopilados de todas las paginas" tested: true tests: - "API que retorna 3 paginas de 10 items" diff --git a/python/functions/core/detect_headings_by_font.md b/python/functions/core/detect_headings_by_font.md index 03d5040d..4e384456 100644 --- a/python/functions/core/detect_headings_by_font.md +++ b/python/functions/core/detect_headings_by_font.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [pdfplumber, collections] +params: + - name: pdf + desc: "objeto pdfplumber.PDF abierto con which_pages=" + - name: min_delta + desc: "diferencia minima de font size para clasificar como heading" + - name: max_levels + desc: "numero maximo de heading levels a detectar" +output: "lista de dicts con campos page_num, level, title para cada heading detectado" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/detect_url_type.md b/python/functions/core/detect_url_type.md index 53282928..10762764 100644 --- a/python/functions/core/detect_url_type.md +++ b/python/functions/core/detect_url_type.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["urllib.parse", "httpx"] +params: + - name: url + desc: "URL a clasificar" + - name: timeout + desc: "timeout en segundos para HTTP HEAD request si es necesario" +output: "tupla (tipo, metadata_dict) donde tipo es string como 'pdf', 'webpage', 'code_repository' etc." tested: true tests: - "URL .pdf por extension" diff --git a/python/functions/core/docx_to_markdown.md b/python/functions/core/docx_to_markdown.md index 91675658..5c53146d 100644 --- a/python/functions/core/docx_to_markdown.md +++ b/python/functions/core/docx_to_markdown.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [python-docx, lxml] +params: + - name: docx_path + desc: "ruta al archivo Word .docx" +output: "string markdown con headings, parrafos formateados y tablas preservadas" tested: true tests: ["docx con headings y parrafos", "docx con tablas intercaladas", "docx con formato bold/italic", "docx vacio", "archivo no encontrado lanza FileNotFoundError"] test_file_path: "python/functions/core/docx_to_markdown_test.py" diff --git a/python/functions/core/drop.md b/python/functions/core/drop.md index ecab3559..49898e51 100644 --- a/python/functions/core/drop.md +++ b/python/functions/core/drop.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista de la que descartar elementos" + - name: n + desc: "numero de elementos a descartar desde el inicio" +output: "lista sin los primeros n elementos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/epub_to_markdown.md b/python/functions/core/epub_to_markdown.md index 8738a00a..e1a77049 100644 --- a/python/functions/core/epub_to_markdown.md +++ b/python/functions/core/epub_to_markdown.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [zipfile, html, re, ebooklib] +params: + - name: epub_path + desc: "ruta al archivo EPUB" +output: "string markdown con titulo, autor (si esta disponible) y contenido del ebook" tested: true tests: - "conversion de headings h1-h3" diff --git a/python/functions/core/estimate_token_count.md b/python/functions/core/estimate_token_count.md index e81e6acd..b05cc3d8 100644 --- a/python/functions/core/estimate_token_count.md +++ b/python/functions/core/estimate_token_count.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: content + desc: "string de contenido a contar" +output: "entero estimando el numero de tokens en el contenido" tested: true tests: - "texto vacio retorna cero" diff --git a/python/functions/core/excel_to_markdown.md b/python/functions/core/excel_to_markdown.md index 22f5c4a6..90e143ac 100644 --- a/python/functions/core/excel_to_markdown.md +++ b/python/functions/core/excel_to_markdown.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["openpyxl", "xlrd"] +params: + - name: path + desc: "ruta al archivo Excel (.xlsx, .xls, .xlsm)" + - name: max_rows_per_sheet + desc: "limite maximo de filas a procesar por sheet" +output: "string markdown con cada sheet como seccion H2 y sus datos en tablas" tested: true tests: - "xlsx con multiples sheets produce una seccion H2 por sheet" diff --git a/python/functions/core/extract_frontmatter.md b/python/functions/core/extract_frontmatter.md index e0754c37..825aedf9 100644 --- a/python/functions/core/extract_frontmatter.md +++ b/python/functions/core/extract_frontmatter.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re, yaml] +params: + - name: content + desc: "string con contenido markdown potencialmente precedido por YAML frontmatter" +output: "tupla (contenido_sin_frontmatter, dict_parseado_o_None)" tested: true tests: - "contenido con frontmatter" diff --git a/python/functions/core/extract_json_from_llm.md b/python/functions/core/extract_json_from_llm.md index 0fedff75..d7855a04 100644 --- a/python/functions/core/extract_json_from_llm.md +++ b/python/functions/core/extract_json_from_llm.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [json] +params: + - name: content + desc: "string con respuesta LLM que contiene JSON (puede estar en bloque ```json)" +output: "dict parseado desde el JSON; dict vacio si no se puede recuperar" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/extract_markdown_headers.md b/python/functions/core/extract_markdown_headers.md index 2983e59d..0b72ff22 100644 --- a/python/functions/core/extract_markdown_headers.md +++ b/python/functions/core/extract_markdown_headers.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: markdown_content + desc: "string con contenido markdown" +output: "tupla (lista_de_headers, lista_de_lineas_originales) donde headers son dicts con title/level/line_num" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/extract_pdf_bookmarks.md b/python/functions/core/extract_pdf_bookmarks.md index 0da39039..8df03e85 100644 --- a/python/functions/core/extract_pdf_bookmarks.md +++ b/python/functions/core/extract_pdf_bookmarks.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [pdfplumber] +params: + - name: pdf + desc: "objeto pdfplumber.PDF abierto" +output: "lista de dicts con campos level (1-6), title y page_num para cada bookmark" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/extract_pdf_text.md b/python/functions/core/extract_pdf_text.md index 23f7278f..9325bc1e 100644 --- a/python/functions/core/extract_pdf_text.md +++ b/python/functions/core/extract_pdf_text.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [PyPDF2] +params: + - name: pdf_path + desc: "ruta al archivo PDF desde el cual extraer el texto" +output: "string: texto concatenado de todas las páginas del PDF" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/extract_text_from_file.md b/python/functions/core/extract_text_from_file.md index 02c66e93..3c922142 100644 --- a/python/functions/core/extract_text_from_file.md +++ b/python/functions/core/extract_text_from_file.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["os", "fitz (PyMuPDF)", "charset_normalizer", "chardet"] +params: + - name: file_path + desc: "ruta al archivo (PDF, MD o TXT)" +output: "string con texto extraido del archivo" tested: true tests: - "PDF con texto extrae contenido correctamente" diff --git a/python/functions/core/fetch_and_parse_url.md b/python/functions/core/fetch_and_parse_url.md index ce6e817f..c9989f4f 100644 --- a/python/functions/core/fetch_and_parse_url.md +++ b/python/functions/core/fetch_and_parse_url.md @@ -16,6 +16,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["httpx"] +params: + - name: url + desc: "URL a descargar y convertir" + - name: timeout + desc: "timeout en segundos para el HTTP request" +output: "string markdown con el contenido convertido desde la pagina web" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/filter_list.md b/python/functions/core/filter_list.md index 3dd32a8c..6dc17988 100644 --- a/python/functions/core/filter_list.md +++ b/python/functions/core/filter_list.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista a filtrar" + - name: pred + desc: "predicado (funcion que retorna bool) para seleccionar elementos" +output: "lista con solo los elementos que cumplen el predicado" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/find.md b/python/functions/core/find.md index dd2fafe8..b0b9bf5d 100644 --- a/python/functions/core/find.md +++ b/python/functions/core/find.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista donde buscar" + - name: pred + desc: "predicado (funcion que retorna bool) para encontrar un elemento" +output: "primer elemento que cumple el predicado, o None si no hay coincidencia" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/find_headings.md b/python/functions/core/find_headings.md index 61aa5f65..ee9b218b 100644 --- a/python/functions/core/find_headings.md +++ b/python/functions/core/find_headings.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: content + desc: "string con contenido markdown" +output: "lista de tuplas (start_pos, end_pos, title, level) para cada heading detectado" tested: true tests: - "headings normales detectados correctamente" diff --git a/python/functions/core/find_index.md b/python/functions/core/find_index.md index 427ae923..52d204e3 100644 --- a/python/functions/core/find_index.md +++ b/python/functions/core/find_index.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista donde buscar" + - name: pred + desc: "predicado (funcion que retorna bool) para encontrar un indice" +output: "entero con el indice del primer elemento que cumple, o -1 si no hay" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/flat_map.md b/python/functions/core/flat_map.md index 3e509651..753270b1 100644 --- a/python/functions/core/flat_map.md +++ b/python/functions/core/flat_map.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista a transformar" + - name: fn + desc: "funcion que recibe un elemento y retorna una lista" +output: "lista plana resultado de aplicar fn a cada elemento y aplanar un nivel" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/flatten.md b/python/functions/core/flatten.md index 7ca6648f..28be7a00 100644 --- a/python/functions/core/flatten.md +++ b/python/functions/core/flatten.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xss + desc: "lista de listas a aplanar" +output: "lista plana con todos los elementos concatenados un nivel" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/flatten_tree.md b/python/functions/core/flatten_tree.md index 2708363c..ecb9b514 100644 --- a/python/functions/core/flatten_tree.md +++ b/python/functions/core/flatten_tree.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [copy] +params: + - name: structure + desc: "arbol jerarquico (dict con campo 'nodes' anidado recursivamente)" +output: "lista plana de dicts sin campo 'nodes', deep copy de cada nodo" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/format_iso8601.md b/python/functions/core/format_iso8601.md index 0fa79940..88f6b2a7 100644 --- a/python/functions/core/format_iso8601.md +++ b/python/functions/core/format_iso8601.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["datetime"] +params: + - name: dt + desc: "datetime object (puede ser naive o aware)" +output: "string ISO 8601 UTC con milisegundos formato yyyy-MM-ddTHH:mm:ss.SSSZ" tested: true tests: - "datetime naive formateado como UTC" diff --git a/python/functions/core/format_simplified.md b/python/functions/core/format_simplified.md index 71f5a8b1..38799631 100644 --- a/python/functions/core/format_simplified.md +++ b/python/functions/core/format_simplified.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: ["datetime"] +params: + - name: dt + desc: "datetime a formatear" + - name: now + desc: "datetime actual para comparacion" +output: "string con formato humano simplificado: HH:MM:SS si mismo dia, YYYY-MM-DD si otro dia" tested: true tests: - "mismo dia muestra formato hora" diff --git a/python/functions/core/format_table_to_markdown.md b/python/functions/core/format_table_to_markdown.md index d7991f2c..d9a1291d 100644 --- a/python/functions/core/format_table_to_markdown.md +++ b/python/functions/core/format_table_to_markdown.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: rows + desc: "lista 2D de listas con celdas (cada fila es una lista de strings)" + - name: has_header + desc: "si True la primera fila se trata como header y se anade separador" +output: "string con tabla markdown formateada con pipes y alineacion de columnas" tested: true tests: ["tabla normal", "tabla con celdas vacias", "tabla con 1 fila", "tabla vacia", "celdas con pipes", "sin header"] test_file_path: "python/functions/core/format_table_to_markdown_test.py" diff --git a/python/functions/core/format_tree_structure.md b/python/functions/core/format_tree_structure.md index 3baf870e..ac64f12d 100644 --- a/python/functions/core/format_tree_structure.md +++ b/python/functions/core/format_tree_structure.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: structure + desc: "arbol jerarquico (dict con campo 'nodes' anidado recursivamente)" + - name: order + desc: "lista de nombres de campos en el orden deseado para reordenar" +output: "estructura arbol con los campos de cada nodo reordenados segun order" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/from_csv.md b/python/functions/core/from_csv.md index cb6cde11..129dee57 100644 --- a/python/functions/core/from_csv.md +++ b/python/functions/core/from_csv.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: text + desc: "string con contenido CSV" + - name: delimiter + desc: "caracter delimitador de campos (default coma)" + - name: has_header + desc: "si True la primera fila se usa como nombres de columnas" +output: "lista de dicts donde cada dict es una fila y las keys son los nombres de columnas" tested: true tests: - "csv simple con header" diff --git a/python/functions/core/from_jsonl.md b/python/functions/core/from_jsonl.md index 4e5e0736..e433ecb9 100644 --- a/python/functions/core/from_jsonl.md +++ b/python/functions/core/from_jsonl.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["json"] +params: + - name: text + desc: "string con contenido JSONL (JSON Lines, una linea por objeto)" +output: "lista de dicts, cada uno parseado desde una linea del JSONL" tested: true tests: - "jsonl valido" diff --git a/python/functions/core/generate_html_report.md b/python/functions/core/generate_html_report.md index 8928cf7d..d291c418 100644 --- a/python/functions/core/generate_html_report.md +++ b/python/functions/core/generate_html_report.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: ["re"] +params: + - name: title + desc: "titulo del reporte HTML" + - name: sections + desc: "lista de dicts con campos heading, type, data para cada seccion" +output: "string HTML completo autocontenido con CSS inline y todas las secciones renderizadas" tested: true tests: - "reporte con una tabla" diff --git a/python/functions/core/get_leaf_nodes.md b/python/functions/core/get_leaf_nodes.md index d698be21..e59d86ed 100644 --- a/python/functions/core/get_leaf_nodes.md +++ b/python/functions/core/get_leaf_nodes.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [copy] +params: + - name: structure + desc: "arbol jerarquico (dict con campo 'nodes' anidado recursivamente)" +output: "lista de dicts representando solo los nodos hoja (sin hijos)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/get_pdf_page_tokens.md b/python/functions/core/get_pdf_page_tokens.md index 344b8045..dca92ccf 100644 --- a/python/functions/core/get_pdf_page_tokens.md +++ b/python/functions/core/get_pdf_page_tokens.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [litellm, PyPDF2] +params: + - name: pdf_path + desc: "ruta al archivo PDF (string o BytesIO)" + - name: model + desc: "nombre del modelo LLM para contar tokens (p.ej. 'gpt-4o')" + - name: pdf_parser + desc: "backend para extraer texto: 'PyPDF2' (default) o 'PyMuPDF'" +output: "lista de tuplas (text, token_count) uno por pagina del PDF" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/get_text_stats.md b/python/functions/core/get_text_stats.md index 9bf8935a..47e7074b 100644 --- a/python/functions/core/get_text_stats.md +++ b/python/functions/core/get_text_stats.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: text + desc: "string de texto a analizar" +output: "dict con claves total_chars, total_lines, total_words conteniendo conteos basicos" tested: true tests: ["texto normal con palabras y lineas", "texto vacio retorna ceros", "texto con solo newlines"] test_file_path: "python/functions/core/get_text_stats_test.py" diff --git a/python/functions/core/group_by.md b/python/functions/core/group_by.md index a6630743..5bd10b14 100644 --- a/python/functions/core/group_by.md +++ b/python/functions/core/group_by.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista de elementos a agrupar" + - name: key_fn + desc: "funcion que extrae la clave de agrupacion de cada elemento" +output: "dict donde las keys son los resultados de key_fn y los values son listas de elementos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/html_to_markdown.md b/python/functions/core/html_to_markdown.md index a1cf4737..9e8de777 100644 --- a/python/functions/core/html_to_markdown.md +++ b/python/functions/core/html_to_markdown.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["re", "html.parser"] +params: + - name: html + desc: "string con contenido HTML a convertir" +output: "string con markdown equivalente al contenido HTML" tested: true tests: - "HTML con nav/footer filtra boilerplate" diff --git a/python/functions/core/is_git_repo_url.md b/python/functions/core/is_git_repo_url.md index 8cb04574..21311088 100644 --- a/python/functions/core/is_git_repo_url.md +++ b/python/functions/core/is_git_repo_url.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [urllib.parse] +params: + - name: url + desc: "URL del repositorio de código a validar (HTTPS, HTTP, SSH)" + - name: known_hosts + desc: "Lista opcional de hosts conocidos para validar URLs SSH" +output: "True si la URL apunta a un repositorio clonable, False en caso contrario" tested: true tests: - "URL repo valida" diff --git a/python/functions/core/join_by_key.md b/python/functions/core/join_by_key.md index ddeb66bf..f21eb45b 100644 --- a/python/functions/core/join_by_key.md +++ b/python/functions/core/join_by_key.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: left + desc: "Lista izquierda de diccionarios a joinear" + - name: right + desc: "Lista derecha de diccionarios a joinear" + - name: key + desc: "Nombre de la clave común para hacer matching" + - name: how + desc: "Tipo de join: 'inner', 'left', 'right' u 'outer'" +output: "Lista de diccionarios resultantes del join con campos renombrados si hay conflicto" tested: true tests: - "Inner join solo matches" diff --git a/python/functions/core/list_to_tree.md b/python/functions/core/list_to_tree.md index 640ffb13..305e440a 100644 --- a/python/functions/core/list_to_tree.md +++ b/python/functions/core/list_to_tree.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "Lista plana de diccionarios con campo 'structure' (ej: '1.2.3')" +output: "Árbol jerárquico anidado donde nodos padres contienen su lista 'nodes'" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/llm_acompletion_retry.md b/python/functions/core/llm_acompletion_retry.md index a7f9834d..124d4b38 100644 --- a/python/functions/core/llm_acompletion_retry.md +++ b/python/functions/core/llm_acompletion_retry.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [litellm, asyncio, logging] +params: + - name: model + desc: "Nombre del modelo LLM (ej: 'gpt-4o', 'claude-sonnet-4-20250514')" + - name: prompt + desc: "Mensaje de usuario a enviar al modelo" + - name: max_retries + desc: "Número máximo de reintentos ante errores transitorios" + - name: temperature + desc: "Temperatura para la generación (0.0 a 1.0)" +output: "Texto de respuesta del modelo LLM" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/llm_completion_retry.md b/python/functions/core/llm_completion_retry.md index a7bae27d..156d1207 100644 --- a/python/functions/core/llm_completion_retry.md +++ b/python/functions/core/llm_completion_retry.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [litellm, logging, time] +params: + - name: model + desc: "Nombre del modelo LLM soportado por litellm" + - name: prompt + desc: "Prompt del usuario a procesar" + - name: chat_history + desc: "Historial de chat opcional con formato [{'role': '...', 'content': '...'}]" + - name: return_finish_reason + desc: "Si True, retorna tupla (content, finish_reason) en lugar de solo content" + - name: max_retries + desc: "Número máximo de reintentos ante fallos" + - name: temperature + desc: "Temperatura para la generación" +output: "String con la respuesta del modelo, o tupla (str, str) si return_finish_reason=True" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/load_translations.md b/python/functions/core/load_translations.md index 5b31ab05..82f72291 100644 --- a/python/functions/core/load_translations.md +++ b/python/functions/core/load_translations.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [json, os] +params: + - name: locales_dir + desc: "Ruta al directorio con archivos de traducción JSON ({locale}.json)" +output: "Diccionario con clave=nombre_locale y valor=contenido del JSON" tested: true tests: ["carga multiples locales", "directorio inexistente retorna dict vacio", "ignora archivos no json", "locale con estructura anidada"] test_file_path: "python/functions/core/load_translations_test.py" diff --git a/python/functions/core/map_list.md b/python/functions/core/map_list.md index 259178cc..55a1061e 100644 --- a/python/functions/core/map_list.md +++ b/python/functions/core/map_list.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "Lista de elementos a transformar" + - name: fn + desc: "Función a aplicar a cada elemento" +output: "Nueva lista con el resultado de aplicar fn a cada elemento" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/merge_entity_attributes.md b/python/functions/core/merge_entity_attributes.md index 8ae0bf3d..e57deedd 100644 --- a/python/functions/core/merge_entity_attributes.md +++ b/python/functions/core/merge_entity_attributes.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: attr_list + desc: "Lista de diccionarios con atributos de candidatos de la misma entidad" +output: "Diccionario con atributos merged aplicando heurísticas de resolución por tipo" tested: true tests: - "Atributos complementarios (A tiene full_name, B tiene nationality) -> ambos" diff --git a/python/functions/core/next_cron_time.md b/python/functions/core/next_cron_time.md index fcac2049..c50f773c 100644 --- a/python/functions/core/next_cron_time.md +++ b/python/functions/core/next_cron_time.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [datetime] +params: + - name: schedule + desc: "Diccionario de cron schedule parsado con parse_cron_expr" + - name: after + desc: "Datetime base desde el cual calcular la próxima ejecución" +output: "Próximo datetime cuando se ejecute el cron, o None si el schedule es imposible" tested: true tests: - "0 * * * * desde :30 retorna la proxima hora en punto" diff --git a/python/functions/core/normalize_entity_name.md b/python/functions/core/normalize_entity_name.md index 05e563af..b5d33c52 100644 --- a/python/functions/core/normalize_entity_name.md +++ b/python/functions/core/normalize_entity_name.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: name + desc: "Nombre de la entidad a normalizar" + - name: entity_type + desc: "Tipo de entidad para aplicar reglas específicas (person, organization, email, domain, ip, etc.)" +output: "Nombre normalizado según el tipo de entidad" tested: true tests: - "person strip whitespace" diff --git a/python/functions/core/page_list_to_groups.md b/python/functions/core/page_list_to_groups.md index 6534f800..702e7a04 100644 --- a/python/functions/core/page_list_to_groups.md +++ b/python/functions/core/page_list_to_groups.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: page_contents + desc: "Lista de strings con contenido de cada página" + - name: token_lengths + desc: "Lista paralela con número de tokens por página" + - name: max_tokens + desc: "Límite máximo de tokens por grupo" + - name: overlap_pages + desc: "Número de páginas a solapar entre grupos consecutivos" +output: "Lista de strings donde cada string es un grupo de páginas combinadas" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/parse_code_ast.md b/python/functions/core/parse_code_ast.md index 4905ddfd..6d088fd3 100644 --- a/python/functions/core/parse_code_ast.md +++ b/python/functions/core/parse_code_ast.md @@ -14,6 +14,12 @@ returns: [code_entity_py_core] returns_optional: false error_type: "" imports: [tree-sitter, tree-sitter-python, tree-sitter-go, tree-sitter-javascript, tree-sitter-typescript, tree-sitter-rust, tree-sitter-java, tree-sitter-cpp] +params: + - name: source_code + desc: "String con el código fuente a analizar" + - name: language + desc: "Lenguaje del código (python/py, go, javascript/js, typescript/ts, rust/rs, java, cpp/c++)" +output: "Lista de entidades CodeEntity extraídas del AST (funciones, clases, métodos, interfaces)" tested: true tests: - "lenguaje no soportado lanza value error" diff --git a/python/functions/core/parse_cron_expr.md b/python/functions/core/parse_cron_expr.md index 0160223f..667effe9 100644 --- a/python/functions/core/parse_cron_expr.md +++ b/python/functions/core/parse_cron_expr.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: expr + desc: "Expresión cron estándar de 5 campos o alias como @daily, @hourly" +output: "Diccionario con claves minute, hour, day_of_month, month, day_of_week conteniendo listas de enteros válidos" tested: true tests: - "*/15 expande minutos a [0 15 30 45]" diff --git a/python/functions/core/parse_git_url.md b/python/functions/core/parse_git_url.md index bbf87519..082109c9 100644 --- a/python/functions/core/parse_git_url.md +++ b/python/functions/core/parse_git_url.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [urllib.parse] +params: + - name: url + desc: "URL de repositorio de código (HTTPS, SSH, git://, ssh://)" + - name: known_hosts + desc: "Lista opcional de hosts conocidos a reconocer" +output: "String con formato 'org/repo' si la URL es válida, None si no se puede parsear" tested: true tests: - "URL HTTPS GitHub" diff --git a/python/functions/core/parse_iso_datetime.md b/python/functions/core/parse_iso_datetime.md index 827ffc24..7d5cc962 100644 --- a/python/functions/core/parse_iso_datetime.md +++ b/python/functions/core/parse_iso_datetime.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["re", "datetime"] +params: + - name: value + desc: "String en formato ISO 8601 (posiblemente con fracciones de segundo excesivas)" +output: "Objeto datetime parseado y normalizado" tested: true tests: - "ISO normal sin fraccion" diff --git a/python/functions/core/parse_llm_json.md b/python/functions/core/parse_llm_json.md index 1956f97a..0bad6e6a 100644 --- a/python/functions/core/parse_llm_json.md +++ b/python/functions/core/parse_llm_json.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [json] +params: + - name: response + desc: "String con respuesta del LLM (posiblemente con think tags y markdown codeblocks)" +output: "Diccionario parseado del JSON limpio" tested: true tests: ["JSON limpio es parseado correctamente", "JSON con think tags y codeblock es parseado correctamente", "JSON invalido lanza ValueError"] test_file_path: "python/functions/core/parse_llm_json_test.py" diff --git a/python/functions/core/parse_page_range.md b/python/functions/core/parse_page_range.md index 71f5e12c..292cec0c 100644 --- a/python/functions/core/parse_page_range.md +++ b/python/functions/core/parse_page_range.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: pages + desc: "String con especificación de páginas (ej: '5-7,3,10-12')" +output: "Lista ordenada de números de página sin duplicados" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/parser_registry.md b/python/functions/core/parser_registry.md index 7dc19d03..7d90897e 100644 --- a/python/functions/core/parser_registry.md +++ b/python/functions/core/parser_registry.md @@ -14,6 +14,8 @@ returns: [parse_result_py_core] returns_optional: false error_type: "error_go_core" imports: [] +params: [] +output: "ParseResult con contenido parseado y metadatos del parsing" tested: true tests: - "registrar parser custom" diff --git a/python/functions/core/partition.md b/python/functions/core/partition.md index 5d09e2e9..0c36efc9 100644 --- a/python/functions/core/partition.md +++ b/python/functions/core/partition.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "Lista a dividir" + - name: pred + desc: "Función predicado que retorna True/False" +output: "Tupla (elementos_que_cumplen, elementos_que_no_cumplen)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/pdf_to_markdown.md b/python/functions/core/pdf_to_markdown.md index 41fac848..9b4cbc5d 100644 --- a/python/functions/core/pdf_to_markdown.md +++ b/python/functions/core/pdf_to_markdown.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [pdfplumber, os, sys] +params: + - name: pdf_path + desc: "Ruta al archivo PDF a convertir" + - name: heading_detection + desc: "Estrategia de detección de headings: 'auto', 'bookmarks', 'font'" +output: "Tupla (markdown_content, metadata_dict) con el PDF convertido a markdown y metadatos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/pipe.md b/python/functions/core/pipe.md index cacdd992..09bd9cb2 100644 --- a/python/functions/core/pipe.md +++ b/python/functions/core/pipe.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: value + desc: "Valor inicial a pasar por las funciones" + - name: fns + desc: "Funciones a aplicar secuencialmente de izquierda a derecha" +output: "Resultado final después de aplicar todas las funciones en orden" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/preprocess_text.md b/python/functions/core/preprocess_text.md index b0db1c08..a3d90a7a 100644 --- a/python/functions/core/preprocess_text.md +++ b/python/functions/core/preprocess_text.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: text + desc: "Texto crudo a normalizar" +output: "Texto con whitespace normalizado y newlines ajustados" tested: true tests: ["texto con saltos de linea Windows CRLF", "texto con multiples newlines consecutivos", "texto con espacios leading y trailing en cada linea"] test_file_path: "python/functions/core/preprocess_text_test.py" diff --git a/python/functions/core/react_loop.md b/python/functions/core/react_loop.md index df6c7ed6..c2c64501 100644 --- a/python/functions/core/react_loop.md +++ b/python/functions/core/react_loop.md @@ -14,6 +14,24 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [json, re, typing] +params: + - name: llm_chat + desc: "Función que envía mensajes al LLM y retorna la respuesta" + - name: tools + desc: "Diccionario de funciones disponibles como tools {nombre: callable}" + - name: system_prompt + desc: "Instrucciones del sistema para el agente" + - name: user_prompt + desc: "Pregunta/tarea inicial del usuario" + - name: max_iterations + desc: "Máximo número de iteraciones antes de fallback" + - name: on_thought + desc: "Callback opcional para logging de pensamientos" + - name: on_action + desc: "Callback opcional para logging de acciones" + - name: on_observation + desc: "Callback opcional para logging de observaciones" +output: "String con la respuesta final del agente" tested: true tests: - "agente que usa 1 tool y da respuesta final" diff --git a/python/functions/core/reduce_list.md b/python/functions/core/reduce_list.md index 1387c202..377a8266 100644 --- a/python/functions/core/reduce_list.md +++ b/python/functions/core/reduce_list.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "Lista a reducir" + - name: initial + desc: "Valor inicial del acumulador" + - name: fn + desc: "Función binaria fn(acumulador, elemento)" +output: "Valor final del acumulador después de procesar todos los elementos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/remove_tree_fields.md b/python/functions/core/remove_tree_fields.md index 7a83cccd..d75c906a 100644 --- a/python/functions/core/remove_tree_fields.md +++ b/python/functions/core/remove_tree_fields.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "Estructura árbol (dict/list/valor) a procesar" + - name: fields + desc: "Lista de nombres de campo a eliminar recursivamente (default: ['text'])" +output: "Copia de la estructura sin los campos especificados" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/render_template.md b/python/functions/core/render_template.md index 14a2f489..77f0cb9a 100644 --- a/python/functions/core/render_template.md +++ b/python/functions/core/render_template.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: ["re"] +params: + - name: template + desc: "String con template usando {{var}}, {{{raw}}}, {% for %}, {% if %}" + - name: context + desc: "Diccionario con valores para las variables" + - name: missing + desc: "Valor a usar cuando falta una variable (default: '')" +output: "String renderizado con variables sustituidas y lógica aplicada" tested: true tests: - "sustitucion simple" diff --git a/python/functions/core/retry_async.md b/python/functions/core/retry_async.md index 0123ea55..e8539e40 100644 --- a/python/functions/core/retry_async.md +++ b/python/functions/core/retry_async.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [asyncio, typing] +params: + - name: func + desc: "Corrutina a reintentar" + - name: max_retries + desc: "Número máximo de reintentos" + - name: base_delay + desc: "Delay inicial en segundos" + - name: max_delay + desc: "Delay máximo en segundos" + - name: jitter + desc: "Si True, añade variabilidad al delay" + - name: is_retryable + desc: "Predicado opcional para decidir si reintentar una excepción" +output: "Resultado de ejecutar la función si tiene éxito" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/retry_sync.md b/python/functions/core/retry_sync.md index cccda366..951d73a4 100644 --- a/python/functions/core/retry_sync.md +++ b/python/functions/core/retry_sync.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [time, typing] +params: + - name: func + desc: "Función a reintentar" + - name: max_retries + desc: "Número máximo de reintentos" + - name: base_delay + desc: "Delay inicial en segundos entre reintentos" + - name: max_delay + desc: "Delay máximo en segundos" + - name: jitter + desc: "Si True, añade variabilidad al delay" + - name: is_retryable + desc: "Predicado opcional para decidir si reintentar" +output: "Resultado de ejecutar la función si tiene éxito" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/retry_with_backoff.md b/python/functions/core/retry_with_backoff.md index 2e263487..71f1ae37 100644 --- a/python/functions/core/retry_with_backoff.md +++ b/python/functions/core/retry_with_backoff.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [functools, time, random, asyncio, collections.abc, typing] +params: + - name: max_retries + desc: "Número máximo de reintentos" + - name: initial_delay + desc: "Delay inicial en segundos" + - name: max_delay + desc: "Delay máximo en segundos" + - name: backoff_factor + desc: "Factor multiplicativo para el delay exponencial" + - name: jitter + desc: "Si True, añade variabilidad aleatoria al delay" + - name: exceptions + desc: "Tupla de tipos de excepción a reintentar" + - name: on_retry + desc: "Callback opcional llamado cuando se reintenta" +output: "Decorador que envuelve la función con lógica de retry" tested: true tests: - "funcion que falla dos veces y luego exito" diff --git a/python/functions/core/retry_with_backoff_async.md b/python/functions/core/retry_with_backoff_async.md index 98c80e76..2142f306 100644 --- a/python/functions/core/retry_with_backoff_async.md +++ b/python/functions/core/retry_with_backoff_async.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [functools, asyncio, random, collections.abc, typing] +params: + - name: max_retries + desc: "Número máximo de reintentos" + - name: initial_delay + desc: "Delay inicial en segundos" + - name: max_delay + desc: "Delay máximo en segundos" + - name: backoff_factor + desc: "Factor multiplicativo para exponential backoff" + - name: jitter + desc: "Si True, añade variabilidad al delay" + - name: exceptions + desc: "Tupla de tipos de excepción a reintentar" + - name: on_retry + desc: "Callback opcional para logging de reintentos" +output: "Decorador que envuelve función async con lógica de retry" tested: true tests: - "async funcion que falla dos veces y luego exito" diff --git a/python/functions/core/sanitize_for_path.md b/python/functions/core/sanitize_for_path.md index a3b843ce..21d7a951 100644 --- a/python/functions/core/sanitize_for_path.md +++ b/python/functions/core/sanitize_for_path.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [re, hashlib] +params: + - name: text + desc: "Texto a convertir en nombre seguro para filesystem" + - name: max_length + desc: "Longitud máxima permitida del resultado" +output: "String sanitizado apto para usar en paths y nombres de archivos" tested: true tests: - "texto normal produce slug con underscores" diff --git a/python/functions/core/smart_split_content.md b/python/functions/core/smart_split_content.md index 133a4f08..5850bcdc 100644 --- a/python/functions/core/smart_split_content.md +++ b/python/functions/core/smart_split_content.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: content + desc: "Contenido grande a dividir" + - name: max_tokens + desc: "Límite máximo de tokens por chunk" + - name: max_chars + desc: "Límite máximo de caracteres por chunk" +output: "Lista de strings donde cada string es un chunk que respeta ambos límites" tested: true tests: - "contenido corto produce una sola parte" diff --git a/python/functions/core/split_text_into_chunks.md b/python/functions/core/split_text_into_chunks.md index b3c053a2..66291f0c 100644 --- a/python/functions/core/split_text_into_chunks.md +++ b/python/functions/core/split_text_into_chunks.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: text + desc: "Texto a dividir en chunks" + - name: chunk_size + desc: "Tamaño objetivo de cada chunk en caracteres" + - name: overlap + desc: "Número de caracteres a solapar entre chunks consecutivos" +output: "Lista de strings donde cada uno es un chunk con solapamiento" tested: true tests: ["texto corto cabe en 1 chunk", "texto largo con oraciones corta en punto", "texto cjk con separador ideografico", "texto sin separadores corta en chunk size exacto", "overlap funciona", "texto vacio retorna lista vacia"] test_file_path: "python/functions/core/split_text_into_chunks_test.py" diff --git a/python/functions/core/strip_markdown_codeblock.md b/python/functions/core/strip_markdown_codeblock.md index ce6f8e5f..523dfb40 100644 --- a/python/functions/core/strip_markdown_codeblock.md +++ b/python/functions/core/strip_markdown_codeblock.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: text + desc: "String posiblemente envuelto en markdown code block" +output: "String con los delimitadores ```json/``` removidos si estaban presentes" tested: true tests: ["JSON sin codeblock no cambia", "JSON con wrapper ```json es desenvuelto", "JSON con wrapper ``` solo es desenvuelto", "texto que no es JSON pasa sin cambio"] test_file_path: "python/functions/core/strip_markdown_codeblock_test.py" diff --git a/python/functions/core/strip_think_tags.md b/python/functions/core/strip_think_tags.md index b641b6cb..cf55160f 100644 --- a/python/functions/core/strip_think_tags.md +++ b/python/functions/core/strip_think_tags.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: text + desc: "String posiblemente con tags ..." +output: "String con los think tags removidos" tested: true tests: ["texto sin tags no cambia", "texto con think tags los remueve", "tags multilinea son removidos", "multiples tags son removidos"] test_file_path: "python/functions/core/strip_think_tags_test.py" diff --git a/python/functions/core/t.md b/python/functions/core/t.md index bd408f0a..5a40884b 100644 --- a/python/functions/core/t.md +++ b/python/functions/core/t.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [threading] +params: + - name: key + desc: "Clave de traducción con dot-path notation (ej: 'report.done')" + - name: locale + desc: "Locale a usar (default: usa locale thread-local)" + - name: kwargs + desc: "Variables para interpolación en el template" +output: "String traducido e interpolado, o la key si no se encuentra traducción" tested: true tests: ["key existente retorna traduccion", "key inexistente retorna la key", "interpolacion de variables", "dot-path profundo", "fallback a locale default"] test_file_path: "python/functions/core/t_test.py" diff --git a/python/functions/core/take.md b/python/functions/core/take.md index 1a01474b..2d3c0525 100644 --- a/python/functions/core/take.md +++ b/python/functions/core/take.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "Lista de la que tomar elementos" + - name: n + desc: "Número de elementos a tomar desde el inicio" +output: "Lista con los primeros n elementos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/task_manager.md b/python/functions/core/task_manager.md index 4cdbbff6..47fbeb92 100644 --- a/python/functions/core/task_manager.md +++ b/python/functions/core/task_manager.md @@ -14,6 +14,8 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [threading, uuid, datetime] +params: [] +output: "Instancia singleton thread-safe para gestionar tareas de larga duración" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/to_csv.md b/python/functions/core/to_csv.md index bfedfbeb..db133f6e 100644 --- a/python/functions/core/to_csv.md +++ b/python/functions/core/to_csv.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: rows + desc: "Lista de diccionarios a serializar como CSV" + - name: columns + desc: "Lista opcional de nombres de columnas (orden y filtrado)" + - name: delimiter + desc: "Carácter delimitador para campos" + - name: include_header + desc: "Si True, incluye fila de encabezados" +output: "String con datos en formato CSV válido (RFC 4180)" tested: true tests: - "lista simple csv con header" diff --git a/python/functions/core/to_jsonl.md b/python/functions/core/to_jsonl.md index f7a26ca1..759f743e 100644 --- a/python/functions/core/to_jsonl.md +++ b/python/functions/core/to_jsonl.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: ["json"] +params: + - name: rows + desc: "Lista de diccionarios a serializar" +output: "String en formato JSON Lines (newline-delimited JSON)" tested: true tests: - "lista de dicts jsonl" diff --git a/python/functions/core/to_pascal_case.md b/python/functions/core/to_pascal_case.md index d860def3..9e9fdb6b 100644 --- a/python/functions/core/to_pascal_case.md +++ b/python/functions/core/to_pascal_case.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: name + desc: "String en cualquier formato de naming (snake_case, camelCase, kebab-case, etc.)" +output: "String convertido a PascalCase, o 'Unknown' si está vacío" tested: true tests: - "snake_case" diff --git a/python/functions/core/tree_to_flat_list.md b/python/functions/core/tree_to_flat_list.md index 33616c47..4ebea655 100644 --- a/python/functions/core/tree_to_flat_list.md +++ b/python/functions/core/tree_to_flat_list.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: structure + desc: "Árbol jerárquico con estructura anidada" +output: "Lista plana de nodos en orden DFS (depth-first search)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/unique.md b/python/functions/core/unique.md index 3416252c..d8c57679 100644 --- a/python/functions/core/unique.md +++ b/python/functions/core/unique.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "Lista potencialmente con elementos duplicados" +output: "Lista sin duplicados preservando orden de primera aparición" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/validate_git_ssh_uri.md b/python/functions/core/validate_git_ssh_uri.md index da1d0310..54567556 100644 --- a/python/functions/core/validate_git_ssh_uri.md +++ b/python/functions/core/validate_git_ssh_uri.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: url + desc: "String con URI SSH de git a validar (formato git@host:path)" +output: "None si la URI es válida, lanza ValueError si es inválida" tested: true tests: - "URI valida" diff --git a/python/functions/core/validate_json_schema.md b/python/functions/core/validate_json_schema.md index b5c17238..77e417c3 100644 --- a/python/functions/core/validate_json_schema.md +++ b/python/functions/core/validate_json_schema.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: data + desc: "Diccionario a validar contra el schema" + - name: schema + desc: "Esquema JSON Schema (subset practico)" +output: "Tupla (válido: bool, errores: list[str]) con lista de errores si hay" tested: true tests: - "schema simple con types y required" diff --git a/python/functions/core/write_node_ids.md b/python/functions/core/write_node_ids.md index 9892748e..6c91aec9 100644 --- a/python/functions/core/write_node_ids.md +++ b/python/functions/core/write_node_ids.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "Estructura árbol a la que añadir IDs" + - name: node_id + desc: "Contador inicial para los IDs (default: 0)" +output: "Próximo contador a usar después de asignar IDs" tested: false tests: [] test_file_path: "" diff --git a/python/functions/core/zip_with.md b/python/functions/core/zip_with.md index 4264e1d7..2f54df90 100644 --- a/python/functions/core/zip_with.md +++ b/python/functions/core/zip_with.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "Primera lista a combinar" + - name: ys + desc: "Segunda lista a combinar" + - name: fn + desc: "Función que combina elementos: fn(x, y)" +output: "Lista de resultados combinados, longitud igual a la lista más corta" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/detect_sql_injection.md b/python/functions/cybersecurity/detect_sql_injection.md index ec3d8946..1e390115 100644 --- a/python/functions/cybersecurity/detect_sql_injection.md +++ b/python/functions/cybersecurity/detect_sql_injection.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: input_str + desc: "string a analizar en busca de patrones de SQL injection" +output: "tupla (is_threat, pattern) indicando si se detectó amenaza y el nombre del patrón" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/entropy_shannon.md b/python/functions/cybersecurity/entropy_shannon.md index 453b9e13..7c717b8a 100644 --- a/python/functions/cybersecurity/entropy_shannon.md +++ b/python/functions/cybersecurity/entropy_shannon.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [math, collections] +params: + - name: data + desc: "bytes cuya entropia de Shannon se desea calcular" +output: "valor float de entropia entre 0 y 8 bits por byte" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/envelope_decrypt.md b/python/functions/cybersecurity/envelope_decrypt.md index 4cb71cd6..aa9cc933 100644 --- a/python/functions/cybersecurity/envelope_decrypt.md +++ b/python/functions/cybersecurity/envelope_decrypt.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [cryptography, struct] +params: + - name: ciphertext + desc: "datos cifrados con envelope_encrypt o datos sin cifrar (passthrough si no comienzan con magic OVE1)" + - name: master_key + desc: "clave maestra KEK de 32 bytes para descifrar la file key" +output: "bytes desencriptados, o bytes sin modificar si el magic no es OVE1" tested: true tests: - "decrypt de datos cifrados" diff --git a/python/functions/cybersecurity/envelope_encrypt.md b/python/functions/cybersecurity/envelope_encrypt.md index 0ab7b4a0..95e35dd2 100644 --- a/python/functions/cybersecurity/envelope_encrypt.md +++ b/python/functions/cybersecurity/envelope_encrypt.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [cryptography, secrets, struct] +params: + - name: plaintext + desc: "datos a cifrar con AES-256-GCM" + - name: master_key + desc: "clave maestra KEK de 32 bytes para cifrar la file key" +output: "envelope binario con magic b'OVE1' conteniendo datos cifrados" tested: true tests: - "encrypt → decrypt roundtrip" diff --git a/python/functions/cybersecurity/extract_urls.md b/python/functions/cybersecurity/extract_urls.md index faf9aa16..992a634d 100644 --- a/python/functions/cybersecurity/extract_urls.md +++ b/python/functions/cybersecurity/extract_urls.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: text + desc: "string de texto del cual extraer URLs HTTP/HTTPS" +output: "lista de strings con todas las URLs encontradas" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/hash_md5.md b/python/functions/cybersecurity/hash_md5.md index 3dc5e207..c25d4c5e 100644 --- a/python/functions/cybersecurity/hash_md5.md +++ b/python/functions/cybersecurity/hash_md5.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [hashlib] +params: + - name: data + desc: "bytes a ser hasheado" +output: "string hexadecimal del hash MD5 (32 caracteres)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/hash_sha256.md b/python/functions/cybersecurity/hash_sha256.md index 90b704c2..16e3c970 100644 --- a/python/functions/cybersecurity/hash_sha256.md +++ b/python/functions/cybersecurity/hash_sha256.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [hashlib] +params: + - name: data + desc: "bytes a ser hasheado" +output: "string hexadecimal del hash SHA-256 (64 caracteres)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/is_base64.md b/python/functions/cybersecurity/is_base64.md index 01a1b680..1dc147ca 100644 --- a/python/functions/cybersecurity/is_base64.md +++ b/python/functions/cybersecurity/is_base64.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re, base64] +params: + - name: s + desc: "string a validar como base64" +output: "booleano indicando si el string es base64 valido (minimo 4 caracteres)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/is_hex.md b/python/functions/cybersecurity/is_hex.md index 9ff6bb47..f9ff6b02 100644 --- a/python/functions/cybersecurity/is_hex.md +++ b/python/functions/cybersecurity/is_hex.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [re] +params: + - name: s + desc: "string a validar como hexadecimal" +output: "booleano indicando si el string es hexadecimal valido con o sin prefijo 0x (minimo 2 caracteres)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/jaccard_similarity.md b/python/functions/cybersecurity/jaccard_similarity.md index 0a6b0d66..cb5a8a59 100644 --- a/python/functions/cybersecurity/jaccard_similarity.md +++ b/python/functions/cybersecurity/jaccard_similarity.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: a + desc: "primera lista para comparacion" + - name: b + desc: "segunda lista para comparacion" +output: "coeficiente float de similitud de Jaccard entre 0.0 y 1.0" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/levenshtein_distance.md b/python/functions/cybersecurity/levenshtein_distance.md index efbb6845..32a6c4ce 100644 --- a/python/functions/cybersecurity/levenshtein_distance.md +++ b/python/functions/cybersecurity/levenshtein_distance.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: a + desc: "primer string para comparacion de distancia de edicion" + - name: b + desc: "segundo string para comparacion de distancia de edicion" +output: "entero con la distancia de Levenshtein (minimo numero de ediciones)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/cybersecurity/normalize_url.md b/python/functions/cybersecurity/normalize_url.md index 1e73aa85..8ac8c81f 100644 --- a/python/functions/cybersecurity/normalize_url.md +++ b/python/functions/cybersecurity/normalize_url.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [urllib.parse] +params: + - name: raw_url + desc: "URL en formato string a normalizar" +output: "URL normalizada con host en minusculas, fragmentos eliminados y parametros ordenados" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/aggregate_by_group.md b/python/functions/datascience/aggregate_by_group.md index f3010863..26bebc19 100644 --- a/python/functions/datascience/aggregate_by_group.md +++ b/python/functions/datascience/aggregate_by_group.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: ["collections"] +params: + - name: rows + desc: "lista de dicts donde cada dict representa una fila (ej: [{'dept': 'eng', 'salary': 100}, ...])" + - name: group_by + desc: "lista de nombres de columnas para agrupar (ej: ['dept']). Pueden ser multiples columnas." + - name: aggs + desc: "dict de columna -> funcion de agregacion (ej: {'salary': 'mean'}). Soporta: sum, mean, count, min, max, first, last, collect" +output: "lista de dicts donde cada dict es un grupo con sus resultados de agregacion" tested: true tests: - "Group by una columna con sum" diff --git a/python/functions/datascience/autocorrelation.md b/python/functions/datascience/autocorrelation.md index 950a99c7..c21242e3 100644 --- a/python/functions/datascience/autocorrelation.md +++ b/python/functions/datascience/autocorrelation.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de valores numericos de una serie temporal (ej: precios diarios, cantidades de eventos)" + - name: lag + desc: "numero de periodos para desplazar (ej: 1 para autocorrelacion con el valor anterior). Debe ser positivo." +output: "coeficiente de autocorrelacion normalizado en rango [-1, 1]. 1.0=correlacion perfecta, 0.0=sin correlacion" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/build_entity_schema_prompt.md b/python/functions/datascience/build_entity_schema_prompt.md index 5fe10aa4..e8df7d2d 100644 --- a/python/functions/datascience/build_entity_schema_prompt.md +++ b/python/functions/datascience/build_entity_schema_prompt.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: entity_presets + desc: "lista de dicts describiendo tipos de entidad (ej: [{'type_ref': 'osint_person_go_cybersecurity', 'label': 'Person', 'metadata_fields': ['name', 'alias']}])" +output: "string con seccion del system prompt describiendo los entity types en formato legible para LLM" tested: true tests: - "lista con varios presets" diff --git a/python/functions/datascience/build_relation_schema_prompt.md b/python/functions/datascience/build_relation_schema_prompt.md index e76ffa85..caae7a20 100644 --- a/python/functions/datascience/build_relation_schema_prompt.md +++ b/python/functions/datascience/build_relation_schema_prompt.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: relation_types + desc: "lista de nombres de tipos de relacion permitidos (ej: ['funds', 'employs', 'owns', 'communicates_with'])" +output: "string con una linea describiendo los tipos de relacion permitidos en formato legible para LLM" tested: true tests: - "lista con varios tipos" diff --git a/python/functions/datascience/clip.md b/python/functions/datascience/clip.md index 8647851a..81eed454 100644 --- a/python/functions/datascience/clip.md +++ b/python/functions/datascience/clip.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de valores numericos a recortar" + - name: lo + desc: "limite inferior (minimo permitido). Valores menores seran reemplazados por lo." + - name: hi + desc: "limite superior (maximo permitido). Valores mayores seran reemplazados por hi." +output: "lista de valores con todos los elementos recortados al rango [lo, hi]" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/deduplicate_entities.md b/python/functions/datascience/deduplicate_entities.md index 50885104..47afe874 100644 --- a/python/functions/datascience/deduplicate_entities.md +++ b/python/functions/datascience/deduplicate_entities.md @@ -19,6 +19,14 @@ returns_optional: false error_type: "" imports: - uuid +params: + - name: candidates + desc: "lista de EntityCandidate a deduplicar. Cada uno tiene name, type_ref, confidence." + - name: name_threshold + desc: "umbral de similitud para fuzzy matching de nombres en rango [0, 1] (tipico: 0.85). Mayor = mas estricto." + - name: same_type_only + desc: "si True, solo mergea candidatos con el mismo type_ref. Si False, mergea por similitud ignoring tipo." +output: "DeduplicationResult con entidades mergeadas, mapas de resolucion de IDs (name_to_id) y log de merges realizados" tested: true tests: - "John Smith y Smith, John se mergean" diff --git a/python/functions/datascience/deduplicate_relations.md b/python/functions/datascience/deduplicate_relations.md index 71a6cc60..a42c0954 100644 --- a/python/functions/datascience/deduplicate_relations.md +++ b/python/functions/datascience/deduplicate_relations.md @@ -16,6 +16,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: relations + desc: "lista de RelationCandidate con from_name, to_name, relation_type, description, confidence" + - name: entity_id_map + desc: "dict producido por deduplicate_entities mapando nombres mergeados a IDs canonicos (ej: {'john smith': 'entity_001'})" +output: "lista de RelationCandidate deduplicadas, con from_id y to_id resueltos al entity_id_map, sin self-loops" tested: true tests: - "dos relaciones identicas se colapsan en una" diff --git a/python/functions/datascience/detect_drift.md b/python/functions/datascience/detect_drift.md index 384bae78..6a5126b7 100644 --- a/python/functions/datascience/detect_drift.md +++ b/python/functions/datascience/detect_drift.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: history + desc: "lista de dicts con metricas historicas (ej: [{'records_out': 100, 'duration_ms': 500}, ...])" + - name: current + desc: "dict con metricas actuales a comparar (ej: {'records_out': 50, 'duration_ms': 2000})" + - name: fields + desc: "lista de nombres de campos a monitorizar en current vs history (ej: ['records_out', 'duration_ms'])" + - name: threshold + desc: "umbral de z-score para declarar drift (tipico: 2.0-3.0). Mayor = menos sensible." +output: "lista de dicts con {field, current, mean, std, z_score, drifted} para cada campo monitoreado" tested: true tests: - "campo con drift claro (z > threshold)" diff --git a/python/functions/datascience/detect_outliers.md b/python/functions/datascience/detect_outliers.md index adff14d0..4b8127d6 100644 --- a/python/functions/datascience/detect_outliers.md +++ b/python/functions/datascience/detect_outliers.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: data + desc: "lista de valores numericos para detectar outliers" + - name: threshold + desc: "umbral de z-score absoluto (tipico: 2.0 para 95% confianza, 3.0 para 99%). Mayor = menos sensible." +output: "lista de booleanos paralela a data, True donde |z-score| > threshold" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/diff_entities.md b/python/functions/datascience/diff_entities.md index 75f7cf44..ec44c68f 100644 --- a/python/functions/datascience/diff_entities.md +++ b/python/functions/datascience/diff_entities.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: before + desc: "lista de dicts con entities antes de cambios (ej: [{'id': '1', 'name': 'Alice', 'status': 'active'}, ...])" + - name: after + desc: "lista de dicts con entities despues de cambios, misma estructura que before" + - name: key + desc: "nombre del campo que identifica cada entity (tipico: 'id'). Debe existir en todas las entities." + - name: ignore_fields + desc: "lista opcional de campos a ignorar en la comparacion (ej: ['created_at', 'updated_at'])" + - name: compare_fields + desc: "lista opcional de campos SOLO a comparar (si se da, tiene prioridad sobre ignore_fields)" +output: "dict con {added, removed, modified, unchanged, summary} describiendo los cambios campo a campo" tested: true tests: - "entity añadida" diff --git a/python/functions/datascience/diff_relations.md b/python/functions/datascience/diff_relations.md index dafa8f02..f7286739 100644 --- a/python/functions/datascience/diff_relations.md +++ b/python/functions/datascience/diff_relations.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: before + desc: "lista de dicts con relaciones antes (ej: [{'source_id': 'A', 'target_id': 'B', 'relation_type': 'knows', 'weight': 1.0}, ...])" + - name: after + desc: "lista de dicts con relaciones despues, misma estructura que before" + - name: key + desc: "tupla de 3 nombres de campo que forman la identidad de una relacion (defecto: ('source_id', 'target_id', 'relation_type'))" + - name: ignore_fields + desc: "lista opcional de campos a ignorar en comparacion (ej: ['timestamp'])" + - name: compare_fields + desc: "lista opcional de campos SOLO a comparar (si se da, prioridad sobre ignore_fields)" +output: "dict con {added, removed, modified, unchanged} describiendo cambios en relaciones" tested: true tests: - "relacion añadida" diff --git a/python/functions/datascience/estimate_hawkes.md b/python/functions/datascience/estimate_hawkes.md index dc23eccf..55d9ca7a 100644 --- a/python/functions/datascience/estimate_hawkes.md +++ b/python/functions/datascience/estimate_hawkes.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [numpy, scipy] +params: + - name: arrivals + desc: "lista de conteos de eventos por periodo (ej: [0, 1, 3, 2, 0, 1, ...] eventos por tick). Reflect actividad temporal." + - name: max_lag + desc: "numero maximo de lags para calcular autocorrelacion (tipico: 30). Mayor = mas precision pero mas ruido." +output: "dict con {alpha, beta, branching_ratio, acf} estimados parametros del proceso Hawkes" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/estimate_pareto_alpha.md b/python/functions/datascience/estimate_pareto_alpha.md index af16ae87..8b9819df 100644 --- a/python/functions/datascience/estimate_pareto_alpha.md +++ b/python/functions/datascience/estimate_pareto_alpha.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [numpy] +params: + - name: values + desc: "lista de valores numericos positivos donde se sospecha cola pesada (ej: tamanios de ordenes, ingresos). Debe haber >10 valores." + - name: x_min_percentile + desc: "percentil a partir del cual considerar la cola (tipico: 90.0 para considerar el 10% superior)" +output: "dict con {alpha, x_min, n_tail} donde alpha es el exponente estimado (menor = cola mas pesada)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/extract_entities_llm.md b/python/functions/datascience/extract_entities_llm.md index 7c8f9c98..f9701d64 100644 --- a/python/functions/datascience/extract_entities_llm.md +++ b/python/functions/datascience/extract_entities_llm.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [warnings, typing.Callable] +params: + - name: text + desc: "texto fuente para extraccion (ej: documento, parrafo, chunk de OSINT). Puede contener multiples entidades." + - name: entity_schema + desc: "lista de dicts describiendo tipos validos (ej: [{'type_ref': 'osint_person_go_cybersecurity', 'label': 'Person'}])" + - name: llm_chat_json + desc: "callable que toma list[dict] con messages OpenAI-format y retorna dict con clave 'entities'. Inyeccion de dependencia del LLM." + - name: language_instruction + desc: "instruccion de lenguaje para el LLM (defecto: 'Respond in English.'). Ej: 'Responde en Español.'" +output: "lista de EntityCandidate extraidas, cada una con name, type_ref, confidence, atributos" tested: true tests: - "texto con entidades claras retorna EntityCandidate" diff --git a/python/functions/datascience/extract_relations_llm.md b/python/functions/datascience/extract_relations_llm.md index 83a4b803..9cd2d13e 100644 --- a/python/functions/datascience/extract_relations_llm.md +++ b/python/functions/datascience/extract_relations_llm.md @@ -17,6 +17,18 @@ returns: returns_optional: false error_type: "error_go_core" imports: [logging, sys, os, typing] +params: + - name: text + desc: "texto fuente para extraccion de relaciones entre entidades (ej: documento OSINT, parrafo descriptivo)" + - name: entities + desc: "lista de EntityCandidate ya extraidas (ej: output de extract_entities_llm). Valida que las relaciones refieran entidades reales." + - name: relation_types + desc: "lista de nombres de relacion permitidos (ej: ['employs', 'funds', 'owns']). No permitidas se remapean a 'related_to'." + - name: llm_chat_json + desc: "callable que toma list[dict] mensajes y retorna dict con clave 'relations'. Inyeccion de dependencia del LLM." + - name: language_instruction + desc: "instruccion de lenguaje para el LLM (defecto: 'Respond in English.')" +output: "lista de RelationCandidate con from_name, to_name, relation_type, description, confidence" tested: true tests: - "texto con dos entidades relacionadas" diff --git a/python/functions/datascience/histogram.md b/python/functions/datascience/histogram.md index bc6c50d4..d23a6c0a 100644 --- a/python/functions/datascience/histogram.md +++ b/python/functions/datascience/histogram.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de valores numericos para agrupar en buckets" + - name: buckets + desc: "numero de buckets a crear (ej: 5, 10, 100). Mayor = histograma mas detallado." +output: "lista de conteos con len(resultado) == buckets, cada elemento es el numero de valores en ese bucket" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/hotness_score.md b/python/functions/datascience/hotness_score.md index 8c94f314..51216c6f 100644 --- a/python/functions/datascience/hotness_score.md +++ b/python/functions/datascience/hotness_score.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "" imports: [math, datetime] +params: + - name: active_count + desc: "numero de accesos/activaciones de un item (ej: 150 views). Mayor count = score mas alto." + - name: updated_at + desc: "datetime de la ultima actualizacion. Si None, retorna siempre 0.0." + - name: now + desc: "datetime actual (defecto: ahora). Usar parametro explicitamente para tests deterministas." + - name: half_life_days + desc: "vida media para el decaimiento exponencial (defecto: 7.0 dias). Menor = decaimiento mas rapido." +output: "hotness score en rango [0, 1]. Combina frecuencia (active_count) y recencia (dias desde updated_at)." tested: true tests: - "active_count=0, updated_at reciente" diff --git a/python/functions/datascience/impute.md b/python/functions/datascience/impute.md index ddb9e7ae..2499e04d 100644 --- a/python/functions/datascience/impute.md +++ b/python/functions/datascience/impute.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: data + desc: "lista de valores numericos con posibles None o NaN que requieren imputacion" +output: "lista de misma longitud con None y NaN reemplazados por la media de los valores validos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/linspace.md b/python/functions/datascience/linspace.md index ba528903..6fb30c41 100644 --- a/python/functions/datascience/linspace.md +++ b/python/functions/datascience/linspace.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: start + desc: "valor inicial del rango (ej: 0.0)" + - name: stop + desc: "valor final del rango, incluido (ej: 1.0)" + - name: num + desc: "numero de puntos a generar (ej: 5). Si num=1, retorna [start]." +output: "lista de num valores equiespaciados entre start y stop (ambos inclusive)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/melt.md b/python/functions/datascience/melt.md index 5e3961a6..8117909c 100644 --- a/python/functions/datascience/melt.md +++ b/python/functions/datascience/melt.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: rows + desc: "lista de dicts en formato ancho (ej: [{'region': 'US', 'q1': 10, 'q2': 20}])" + - name: id_vars + desc: "lista de columnas a mantener como identificadores (ej: ['region']). No se derriten." + - name: value_vars + desc: "lista de columnas a derretir (ej: ['q1', 'q2']). Si None, derrite todas excepto id_vars." + - name: var_name + desc: "nombre de la columna que contendra los nombres de columnas derretidas (defecto: 'variable')" + - name: value_name + desc: "nombre de la columna que contendra los valores (defecto: 'value')" +output: "lista de dicts en formato largo, donde cada id_var + value_var genera una fila" tested: true tests: - "Melt basico" diff --git a/python/functions/datascience/merge_graphs.md b/python/functions/datascience/merge_graphs.md index 0bca1a69..1d544faf 100644 --- a/python/functions/datascience/merge_graphs.md +++ b/python/functions/datascience/merge_graphs.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [sys, os] +params: + - name: graphs + desc: "lista de grafos, cada uno con estructura {entities: [...], relations: [...]}" + - name: entity_key + desc: "campo de entity que se usa para fuzzy matching (defecto: 'name'). Determina similitud." + - name: similarity_threshold + desc: "umbral de similitud Levenshtein normalizado [0, 1] para mergear (tipico: 0.85). Mayor = mas estricto." +output: "dict con estructura {entities: [...], relations: [...], merge_log: [...]}, grafo mergeado y deduplicado" tested: true tests: - "dos grafos con entity duplicada → merge" diff --git a/python/functions/datascience/min_max_scale.md b/python/functions/datascience/min_max_scale.md index ba4e2247..0dabcace 100644 --- a/python/functions/datascience/min_max_scale.md +++ b/python/functions/datascience/min_max_scale.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de valores numericos a normalizar en el rango [0, 1]" +output: "lista de valores escalados al rango [0, 1] usando min-max normalization. Min->0, Max->1, valores intermedios proporcionales." tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/ops_to_rdf_triples.md b/python/functions/datascience/ops_to_rdf_triples.md index 72f0466f..ae4ed9f3 100644 --- a/python/functions/datascience/ops_to_rdf_triples.md +++ b/python/functions/datascience/ops_to_rdf_triples.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [json, sqlite3] +params: + - name: db_path + desc: "path a operations.db (ej: 'apps/my_analysis/operations.db')" + - name: namespace + desc: "prefijo URI para formar IRIs (defecto: 'http://osint.local/'). Ej: 'http://mi-empresa.com/osint/'" +output: "lista de tuplas (subject, predicate, object) en formato RDF. Subjects y objetos son URIs con namespace, predicados son literales." tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/ops_to_sigma_json.md b/python/functions/datascience/ops_to_sigma_json.md index 03879c49..92572882 100644 --- a/python/functions/datascience/ops_to_sigma_json.md +++ b/python/functions/datascience/ops_to_sigma_json.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [json, sqlite3] +params: + - name: db_path + desc: "path a operations.db (ej: 'apps/my_analysis/operations.db')" +output: "dict con estructura {nodes: [...], edges: [...]} compatible con sigma.js/graphology. Nodos tienen id, label, color, size, type." tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/pearson.md b/python/functions/datascience/pearson.md index de3b0bf8..a30bba1c 100644 --- a/python/functions/datascience/pearson.md +++ b/python/functions/datascience/pearson.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: xs + desc: "lista de valores numericos de la primera variable (ej: [1, 2, 3])" + - name: ys + desc: "lista de valores numericos de la segunda variable, misma longitud que xs" +output: "coeficiente de correlacion de Pearson en rango [-1, 1]. 1.0=correlacion perfecta positiva, -1.0=negativa, 0.0=sin correlacion" tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/pivot.md b/python/functions/datascience/pivot.md index 06edb060..527be84a 100644 --- a/python/functions/datascience/pivot.md +++ b/python/functions/datascience/pivot.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: ["collections"] +params: + - name: rows + desc: "lista de dicts en formato largo (ej: [{'region': 'US', 'product': 'A', 'sales': 10}, ...])" + - name: index + desc: "columna que sera el indice de filas en la tabla pivote (ej: 'region'). Valores unicos -> filas." + - name: columns + desc: "columna cuyos valores unicos se expanden como nuevas columnas (ej: 'product'). Valores unicos -> columnas." + - name: values + desc: "columna con los valores a agregar en las celdas (ej: 'sales')" + - name: agg + desc: "funcion de agregacion si hay multiples valores por celda (defecto: 'sum'). Otras: count, mean, min, max, first, last." +output: "lista de dicts en formato ancho, donde el indice y las columnas expandidas forman el schema" tested: true tests: - "Pivot basico con sum" diff --git a/python/functions/datascience/render_sigma_html.md b/python/functions/datascience/render_sigma_html.md index c8d47679..b381fcea 100644 --- a/python/functions/datascience/render_sigma_html.md +++ b/python/functions/datascience/render_sigma_html.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [json, os] +params: + - name: graph_data + desc: "dict en formato sigma.js con {nodes: [...], edges: [...]} (ej: output de ops_to_sigma_json_py_datascience)" + - name: output_path + desc: "path absoluto donde guardar el HTML (ej: '/tmp/osint_graph.html'). Directorio debe existir." + - name: title + desc: "titulo del grafo que aparece en la visualizacion (defecto: 'OSINT Graph')" +output: "string con el path absoluto del archivo HTML escrito. Archivo es standalone y abre en cualquier navegador." tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/rolling_window.md b/python/functions/datascience/rolling_window.md index 39f5d0cf..62fa41cc 100644 --- a/python/functions/datascience/rolling_window.md +++ b/python/functions/datascience/rolling_window.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: xs + desc: "lista de valores para crear ventanas (ej: [1, 2, 3, 4, 5])" + - name: size + desc: "tamanio de cada ventana (ej: 3). Debe ser positivo y <= len(xs)." +output: "lista de listas, cada una una ventana de tamanio size. Resultado tiene len(xs) - size + 1 ventanas." tested: false tests: [] test_file_path: "" diff --git a/python/functions/datascience/standardize.md b/python/functions/datascience/standardize.md index 5ae7928b..2476ddce 100644 --- a/python/functions/datascience/standardize.md +++ b/python/functions/datascience/standardize.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: data + desc: "lista de valores numericos a estandarizar" +output: "lista de misma longitud con datos transformados a media=0 y desviacion estandar=1 (z-scores)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_encode.md b/python/functions/embedding/embedding_encode.md index ac363e4a..5b1e4c78 100644 --- a/python/functions/embedding/embedding_encode.md +++ b/python/functions/embedding/embedding_encode.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [sentence_transformers] +params: + - name: model + desc: "instancia SentenceTransformer cargada con embedding_load_model" + - name: texts + desc: "lista de strings a codificar como embeddings" + - name: mode + desc: "contexto semántico: 'document' para indexación, 'query' para búsqueda (aplica prefijos e5)" +output: "list[list[float]]: embeddings normalizados (L2=1), dimensión 384 para e5-small" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_load_model.md b/python/functions/embedding/embedding_load_model.md index 8cc8ea22..a7ee0597 100644 --- a/python/functions/embedding/embedding_load_model.md +++ b/python/functions/embedding/embedding_load_model.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [sentence_transformers] +params: + - name: path + desc: "ruta al directorio donde está guardado el modelo (ej: .local/models/e5-small)" +output: "SentenceTransformer: instancia lista para embedding_encode" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_save_model.md b/python/functions/embedding/embedding_save_model.md index 7241fdc7..3eceac6b 100644 --- a/python/functions/embedding/embedding_save_model.md +++ b/python/functions/embedding/embedding_save_model.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [sentence_transformers] +params: + - name: model_id + desc: "identificador de modelo en HuggingFace (ej: intfloat/multilingual-e5-small)" + - name: path + desc: "ruta local donde guardar el modelo descargado" +output: "string: ruta absoluta donde se guardó el modelo" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_search_sqlvec.md b/python/functions/embedding/embedding_search_sqlvec.md index a37d602a..dd75eedd 100644 --- a/python/functions/embedding/embedding_search_sqlvec.md +++ b/python/functions/embedding/embedding_search_sqlvec.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [sqlite3, sqlite_vec, numpy] +params: + - name: db_path + desc: "ruta a la base de datos SQLite con tabla virtual sqlite-vec" + - name: table + desc: "nombre de la tabla virtual donde buscar vectores" + - name: query_embedding + desc: "vector de embedding (list[float]) a usar como query" + - name: k + desc: "cantidad de vecinos más cercanos a retornar" +output: "list[dict]: resultados ordenados con 'rowid' e 'distance' (coseno, menor=más similar)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_search_usearch.md b/python/functions/embedding/embedding_search_usearch.md index a31e93a8..9eb2541d 100644 --- a/python/functions/embedding/embedding_search_usearch.md +++ b/python/functions/embedding/embedding_search_usearch.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [usearch, numpy] +params: + - name: path + desc: "ruta al archivo de índice USearch persistido" + - name: query_embedding + desc: "vector de embedding (list[float]) a usar como query" + - name: k + desc: "cantidad de vecinos aproximados a retornar" + - name: dim + desc: "dimensión del espacio de embeddings (por defecto 384 para e5-small)" +output: "list[dict]: resultados con 'key' y 'distance' (inner product, mayor=más similar)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_store_sqlvec.md b/python/functions/embedding/embedding_store_sqlvec.md index d9b99b3c..ee114548 100644 --- a/python/functions/embedding/embedding_store_sqlvec.md +++ b/python/functions/embedding/embedding_store_sqlvec.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [sqlite3, sqlite_vec, numpy] +params: + - name: db_path + desc: "ruta a la base de datos SQLite (se crea si no existe)" + - name: table + desc: "nombre de la tabla virtual sqlite-vec a crear" + - name: ids + desc: "lista de identificadores enteros para los embeddings" + - name: embeddings + desc: "lista de vectores (list[list[float]]) a almacenar" + - name: dim + desc: "dimensión de los vectores (por defecto 384 para e5-small)" +output: "int: cantidad de vectores insertados" tested: false tests: [] test_file_path: "" diff --git a/python/functions/embedding/embedding_store_usearch.md b/python/functions/embedding/embedding_store_usearch.md index a939b025..17554499 100644 --- a/python/functions/embedding/embedding_store_usearch.md +++ b/python/functions/embedding/embedding_store_usearch.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [usearch, numpy] +params: + - name: path + desc: "ruta donde guardar el archivo de índice USearch" + - name: ids + desc: "lista de identificadores enteros para los embeddings" + - name: embeddings + desc: "lista de vectores (list[list[float]]) a indexar" + - name: dim + desc: "dimensión de los vectores (por defecto 384 para e5-small)" +output: "int: cantidad de vectores indexados" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/annualized_volatility.md b/python/functions/finance/annualized_volatility.md index 5c40a757..839c3d33 100644 --- a/python/functions/finance/annualized_volatility.md +++ b/python/functions/finance/annualized_volatility.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: returns + desc: "lista de retornos diarios o periodicos (ej: [0.01, -0.005, 0.008]). Valores en rango [-1, 1] tipicamente." + - name: periods_per_year + desc: "numero de periodos por año (252 para datos diarios, 12 para mensuales, 52 para semanales)" +output: "volatilidad anualizada en forma decimal (ej: 0.15 para 15% de volatilidad anualizada)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/avellaneda_stoikov_quotes.md b/python/functions/finance/avellaneda_stoikov_quotes.md index 8add2c9e..4d1c449b 100644 --- a/python/functions/finance/avellaneda_stoikov_quotes.md +++ b/python/functions/finance/avellaneda_stoikov_quotes.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: mid_price + desc: "precio medio actual del activo subyacente (punto de referencia para la cotizacion)" + - name: inventory + desc: "inventario actual neto del market maker (cantidad de activos tenidos, positivo=long)" + - name: gamma + desc: "coeficiente de aversion al riesgo de inventario (rango tipico: 0.01-1.0). Mayor gamma = spreads mas amplios." + - name: sigma + desc: "volatilidad estimada del activo en la ventana de tiempo actual (ej: 0.02 para 2% diario)" + - name: spread_base + desc: "spread base en unidades de precio para el nivel 0 (ej: 0.5 para +/-0.5 alrededor del mid_price)" + - name: n_levels + desc: "numero de niveles de cotizacion a generar (tipico: 3-5). Cada nivel se ensancha a partir del anterior." + - name: qty_base + desc: "cantidad base de unidades por nivel (se reduce en cada nivel: qty_base, qty_base*0.5, qty_base*0.25, ...)" +output: "lista de ordenes con campos {'side': 'buy'|'sell', 'price': float, 'qty': float}" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/bollinger_bands.md b/python/functions/finance/bollinger_bands.md index 502e9f96..3322c8f1 100644 --- a/python/functions/finance/bollinger_bands.md +++ b/python/functions/finance/bollinger_bands.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de precios o valores (ej: precios de cierre diarios)" + - name: period + desc: "tamanio de la ventana movil en numero de periodos (tipico: 5, 10, 20). Mayor periodo = bandas mas suave." + - name: num_std + desc: "numero de desviaciones estandar para las bandas (tipico: 2.0 para 95% de los datos en rango)" +output: "tupla (upper, middle, lower) donde cada elemento es una lista de floats con len(data) - period + 1 elementos" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/ema.md b/python/functions/finance/ema.md index ee192902..fb9b729c 100644 --- a/python/functions/finance/ema.md +++ b/python/functions/finance/ema.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de precios o valores a suavizar (ej: precios de cierre diarios)" + - name: period + desc: "numero de periodos para el calculo de EMA (tipico: 5, 12, 26, 50, 200). Mayor periodo = mas suavizado." +output: "lista de valores EMA con len(data) - period + 1 elementos (mas corta que la entrada)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/generate_gbm_prices.md b/python/functions/finance/generate_gbm_prices.md index 5427ac3f..ac1ae803 100644 --- a/python/functions/finance/generate_gbm_prices.md +++ b/python/functions/finance/generate_gbm_prices.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "" imports: [numpy] +params: + - name: initial_price + desc: "precio inicial S(0) del activo subyacente (ej: 100.0)" + - name: n_ticks + desc: "numero de ticks/pasos en la simulacion (ej: 1000). Determina len(resultado)." + - name: sigma + desc: "volatilidad anualizada (ej: 0.02 para 2% por tick). Controlador clave del ruido." + - name: mu + desc: "drift anualizado (ej: 0.0 para random walk, 0.05 para uptrend). Retorno esperado por tick." + - name: jump_intensity + desc: "probabilidad de salto por tick en rango [0, 1] (ej: 0.01 para 1% por tick). 0.0 = GBM puro." + - name: jump_size_std + desc: "desviacion estandar del tamanio de los saltos (ej: 0.05 para jumps de ~5%). Normal(0, jump_size_std)." + - name: seed + desc: "semilla para reproducibilidad deterministica (ej: 42)" +output: "lista de precios con len(resultado) == n_ticks. resultado[0] == initial_price." tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/generate_taker_order.md b/python/functions/finance/generate_taker_order.md index 0280a503..997a40cb 100644 --- a/python/functions/finance/generate_taker_order.md +++ b/python/functions/finance/generate_taker_order.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: [numpy] +params: + - name: alpha + desc: "exponente de la distribucion Pareto (rango tipico: 1.5-3.0). Menor alpha = colas mas pesadas y ordenes mas grandes." + - name: size_min + desc: "tamanio minimo de orden (ej: 1.0)" + - name: size_max + desc: "tamanio maximo de orden (clipping superior, ej: 100.0)" + - name: buy_prob + desc: "probabilidad de que la orden sea BUY en rango [0, 1] (ej: 0.5 para igual BUY/SELL)" + - name: seed + desc: "semilla para reproducibilidad (int o None). Si None, no deterministica." +output: "dict con campos {'side': 'buy'|'sell', 'qty': float redondeado a 1 decimal}" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/hawkes_intensity.md b/python/functions/finance/hawkes_intensity.md index 5c7c6717..41f69e6d 100644 --- a/python/functions/finance/hawkes_intensity.md +++ b/python/functions/finance/hawkes_intensity.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "" imports: [numpy] +params: + - name: base_rate + desc: "intensidad de linea base lambda(0) del proceso Hawkes (ej: 1.0 orden/minuto). Tasa base de eventos sin influencia." + - name: hawkes_alpha + desc: "magnitud del salto de intensidad por evento (rango: 0.0-1.0). Mayor alpha = mayor excitacion por eventos pasados." + - name: hawkes_beta + desc: "velocidad de decaimiento de la memoria (rango tipico: 0.5-3.0). Mayor beta = decaimiento mas rapido, memoria mas corta." + - name: event_times + desc: "lista de timestamps de eventos pasados (ej: [0.5, 1.2, 1.8]). Milisegundos o segundos segun escala." + - name: current_time + desc: "timestamp actual en la misma escala que event_times (ej: 2.5)" +output: "intensidad lambda(current_time) en rango [0.0, infinito). Valores > base_rate indican excitacion por eventos recientes." tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/log_return.md b/python/functions/finance/log_return.md index 75ab1897..eeaa023e 100644 --- a/python/functions/finance/log_return.md +++ b/python/functions/finance/log_return.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: price_start + desc: "precio inicial (ej: 100.0). Debe ser > 0." + - name: price_end + desc: "precio final (ej: 110.0). Debe ser > 0." +output: "retorno logaritmico en forma decimal (ej: 0.0953 para aprox +9.53%). Aditivo en el tiempo." tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/max_drawdown.md b/python/functions/finance/max_drawdown.md index 63a42294..5ffc0446 100644 --- a/python/functions/finance/max_drawdown.md +++ b/python/functions/finance/max_drawdown.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: values + desc: "lista de valores acumulativos (ej: valores de cartera a lo largo del tiempo, precios, o equity curve)" +output: "tupla (max_dd, start_idx, end_idx) donde max_dd es fraccion (0.0-1.0), start_idx es indice del pico, end_idx es indice del valle" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/rsi.md b/python/functions/finance/rsi.md index 4a417831..8ed8df11 100644 --- a/python/functions/finance/rsi.md +++ b/python/functions/finance/rsi.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de precios (ej: precios de cierre diarios). Debe tener al menos period+1 elementos." + - name: period + desc: "numero de periodos para el calculo de RSI (tipico: 14). Mayor periodo = menos volatil, menos sensible." +output: "lista de valores RSI en rango [0, 100]. Valores >70 indican sobrecompra, <30 sobreventa." tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/sharpe_ratio.md b/python/functions/finance/sharpe_ratio.md index e411fba4..b7b02c65 100644 --- a/python/functions/finance/sharpe_ratio.md +++ b/python/functions/finance/sharpe_ratio.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "" imports: [math] +params: + - name: returns + desc: "lista de retornos en la misma periodicidad (ej: retornos diarios [0.01, -0.005, ...])." + - name: risk_free_rate + desc: "tasa de interes libre de riesgo anualizada en forma decimal (ej: 0.02 para 2% anual)." + - name: periods_per_year + desc: "numero de periodos por año (252 para diarios, 12 para mensuales, 52 para semanales)." +output: "Sharpe ratio anualizado en forma decimal (ej: 1.5 indica 1.5x retorno por unidad de riesgo). Mayor es mejor." tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/sma.md b/python/functions/finance/sma.md index 9bc76159..d08ed839 100644 --- a/python/functions/finance/sma.md +++ b/python/functions/finance/sma.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: data + desc: "lista de precios o valores a suavizar (ej: precios de cierre diarios)" + - name: period + desc: "tamanio de la ventana movil en numero de periodos (tipico: 5, 10, 20, 50, 200). Mayor periodo = mas suavizado." +output: "lista de valores SMA con len(data) - period + 1 elementos (mas corta que la entrada)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/finance/vwap.md b/python/functions/finance/vwap.md index f8ef0656..fa360c4f 100644 --- a/python/functions/finance/vwap.md +++ b/python/functions/finance/vwap.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "" imports: [] +params: + - name: prices + desc: "lista de precios de transaccion (ej: [100.0, 101.0, 102.0]). Debe tener misma longitud que volumes." + - name: volumes + desc: "lista de volumenes de transaccion (ej: [1000, 1500, 1200]). Debe tener misma longitud que prices." +output: "VWAP en forma decimal (ej: 101.0888). Precio promedio ponderado por volumen acumulado." tested: false tests: [] test_file_path: "" diff --git a/python/functions/infra/cache_to_file.md b/python/functions/infra/cache_to_file.md index 5b5f53af..e74c0105 100644 --- a/python/functions/infra/cache_to_file.md +++ b/python/functions/infra/cache_to_file.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["os", "json", "hashlib", "time", "threading"] +params: + - name: cache_dir + desc: "directorio raiz donde se almacenan los archivos de cache" + - name: namespace + desc: "namespace logico dentro de cache_dir para aislar diferentes cachés" +output: "instancia FileCache con metodos set, get, get_or_set, clear y stats" tested: true tests: - "Set y get basico" diff --git a/python/functions/infra/cache_to_sqlite.md b/python/functions/infra/cache_to_sqlite.md index 14bee2b8..04019d0c 100644 --- a/python/functions/infra/cache_to_sqlite.md +++ b/python/functions/infra/cache_to_sqlite.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["sqlite3", "json", "time", "threading"] +params: + - name: db_path + desc: "ruta al archivo SQLite de cache" + - name: namespace + desc: "namespace logico dentro de la BD para aislar cachés" +output: "instancia CacheStore con metodos set, get, get_or_set, clear y stats" tested: true tests: - "Set y get basico" diff --git a/python/functions/infra/get_logger.md b/python/functions/infra/get_logger.md index 7bc6c41f..22734bd1 100644 --- a/python/functions/infra/get_logger.md +++ b/python/functions/infra/get_logger.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [logging] +params: + - name: name + desc: "nombre del logger a obtener o crear" +output: "instancia logging.Logger configurada con handlers" tested: true tests: - "get_logger retorna logger configurado" diff --git a/python/functions/infra/http_download_file.md b/python/functions/infra/http_download_file.md index a3bad352..60e73d09 100644 --- a/python/functions/infra/http_download_file.md +++ b/python/functions/infra/http_download_file.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["os", "urllib.error", "urllib.request"] +params: + - name: url + desc: "URL del archivo a descargar" + - name: dest_path + desc: "ruta destino donde guardar el archivo descargado" + - name: headers + desc: "diccionario opcional de headers HTTP personalizados" + - name: timeout + desc: "timeout en segundos para la descarga (defecto 120.0)" + - name: chunk_size + desc: "tamaño en bytes de cada chunk descargado (defecto 8192)" +output: "diccionario con keys path, size_bytes y content_type" tested: true tests: - "mock de descarga con contenido binario" diff --git a/python/functions/infra/http_get_json.md b/python/functions/infra/http_get_json.md index 216eff94..d4b521b5 100644 --- a/python/functions/infra/http_get_json.md +++ b/python/functions/infra/http_get_json.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["json", "urllib.error", "urllib.parse", "urllib.request"] +params: + - name: url + desc: "URL base para la solicitud GET" + - name: headers + desc: "diccionario opcional de headers HTTP personalizados" + - name: params + desc: "diccionario opcional de parametros de query" + - name: timeout + desc: "timeout en segundos para la solicitud (defecto 30.0)" +output: "diccionario con la respuesta JSON parseada" tested: true tests: - "mock de respuesta 200 con JSON" diff --git a/python/functions/infra/http_post_json.md b/python/functions/infra/http_post_json.md index 81267656..c5bf0a5f 100644 --- a/python/functions/infra/http_post_json.md +++ b/python/functions/infra/http_post_json.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: ["json", "urllib.error", "urllib.request"] +params: + - name: url + desc: "URL destino para la solicitud POST" + - name: body + desc: "diccionario a serializar como JSON en el body" + - name: headers + desc: "diccionario opcional de headers HTTP personalizados" + - name: timeout + desc: "timeout en segundos para la solicitud (defecto 30.0)" +output: "diccionario con la respuesta JSON parseada" tested: true tests: - "mock de POST con body serializado correctamente" diff --git a/python/functions/infra/normalize_zip_filenames.md b/python/functions/infra/normalize_zip_filenames.md index 7b308b38..cedd701d 100644 --- a/python/functions/infra/normalize_zip_filenames.md +++ b/python/functions/infra/normalize_zip_filenames.md @@ -14,6 +14,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [zipfile] +params: + - name: zipf + desc: "instancia zipfile.ZipFile abierta para reparacion de nombres UTF-8" +output: "None (modifica in-place los ZipInfo del objeto ZipFile)" tested: true tests: - "ZIP con nombres UTF-8 correctos no se modifican" diff --git a/python/functions/infra/read_file_with_encoding.md b/python/functions/infra/read_file_with_encoding.md index 7cf2ec2e..b8ad5268 100644 --- a/python/functions/infra/read_file_with_encoding.md +++ b/python/functions/infra/read_file_with_encoding.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: path + desc: "ruta del archivo a leer" + - name: encodings + desc: "lista opcional de encodings a intentar en orden (defecto: ['utf-8', 'utf-8-sig', 'latin-1', 'cp1252'])" +output: "string con el contenido del archivo decodificado" tested: true tests: - "archivo utf-8 valido" diff --git a/python/functions/infra/safe_extract_zip.md b/python/functions/infra/safe_extract_zip.md index 44a1add2..56a5fadc 100644 --- a/python/functions/infra/safe_extract_zip.md +++ b/python/functions/infra/safe_extract_zip.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [os, zipfile, pathlib] +params: + - name: zip_path + desc: "ruta del archivo ZIP a extraer" + - name: dest_dir + desc: "directorio destino para la extraccion" +output: "None (extrae archivos al disco en dest_dir)" tested: true tests: - "ZIP normal extrae correctamente dentro del destino" diff --git a/python/functions/infra/scan_directory.md b/python/functions/infra/scan_directory.md index 5f7d6e86..e9f67787 100644 --- a/python/functions/infra/scan_directory.md +++ b/python/functions/infra/scan_directory.md @@ -14,6 +14,20 @@ returns: [directory_scan_result_py_infra] returns_optional: false error_type: "error_go_core" imports: [os, pathlib, fnmatch, sys, dataclasses] +params: + - name: root + desc: "directorio raiz a escanear" + - name: supported_extensions + desc: "conjunto opcional de extensiones soportadas (ej: {'.pdf', '.md'})" + - name: ignore_dirs + desc: "conjunto opcional de nombres de directorio a ignorar" + - name: include + desc: "patrones glob opcionales separados por coma para incluir archivos" + - name: exclude + desc: "patrones glob opcionales separados por coma para excluir archivos" + - name: strict + desc: "si True, lanza ValueError si hay archivos no soportados" +output: "instancia DirectoryScanResult con listas processable y unsupported de ClassifiedFile" tested: true tests: - "directorio con mezcla de archivos" diff --git a/python/functions/infra/setup_logger.md b/python/functions/infra/setup_logger.md index 3c91514d..1db827ed 100644 --- a/python/functions/infra/setup_logger.md +++ b/python/functions/infra/setup_logger.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [logging, logging.handlers, os, sys, datetime] +params: + - name: name + desc: "nombre del logger a configurar" + - name: log_dir + desc: "directorio donde guardar archivos de log (defecto 'logs')" + - name: level + desc: "nivel de logging (defecto logging.DEBUG)" +output: "instancia logging.Logger configurada con handlers de archivo y consola" tested: true tests: - "logger se crea con 2 handlers" diff --git a/python/functions/metabase/metabase_add_database.md b/python/functions/metabase/metabase_add_database.md index 4c5e77be..cf3272d0 100644 --- a/python/functions/metabase/metabase_add_database.md +++ b/python/functions/metabase/metabase_add_database.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: name + desc: "nombre descriptivo de la base de datos en Metabase" + - name: engine + desc: "tipo de base de datos (sqlite, postgres, mysql, etc.)" + - name: details + desc: "dict con parámetros de conexión específicos del engine" +output: "dict: objeto database creado con id asignado por Metabase" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_auth.md b/python/functions/metabase/metabase_auth.md index 2b3ef8f9..7797cd01 100644 --- a/python/functions/metabase/metabase_auth.md +++ b/python/functions/metabase/metabase_auth.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: base_url + desc: "URL base de Metabase (ej: http://localhost:3000)" + - name: email + desc: "correo del usuario para autenticar" + - name: password + desc: "contraseña del usuario" +output: "MetabaseClient: cliente autenticado con token válido por 14 días" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_create_card.md b/python/functions/metabase/metabase_create_card.md index c99fc347..2984ada5 100644 --- a/python/functions/metabase/metabase_create_card.md +++ b/python/functions/metabase/metabase_create_card.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: name + desc: "nombre descriptivo de la pregunta/card" + - name: dataset_query + desc: "dict con configuración de query (SQL nativa o MBQL)" + - name: display + desc: "tipo de visualización (table, scalar, bar, etc.)" + - name: collection_id + desc: "ID de colección donde guardar la card (0=root)" + - name: description + desc: "descripción opcional de la card" +output: "dict: objeto card creado con id y toda su configuración" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_create_dashboard.md b/python/functions/metabase/metabase_create_dashboard.md index d715227e..cf803e2d 100644 --- a/python/functions/metabase/metabase_create_dashboard.md +++ b/python/functions/metabase/metabase_create_dashboard.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: name + desc: "nombre del dashboard" + - name: description + desc: "descripción opcional del dashboard" + - name: collection_id + desc: "ID de colección donde guardar el dashboard (0=root)" +output: "dict: objeto dashboard vacío con id asignado" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_create_user.md b/python/functions/metabase/metabase_create_user.md index 688d0890..26643a9a 100644 --- a/python/functions/metabase/metabase_create_user.md +++ b/python/functions/metabase/metabase_create_user.md @@ -14,6 +14,20 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: first_name + desc: "nombre del usuario" + - name: last_name + desc: "apellido del usuario" + - name: email + desc: "correo único del usuario" + - name: password + desc: "contraseña (vacío envía invitación por email)" + - name: group_ids + desc: "lista de IDs de grupos a los que agregar el usuario" +output: "dict: objeto usuario creado con id y metadata" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_deactivate_user.md b/python/functions/metabase/metabase_deactivate_user.md index 21ccd678..7c724522 100644 --- a/python/functions/metabase/metabase_deactivate_user.md +++ b/python/functions/metabase/metabase_deactivate_user.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: user_id + desc: "ID del usuario a desactivar" +output: "None" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_delete_card.md b/python/functions/metabase/metabase_delete_card.md index eea33cf3..5432dfb3 100644 --- a/python/functions/metabase/metabase_delete_card.md +++ b/python/functions/metabase/metabase_delete_card.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: card_id + desc: "ID de la card a eliminar permanentemente" +output: "None" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_delete_dashboard.md b/python/functions/metabase/metabase_delete_dashboard.md index c4bedb14..5eaa004a 100644 --- a/python/functions/metabase/metabase_delete_dashboard.md +++ b/python/functions/metabase/metabase_delete_dashboard.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: dashboard_id + desc: "ID del dashboard a eliminar permanentemente" +output: "None" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_execute_card.md b/python/functions/metabase/metabase_execute_card.md index 0c2dbad7..22a1c5f3 100644 --- a/python/functions/metabase/metabase_execute_card.md +++ b/python/functions/metabase/metabase_execute_card.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: card_id + desc: "ID de la card guardada a ejecutar" + - name: parameters + desc: "lista de parámetros para la query (filtros dinámicos)" +output: "dict: resultados con status, row_count, running_time, data.columns, data.rows" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_execute_query.md b/python/functions/metabase/metabase_execute_query.md index 5480c36f..46e20dc9 100644 --- a/python/functions/metabase/metabase_execute_query.md +++ b/python/functions/metabase/metabase_execute_query.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: database_id + desc: "ID de la base de datos contra la que ejecutar la query" + - name: sql + desc: "sentencia SQL a ejecutar (sin guardar como card)" + - name: max_results + desc: "límite de filas a retornar (0=default 2000)" +output: "dict: resultados con status, row_count, running_time, data.columns, data.rows" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_get_card.md b/python/functions/metabase/metabase_get_card.md index f568546d..c2a1d9c6 100644 --- a/python/functions/metabase/metabase_get_card.md +++ b/python/functions/metabase/metabase_get_card.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: card_id + desc: "ID de la card a obtener" +output: "dict: objeto card completo con query, visualización y metadata" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_get_dashboard.md b/python/functions/metabase/metabase_get_dashboard.md index 073d21df..4c220ef8 100644 --- a/python/functions/metabase/metabase_get_dashboard.md +++ b/python/functions/metabase/metabase_get_dashboard.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: dashboard_id + desc: "ID del dashboard a obtener" +output: "dict: objeto dashboard completo con dashcards, tabs y parámetros" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_get_database.md b/python/functions/metabase/metabase_get_database.md index 0048a0aa..64efcdb8 100644 --- a/python/functions/metabase/metabase_get_database.md +++ b/python/functions/metabase/metabase_get_database.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: database_id + desc: "ID de la base de datos a obtener" +output: "dict: objeto database con id, name, engine, details, features y metadata" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_get_user.md b/python/functions/metabase/metabase_get_user.md index 8dcda611..cf263c39 100644 --- a/python/functions/metabase/metabase_get_user.md +++ b/python/functions/metabase/metabase_get_user.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: user_id + desc: "ID del usuario a obtener" +output: "dict: objeto usuario con email, nombre, permisos y metadata" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_list_cards.md b/python/functions/metabase/metabase_list_cards.md index cb903582..7266af95 100644 --- a/python/functions/metabase/metabase_list_cards.md +++ b/python/functions/metabase/metabase_list_cards.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: filter + desc: "filtro: all, mine, fav, archived, recent, popular, database, table" + - name: model_id + desc: "ID de modelo para filtros database/table" +output: "list[dict]: lista de cards que coinciden con el filtro" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_list_dashboards.md b/python/functions/metabase/metabase_list_dashboards.md index ae87396e..ebd5a5c0 100644 --- a/python/functions/metabase/metabase_list_dashboards.md +++ b/python/functions/metabase/metabase_list_dashboards.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: filter + desc: "filtro: all, mine, archived" +output: "list[dict]: lista de dashboards en resumen (sin dashcards)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_list_databases.md b/python/functions/metabase/metabase_list_databases.md index fccd3ce4..043d8b7d 100644 --- a/python/functions/metabase/metabase_list_databases.md +++ b/python/functions/metabase/metabase_list_databases.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: include_tables + desc: "incluir lista de tablas en cada database" +output: "list[dict]: lista de databases configuradas con id, name, engine y opcionalmente tables" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_list_users.md b/python/functions/metabase/metabase_list_users.md index 8a8361f5..84480b77 100644 --- a/python/functions/metabase/metabase_list_users.md +++ b/python/functions/metabase/metabase_list_users.md @@ -14,6 +14,18 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: status + desc: "filtro por estado de usuario (active, deactivated, etc.)" + - name: query + desc: "búsqueda por nombre o email" + - name: limit + desc: "límite de resultados por página" + - name: offset + desc: "desplazamiento para paginación" +output: "dict: objeto paginado con data (usuarios), total, limit, offset" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_setup.md b/python/functions/metabase/metabase_setup.md index 33521160..70d4d337 100644 --- a/python/functions/metabase/metabase_setup.md +++ b/python/functions/metabase/metabase_setup.md @@ -14,6 +14,22 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: base_url + desc: "URL base de Metabase a configurar" + - name: admin_email + desc: "correo del usuario administrador a crear" + - name: admin_password + desc: "contraseña del administrador" + - name: admin_first_name + desc: "nombre del administrador" + - name: admin_last_name + desc: "apellido del administrador" + - name: site_name + desc: "nombre del sitio Metabase" + - name: site_locale + desc: "código de idioma (ej: es, en, fr)" +output: "dict: resultado del setup con session token de administrador" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_update_card.md b/python/functions/metabase/metabase_update_card.md index 8c046148..cb53abd9 100644 --- a/python/functions/metabase/metabase_update_card.md +++ b/python/functions/metabase/metabase_update_card.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: card_id + desc: "ID de la card a actualizar" + - name: fields + desc: "kwargs con campos a actualizar (name, description, display, dataset_query, collection_id, archived)" +output: "dict: objeto card actualizado" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_update_dashboard.md b/python/functions/metabase/metabase_update_dashboard.md index 17e1379b..3dc52a1e 100644 --- a/python/functions/metabase/metabase_update_dashboard.md +++ b/python/functions/metabase/metabase_update_dashboard.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: dashboard_id + desc: "ID del dashboard a actualizar" + - name: fields + desc: "kwargs con campos a actualizar (name, description, archived, dashcards, tabs, parameters, collection_id)" +output: "dict: objeto dashboard actualizado" tested: false tests: [] test_file_path: "" diff --git a/python/functions/metabase/metabase_update_user.md b/python/functions/metabase/metabase_update_user.md index 78e0f4c1..265d9068 100644 --- a/python/functions/metabase/metabase_update_user.md +++ b/python/functions/metabase/metabase_update_user.md @@ -14,6 +14,14 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] +params: + - name: client + desc: "instancia autenticada de MetabaseClient" + - name: user_id + desc: "ID del usuario a actualizar" + - name: fields + desc: "kwargs con campos a actualizar (first_name, last_name, email, is_superuser, group_ids, locale)" +output: "dict: objeto usuario actualizado" tested: false tests: [] test_file_path: "" diff --git a/python/functions/notebook/jupyter_discover.md b/python/functions/notebook/jupyter_discover.md index 82434e8e..f05e5b0c 100644 --- a/python/functions/notebook/jupyter_discover.md +++ b/python/functions/notebook/jupyter_discover.md @@ -14,6 +14,12 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [json, os, urllib.error, urllib.request, pathlib] +params: + - name: registry_root + desc: "Raíz del registry para detectar análisis (opcional, usa FN_REGISTRY_ROOT si no se proporciona)" + - name: ports + desc: "Puertos a escanear (default: 8888-8892, detecta automáticamente)" +output: "Lista de dicts con información de instancias Jupyter: url, port, analysis, root_dir, collaborative, kernels, sessions" tested: false tests: [] test_file_path: "" diff --git a/python/functions/notebook/jupyter_exec.md b/python/functions/notebook/jupyter_exec.md index 8cbacc7f..f6637544 100644 --- a/python/functions/notebook/jupyter_exec.md +++ b/python/functions/notebook/jupyter_exec.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [jupyter_kernel_client, jupyter_nbmodel_client] +params: + - name: notebook_path + desc: "Ruta relativa al notebook" + - name: code + desc: "Código a ejecutar" + - name: server_url + desc: "URL del servidor Jupyter (default localhost:8888)" + - name: token + desc: "Token de autenticación (default vacío)" +output: "Dict con cell_index y outputs del código ejecutado, o resultados del kernel" tested: false tests: [] test_file_path: "" diff --git a/python/functions/notebook/jupyter_kernel.md b/python/functions/notebook/jupyter_kernel.md index dc2864c4..8c53b1b6 100644 --- a/python/functions/notebook/jupyter_kernel.md +++ b/python/functions/notebook/jupyter_kernel.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [json, urllib.error, urllib.request] +output: "Múltiples funciones para CRUD de kernels: list, start, restart, interrupt, shutdown, sessions (retornan dicts con metadatos)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/notebook/jupyter_read.md b/python/functions/notebook/jupyter_read.md index 0e04d426..64100efd 100644 --- a/python/functions/notebook/jupyter_read.md +++ b/python/functions/notebook/jupyter_read.md @@ -14,6 +14,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [jupyter_nbmodel_client] +params: + - name: notebook_path + desc: "Ruta relativa del notebook" + - name: server_url + desc: "URL del servidor Jupyter (default localhost:8888)" + - name: token + desc: "Token de autenticación" + - name: cell_index + desc: "Índice de celda específica a leer (opcional)" +output: "Lista de dicts con info de celdas (index, type, source, outputs) o dict con metadata del notebook" tested: false tests: [] test_file_path: "" diff --git a/python/functions/notebook/jupyter_write.md b/python/functions/notebook/jupyter_write.md index 72e2c57f..1504a0f3 100644 --- a/python/functions/notebook/jupyter_write.md +++ b/python/functions/notebook/jupyter_write.md @@ -14,6 +14,7 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [jupyter_nbmodel_client] +output: "Múltiples funciones para escribir en notebooks: append_code/markdown, insert, edit, delete, create, batch (retornan dicts con action y posición)" tested: false tests: [] test_file_path: "" diff --git a/python/functions/pipelines/extraction_pipeline.md b/python/functions/pipelines/extraction_pipeline.md index 81e5149b..0eb5de25 100644 --- a/python/functions/pipelines/extraction_pipeline.md +++ b/python/functions/pipelines/extraction_pipeline.md @@ -31,6 +31,26 @@ imports: - time - warnings - typing.Callable +params: + - name: file_path + desc: "Ruta del documento (PDF, TXT, Markdown) a procesar" + - name: entity_presets + desc: "Configuración de tipos de entidades a extraer con sus metadatos" + - name: relation_types + desc: "Tipos de relaciones a extraer (ej: 'owns', 'operates', 'communicates_with')" + - name: llm_chat_json + desc: "Función inyectada para llamadas al LLM (sin acoplamiento a proveedor)" + - name: chunk_size + desc: "Tamaño de chunks para procesamiento (default 500)" + - name: chunk_overlap + desc: "Solapamiento entre chunks (default 50)" + - name: confidence_threshold + desc: "Confianza mínima para incluir entidades (default 0.5)" + - name: dedup_threshold + desc: "Umbral fuzzy para deduplicación (default 0.85)" + - name: on_progress + desc: "Callback opcional para progreso (msg, percentage)" +output: "ExtractionResult con entidades, relaciones y estadísticas del proceso de extracción" tested: true tests: - "documento con entidades y relaciones retorna ExtractionResult completo" diff --git a/python/functions/pipelines/metabase_add_ops_db.md b/python/functions/pipelines/metabase_add_ops_db.md index 7914967a..173e0692 100644 --- a/python/functions/pipelines/metabase_add_ops_db.md +++ b/python/functions/pipelines/metabase_add_ops_db.md @@ -17,6 +17,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: app_name + desc: "Nombre de la app cuya operations.db registrar en Metabase" +output: "Void - registra la operations.db en Metabase como database SQLite y muestra mount requerido" tested: false tests: [] test_file_path: "" diff --git a/python/functions/pipelines/metabase_create_ops_dashboard.md b/python/functions/pipelines/metabase_create_ops_dashboard.md index f6424c66..fed1dc9b 100644 --- a/python/functions/pipelines/metabase_create_ops_dashboard.md +++ b/python/functions/pipelines/metabase_create_ops_dashboard.md @@ -21,6 +21,10 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +params: + - name: app_name + desc: "Nombre de la app para la que crear dashboard operativo" +output: "Void - crea dashboard en Metabase con KPIs, distribuciones y tablas de entities/executions/assertions" tested: false tests: [] test_file_path: "" diff --git a/python/functions/pipelines/metabase_fix_permissions.md b/python/functions/pipelines/metabase_fix_permissions.md index 52801630..905b1902 100644 --- a/python/functions/pipelines/metabase_fix_permissions.md +++ b/python/functions/pipelines/metabase_fix_permissions.md @@ -16,6 +16,7 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [] +output: "Void - arregla permisos SQLITE_READONLY_DIRECTORY en contenedor Metabase vía chmod 777/666" tested: false tests: [] test_file_path: "" diff --git a/python/functions/pipelines/monte_carlo_market.md b/python/functions/pipelines/monte_carlo_market.md index 443f2f70..d9222f3c 100644 --- a/python/functions/pipelines/monte_carlo_market.md +++ b/python/functions/pipelines/monte_carlo_market.md @@ -15,6 +15,16 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [numpy] +params: + - name: n_simulations + desc: "Número de simulaciones de mercado a ejecutar" + - name: base_params + desc: "Parámetros base aplicados a todas las simulaciones" + - name: vary_params + desc: "Parámetros a variar uniformemente: {param: (min, max)}" + - name: seed_start + desc: "Seed inicial para generador aleatorio (se incrementa por simulación)" +output: "Lista de dicts con parámetros usados y métricas: spreads, trades, volatilidad, PnL" tested: false tests: [] test_file_path: "" diff --git a/python/functions/pipelines/run_market_sim.md b/python/functions/pipelines/run_market_sim.md index f26f65e9..41541553 100644 --- a/python/functions/pipelines/run_market_sim.md +++ b/python/functions/pipelines/run_market_sim.md @@ -16,6 +16,28 @@ returns: [] returns_optional: false error_type: "error_go_core" imports: [numpy] +params: + - name: initial_price + desc: "Precio inicial del activo" + - name: n_ticks + desc: "Número de ticks a simular" + - name: sigma + desc: "Volatilidad del precio fundamental" + - name: mu + desc: "Drift del precio fundamental" + - name: jump_intensity + desc: "Intensidad de saltos de Poisson" + - name: jump_size_std + desc: "Desviación estándar de tamaños de salto" + - name: n_makers + desc: "Número de market makers" + - name: gamma + desc: "Parámetro de aversión al riesgo de Avellaneda-Stoikov" + - name: hawkes_alpha + desc: "Parámetro de excitación del proceso Hawkes" + - name: seed + desc: "Seed para reproducibilidad" +output: "Dict con trades, spreads, midprices, PnL de makers y estadísticas del matching" tested: false tests: [] test_file_path: ""