diff --git a/translated_images/es/.co-op-translator.json b/translated_images/es/.co-op-translator.json new file mode 100644 index 00000000..53ac01e1 --- /dev/null +++ b/translated_images/es/.co-op-translator.json @@ -0,0 +1,368 @@ +{ + "agent-file-placement-decision-tree.d8d4810a5984edc7.webp": { + "original_hash": "ce88b9c96bf3728ff5f71a560e97623d", + "translation_date": "2026-08-04T21:20:38+00:00", + "source_file": "04-agents-custom-instructions/assets/agent-file-placement-decision-tree.png", + "language_code": "es" + }, + "auth-device-flow.9a0e754dba878d2e.webp": { + "original_hash": "0aff0784cbc9cd963cbc0ede73d75f70", + "translation_date": "2026-08-04T21:15:56+00:00", + "source_file": "00-quick-start/assets/auth-device-flow.png", + "language_code": "es" + }, + "browser-extensions-analogy.95b41c62fc9d09a2.webp": { + "original_hash": "8cd7fa5f65d0efee0ee75dd4473db650", + "translation_date": "2026-08-04T21:19:34+00:00", + "source_file": "06-mcp-servers/assets/browser-extensions-analogy.png", + "language_code": "es" + }, + "carpenter-workflow-steps.8b68419bb4018a49.webp": { + "original_hash": "f1ccaf91d5438bda0b702e13e84d1b7a", + "translation_date": "2026-08-04T21:21:11+00:00", + "source_file": "03-development-workflows/assets/carpenter-workflow-steps.png", + "language_code": "es" + }, + "chapter-header-bg.56756ae38dd58a91.webp": { + "original_hash": "9e3c9b35f5f4c9b6caae0aedaff83ae9", + "translation_date": "2026-08-04T21:12:44+00:00", + "source_file": "assets/chapter-header-bg.png", + "language_code": "es" + }, + "chapter-header.068de5970b5370c5.webp": { + "original_hash": "e6d35479ce5d48487738d67eaae8e84e", + "translation_date": "2026-08-04T21:18:02+00:00", + "source_file": "05-skills/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.072be406fc63998c.webp": { + "original_hash": "76a3fa97ea96ebb9cebf9a424584e7df", + "translation_date": "2026-08-04T21:18:41+00:00", + "source_file": "01-setup-and-first-steps/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.0d209053007eadc0.webp": { + "original_hash": "c859d099d5aec7d20c5d65f6326bd2ef", + "translation_date": "2026-08-04T21:15:38+00:00", + "source_file": "07-putting-it-together/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.4a33d857c6f18860.webp": { + "original_hash": "00b003624fc19987e2103741bc284af8", + "translation_date": "2026-08-04T21:21:39+00:00", + "source_file": "03-development-workflows/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.5c3c39ec9904be17.webp": { + "original_hash": "0fb4cecbd9727aa3246c35858cd11e66", + "translation_date": "2026-08-04T21:15:46+00:00", + "source_file": "00-quick-start/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.644b94bc708395d8.webp": { + "original_hash": "0c172eba0213f6265b01a9d6d8ba2211", + "translation_date": "2026-08-04T21:19:40+00:00", + "source_file": "06-mcp-servers/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.99f9a913bc8808cc.webp": { + "original_hash": "c492562a32b93454300deb6bc7aaf091", + "translation_date": "2026-08-04T21:20:27+00:00", + "source_file": "04-agents-custom-instructions/assets/chapter-header.png", + "language_code": "es" + }, + "chapter-header.9e9098f7db433996.webp": { + "original_hash": "ae11d44aa41ec843853b56f14d69c82f", + "translation_date": "2026-08-04T21:14:47+00:00", + "source_file": "02-context-conversations/assets/chapter-header.png", + "language_code": "es" + }, + "code-review-swimlane-single.76c892f3c803a942.webp": { + "original_hash": "46dc8b4eadf0f569c23f4befb8e1334a", + "translation_date": "2026-08-04T21:21:53+00:00", + "source_file": "03-development-workflows/assets/code-review-swimlane-single.png", + "language_code": "es" + }, + "codebase-understanding.0a084dfeec54119d.webp": { + "original_hash": "fb82efe6dfc6deff163214aeda5db964", + "translation_date": "2026-08-04T21:14:59+00:00", + "source_file": "02-context-conversations/assets/codebase-understanding.png", + "language_code": "es" + }, + "colleague-context-analogy.dd8cb6ee73fba16f.webp": { + "original_hash": "c879561cf7b6ec87022d3eeab5ddb3ec", + "translation_date": "2026-08-04T21:14:31+00:00", + "source_file": "02-context-conversations/assets/colleague-context-analogy.png", + "language_code": "es" + }, + "combined-workflows.833d1b0f28ee9187.webp": { + "original_hash": "953b1777ada1b45c369db582fae8f1d9", + "translation_date": "2026-08-04T21:15:04+00:00", + "source_file": "07-putting-it-together/assets/combined-workflows.png", + "language_code": "es" + }, + "configuring-mcp-servers.d3a6dfc11d514277.webp": { + "original_hash": "9e16e65ceecdf98a7cc2dedecc06f2d8", + "translation_date": "2026-08-04T21:20:02+00:00", + "source_file": "06-mcp-servers/assets/configuring-mcp-servers.png", + "language_code": "es" + }, + "context-window-visualization.dc48490ff212d12f.webp": { + "original_hash": "c2305c60350131e36873681ea8117d73", + "translation_date": "2026-08-04T21:14:39+00:00", + "source_file": "02-context-conversations/assets/context-window-visualization.png", + "language_code": "es" + }, + "copilot-banner.0f612aa32652bafb.webp": { + "original_hash": "fb2dc5aee3dc6723697a2a53504260f9", + "translation_date": "2026-08-04T21:12:41+00:00", + "source_file": "assets/copilot-banner.png", + "language_code": "es" + }, + "copilot-dev-days.aa104ffc4da4844e.webp": { + "original_hash": "9b1dde39a0fe60f695857a3d7e6c8547", + "translation_date": "2026-08-04T21:13:03+00:00", + "source_file": "assets/copilot-dev-days.png", + "language_code": "es" + }, + "copilot-trust.f21051666ebb7f13.webp": { + "original_hash": "74ff05e67ca332d53370c1970bc73782", + "translation_date": "2026-08-04T21:16:14+00:00", + "source_file": "00-quick-start/assets/copilot-trust.png", + "language_code": "es" + }, + "creating-custom-agents.9433443b252022ef.webp": { + "original_hash": "6889fbdcd82f6afd2a1f0f93097e60bf", + "translation_date": "2026-08-04T21:20:27+00:00", + "source_file": "04-agents-custom-instructions/assets/creating-custom-agents.png", + "language_code": "es" + }, + "creating-managing-skills.dfa089ffc37004de.webp": { + "original_hash": "eeb6d0103ac737e23dca05881d32c844", + "translation_date": "2026-08-04T21:17:36+00:00", + "source_file": "05-skills/assets/creating-managing-skills.png", + "language_code": "es" + }, + "cross-file-intelligence.06c691a169a72ebf.webp": { + "original_hash": "7094d0478f03a53b03c0889a57c6e52c", + "translation_date": "2026-08-04T21:13:53+00:00", + "source_file": "02-context-conversations/assets/cross-file-intelligence.png", + "language_code": "es" + }, + "debugging-swimlane-single.e277602180ccb764.webp": { + "original_hash": "c53fc6fb407a6f657737bbbb82409765", + "translation_date": "2026-08-04T21:21:46+00:00", + "source_file": "03-development-workflows/assets/debugging-swimlane-single.png", + "language_code": "es" + }, + "essential-basic-context.928622a2209eb287.webp": { + "original_hash": "143fa66f8e98352e4281e2dc528fef2a", + "translation_date": "2026-08-04T21:14:02+00:00", + "source_file": "02-context-conversations/assets/essential-basic-context.png", + "language_code": "es" + }, + "first-copilot-experience.4ebe72574ce5e9fd.webp": { + "original_hash": "65f18fcac3328b142041e7cd4b4ab6c9", + "translation_date": "2026-08-04T21:18:53+00:00", + "source_file": "01-setup-and-first-steps/assets/first-copilot-experience.png", + "language_code": "es" + }, + "five-workflows-swimlane.5d5c7ca95363f7a8.webp": { + "original_hash": "e78bba3128ebca8e359250d66ba151b4", + "translation_date": "2026-08-04T21:21:30+00:00", + "source_file": "03-development-workflows/assets/five-workflows-swimlane.png", + "language_code": "es" + }, + "five-workflows.79c1125329964d79.webp": { + "original_hash": "bc72dbaf1f5ea795e7c89176d4fd68e2", + "translation_date": "2026-08-04T21:21:33+00:00", + "source_file": "03-development-workflows/assets/five-workflows.png", + "language_code": "es" + }, + "git-integration-swimlane-single.48aa7ca7a64cde50.webp": { + "original_hash": "63f0fa69534384567e46e28c80d77b8c", + "translation_date": "2026-08-04T21:21:00+00:00", + "source_file": "03-development-workflows/assets/git-integration-swimlane-single.png", + "language_code": "es" + }, + "github-skills-logo.369e18e53c74874d.webp": { + "original_hash": "9ff3dbe4de8f0bd4404ecdbd25feceab", + "translation_date": "2026-08-04T21:13:03+00:00", + "source_file": "assets/github-skills-logo.png", + "language_code": "es" + }, + "hiring-specialists-analogy.0559fa250f7bf75e.webp": { + "original_hash": "bb2208a734ed0de7f8ab1c169b6a49ac", + "translation_date": "2026-08-04T21:20:19+00:00", + "source_file": "04-agents-custom-instructions/assets/hiring-specialists-analogy.png", + "language_code": "es" + }, + "how-skills-work.d0b288623028d4fc.webp": { + "original_hash": "324d2ea7266294202b5b223324286523", + "translation_date": "2026-08-04T21:17:56+00:00", + "source_file": "05-skills/assets/how-skills-work.png", + "language_code": "es" + }, + "integration-pattern.949caacd87d83eda.webp": { + "original_hash": "255d5b0ac7745ae151f1319626faa488", + "translation_date": "2026-08-04T21:15:23+00:00", + "source_file": "07-putting-it-together/assets/integration-pattern.png", + "language_code": "es" + }, + "interactive-mode.303237fddcebd5fd.webp": { + "original_hash": "710e2c92e99c497b409a24df891ff625", + "translation_date": "2026-08-04T21:18:52+00:00", + "source_file": "01-setup-and-first-steps/assets/interactive-mode.png", + "language_code": "es" + }, + "issue-to-pr-workflow.3283131a7a8c7017.webp": { + "original_hash": "14918a4187e5c814a25597bd8b56b57e", + "translation_date": "2026-08-04T21:19:15+00:00", + "source_file": "06-mcp-servers/assets/issue-to-pr-workflow.png", + "language_code": "es" + }, + "learning-path.6c7069656df25927.webp": { + "original_hash": "8c79d81f23f7dde3f0acb698a139bb6f", + "translation_date": "2026-08-04T21:12:50+00:00", + "source_file": "assets/learning-path.png", + "language_code": "es" + }, + "managing-sharing-skills.32af99cc9ffca3f2.webp": { + "original_hash": "614c9502ee8fb34712e6cd36aaddbedc", + "translation_date": "2026-08-04T21:18:24+00:00", + "source_file": "05-skills/assets/managing-sharing-skills.png", + "language_code": "es" + }, + "mockup.4618d97445bd29b7.webp": { + "original_hash": "dd2d6d88e65e9d869554da6b298336cf", + "translation_date": "2026-08-04T21:13:37+00:00", + "source_file": "assets/mockup.png", + "language_code": "es" + }, + "modes-and-commands.6150c011b961166e.webp": { + "original_hash": "00341bffac71159445bc313ed1a9c113", + "translation_date": "2026-08-04T21:19:02+00:00", + "source_file": "01-setup-and-first-steps/assets/modes-and-commands.png", + "language_code": "es" + }, + "multi-server-workflow.c44948f3a225e6c9.webp": { + "original_hash": "654c129ad56ff48325c105790664fb8d", + "translation_date": "2026-08-04T21:19:24+00:00", + "source_file": "06-mcp-servers/assets/multi-server-workflow.png", + "language_code": "es" + }, + "optional-going-deeper.bdeed7f7838fd922.webp": { + "original_hash": "b709a70015a36e616d13d84b191cec8a", + "translation_date": "2026-08-04T21:14:02+00:00", + "source_file": "02-context-conversations/assets/optional-going-deeper.png", + "language_code": "es" + }, + "orchestra-analogy.fff0e1dc0799ec5c.webp": { + "original_hash": "ad1d0d18ef7c0f5cef7b7f4b5f1420e9", + "translation_date": "2026-08-04T21:15:32+00:00", + "source_file": "07-putting-it-together/assets/orchestra-analogy.png", + "language_code": "es" + }, + "ordering-food-analogy.248925fdf6fc7241.webp": { + "original_hash": "31ccedda9e34732dc710b04e5d92440c", + "translation_date": "2026-08-04T21:18:34+00:00", + "source_file": "01-setup-and-first-steps/assets/ordering-food-analogy.png", + "language_code": "es" + }, + "plan-mode.befa623cdcdcb8ff.webp": { + "original_hash": "1018cb44df06735028d197ed6dfb18a2", + "translation_date": "2026-08-04T21:18:47+00:00", + "source_file": "01-setup-and-first-steps/assets/plan-mode.png", + "language_code": "es" + }, + "power-tools-analogy.8b2bcf6fcf1eeb35.webp": { + "original_hash": "20b8409665af15c8ce162c22319bc042", + "translation_date": "2026-08-04T21:18:14+00:00", + "source_file": "05-skills/assets/power-tools-analogy.png", + "language_code": "es" + }, + "practice.ca83e957212c4945.webp": { + "original_hash": "53de278a98a50827d7698a1ed88ebd28", + "translation_date": "2026-08-04T21:13:06+00:00", + "source_file": "assets/practice.png", + "language_code": "es" + }, + "programmatic-mode.986a0b20f0fa67d4.webp": { + "original_hash": "5b4eb0a5ce59dadb6cdc3f6a0188ab59", + "translation_date": "2026-08-04T21:19:02+00:00", + "source_file": "01-setup-and-first-steps/assets/programmatic-mode.png", + "language_code": "es" + }, + "qr.de083a7d935fc8d4.webp": { + "original_hash": "6552fe56f0b3d172add19e33f0c80126", + "translation_date": "2026-08-04T21:13:41+00:00", + "source_file": "assets/qr.png", + "language_code": "es" + }, + "quick-reference-header.860a3b7a46b3bfa0.webp": { + "original_hash": "065feb773bd998af6018d455ac27ecf1", + "translation_date": "2026-08-04T21:12:38+00:00", + "source_file": "assets/quick-reference-header.png", + "language_code": "es" + }, + "quick-start-mcp.fd090cca49f20565.webp": { + "original_hash": "e508f2942556059db4734f7657ada914", + "translation_date": "2026-08-04T21:19:43+00:00", + "source_file": "06-mcp-servers/assets/quick-start-mcp.png", + "language_code": "es" + }, + "refactoring-swimlane-single.66e8e2c5072a1304.webp": { + "original_hash": "1f2ed7bba6c0cced04b660fab0a00cd7", + "translation_date": "2026-08-04T21:21:17+00:00", + "source_file": "03-development-workflows/assets/refactoring-swimlane-single.png", + "language_code": "es" + }, + "screenshot.8712f552a008236b.webp": { + "original_hash": "31ccedda9e34732dc710b04e5d92440c", + "translation_date": "2026-08-04T21:12:29+00:00", + "source_file": "assets/screenshot.png", + "language_code": "es" + }, + "session-persistence-timeline.2a5a3758ff1d3c16.webp": { + "original_hash": "b55b9d9b4e2312a5ba2c58a99f7ed35b", + "translation_date": "2026-08-04T21:14:17+00:00", + "source_file": "02-context-conversations/assets/session-persistence-timeline.png", + "language_code": "es" + }, + "skill-auto-discovery-flow.52644f9f1d8f0bf1.webp": { + "original_hash": "d37aa3a4382a9e2b9107e4d1b4d96d84", + "translation_date": "2026-08-04T21:17:35+00:00", + "source_file": "05-skills/assets/skill-auto-discovery-flow.png", + "language_code": "es" + }, + "skills-agents-mcp-comparison.269e280641e1743e.webp": { + "original_hash": "1bdf646614c20edb879e4aff8784441e", + "translation_date": "2026-08-04T21:17:56+00:00", + "source_file": "05-skills/assets/skills-agents-mcp-comparison.png", + "language_code": "es" + }, + "specialized-workflows.2ab9b8b540f95f3f.webp": { + "original_hash": "bbb3a512e8b3e845e76947254c7cb518", + "translation_date": "2026-08-04T21:20:52+00:00", + "source_file": "03-development-workflows/assets/specialized-workflows.png", + "language_code": "es" + }, + "test-gen-swimlane-single.a5ca2cd4a07b5dbe.webp": { + "original_hash": "0a81cf5e319225b3cc16711044aeebef", + "translation_date": "2026-08-04T21:20:46+00:00", + "source_file": "03-development-workflows/assets/test-gen-swimlane-single.png", + "language_code": "es" + }, + "using-agents.bb24c89aebe238a3.webp": { + "original_hash": "8942e4cdeb86359fb66b2b76fd3cb181", + "translation_date": "2026-08-04T21:20:05+00:00", + "source_file": "04-agents-custom-instructions/assets/using-agents.png", + "language_code": "es" + }, + "using-mcp-servers.b3ef4e8f334c449c.webp": { + "original_hash": "a0ebd353ad2fe04046303a6f2bcc4c82", + "translation_date": "2026-08-04T21:19:56+00:00", + "source_file": "06-mcp-servers/assets/using-mcp-servers.png", + "language_code": "es" + } +} \ No newline at end of file diff --git a/translated_images/es/agent-file-placement-decision-tree.d8d4810a5984edc7.webp b/translated_images/es/agent-file-placement-decision-tree.d8d4810a5984edc7.webp new file mode 100644 index 00000000..a07c2ab6 Binary files /dev/null and b/translated_images/es/agent-file-placement-decision-tree.d8d4810a5984edc7.webp differ diff --git a/translated_images/es/auth-device-flow.9a0e754dba878d2e.webp b/translated_images/es/auth-device-flow.9a0e754dba878d2e.webp new file mode 100644 index 00000000..8eab184a Binary files /dev/null and b/translated_images/es/auth-device-flow.9a0e754dba878d2e.webp differ diff --git a/translated_images/es/browser-extensions-analogy.95b41c62fc9d09a2.webp b/translated_images/es/browser-extensions-analogy.95b41c62fc9d09a2.webp new file mode 100644 index 00000000..989c42f4 Binary files /dev/null and b/translated_images/es/browser-extensions-analogy.95b41c62fc9d09a2.webp differ diff --git a/translated_images/es/carpenter-workflow-steps.8b68419bb4018a49.webp b/translated_images/es/carpenter-workflow-steps.8b68419bb4018a49.webp new file mode 100644 index 00000000..aa676060 Binary files /dev/null and b/translated_images/es/carpenter-workflow-steps.8b68419bb4018a49.webp differ diff --git a/translated_images/es/chapter-header-bg.56756ae38dd58a91.webp b/translated_images/es/chapter-header-bg.56756ae38dd58a91.webp new file mode 100644 index 00000000..84f3e96a Binary files /dev/null and b/translated_images/es/chapter-header-bg.56756ae38dd58a91.webp differ diff --git a/translated_images/es/chapter-header.068de5970b5370c5.webp b/translated_images/es/chapter-header.068de5970b5370c5.webp new file mode 100644 index 00000000..f6564780 Binary files /dev/null and b/translated_images/es/chapter-header.068de5970b5370c5.webp differ diff --git a/translated_images/es/chapter-header.072be406fc63998c.webp b/translated_images/es/chapter-header.072be406fc63998c.webp new file mode 100644 index 00000000..21aad045 Binary files /dev/null and b/translated_images/es/chapter-header.072be406fc63998c.webp differ diff --git a/translated_images/es/chapter-header.0d209053007eadc0.webp b/translated_images/es/chapter-header.0d209053007eadc0.webp new file mode 100644 index 00000000..d63a7423 Binary files /dev/null and b/translated_images/es/chapter-header.0d209053007eadc0.webp differ diff --git a/translated_images/es/chapter-header.4a33d857c6f18860.webp b/translated_images/es/chapter-header.4a33d857c6f18860.webp new file mode 100644 index 00000000..1fd3f251 Binary files /dev/null and b/translated_images/es/chapter-header.4a33d857c6f18860.webp differ diff --git a/translated_images/es/chapter-header.5c3c39ec9904be17.webp b/translated_images/es/chapter-header.5c3c39ec9904be17.webp new file mode 100644 index 00000000..3871afbd Binary files /dev/null and b/translated_images/es/chapter-header.5c3c39ec9904be17.webp differ diff --git a/translated_images/es/chapter-header.644b94bc708395d8.webp b/translated_images/es/chapter-header.644b94bc708395d8.webp new file mode 100644 index 00000000..caa65cdb Binary files /dev/null and b/translated_images/es/chapter-header.644b94bc708395d8.webp differ diff --git a/translated_images/es/chapter-header.99f9a913bc8808cc.webp b/translated_images/es/chapter-header.99f9a913bc8808cc.webp new file mode 100644 index 00000000..a96e6e83 Binary files /dev/null and b/translated_images/es/chapter-header.99f9a913bc8808cc.webp differ diff --git a/translated_images/es/chapter-header.9e9098f7db433996.webp b/translated_images/es/chapter-header.9e9098f7db433996.webp new file mode 100644 index 00000000..d45fccc6 Binary files /dev/null and b/translated_images/es/chapter-header.9e9098f7db433996.webp differ diff --git a/translated_images/es/code-review-swimlane-single.76c892f3c803a942.webp b/translated_images/es/code-review-swimlane-single.76c892f3c803a942.webp new file mode 100644 index 00000000..98ba7ed0 Binary files /dev/null and b/translated_images/es/code-review-swimlane-single.76c892f3c803a942.webp differ diff --git a/translated_images/es/codebase-understanding.0a084dfeec54119d.webp b/translated_images/es/codebase-understanding.0a084dfeec54119d.webp new file mode 100644 index 00000000..331a8182 Binary files /dev/null and b/translated_images/es/codebase-understanding.0a084dfeec54119d.webp differ diff --git a/translated_images/es/colleague-context-analogy.dd8cb6ee73fba16f.webp b/translated_images/es/colleague-context-analogy.dd8cb6ee73fba16f.webp new file mode 100644 index 00000000..5a443736 Binary files /dev/null and b/translated_images/es/colleague-context-analogy.dd8cb6ee73fba16f.webp differ diff --git a/translated_images/es/combined-workflows.833d1b0f28ee9187.webp b/translated_images/es/combined-workflows.833d1b0f28ee9187.webp new file mode 100644 index 00000000..275774b8 Binary files /dev/null and b/translated_images/es/combined-workflows.833d1b0f28ee9187.webp differ diff --git a/translated_images/es/configuring-mcp-servers.d3a6dfc11d514277.webp b/translated_images/es/configuring-mcp-servers.d3a6dfc11d514277.webp new file mode 100644 index 00000000..e5f1e053 Binary files /dev/null and b/translated_images/es/configuring-mcp-servers.d3a6dfc11d514277.webp differ diff --git a/translated_images/es/context-window-visualization.dc48490ff212d12f.webp b/translated_images/es/context-window-visualization.dc48490ff212d12f.webp new file mode 100644 index 00000000..43ff3fbc Binary files /dev/null and b/translated_images/es/context-window-visualization.dc48490ff212d12f.webp differ diff --git a/translated_images/es/copilot-banner.0f612aa32652bafb.webp b/translated_images/es/copilot-banner.0f612aa32652bafb.webp new file mode 100644 index 00000000..7bcc3877 Binary files /dev/null and b/translated_images/es/copilot-banner.0f612aa32652bafb.webp differ diff --git a/translated_images/es/copilot-dev-days.aa104ffc4da4844e.webp b/translated_images/es/copilot-dev-days.aa104ffc4da4844e.webp new file mode 100644 index 00000000..f8a13ae6 Binary files /dev/null and b/translated_images/es/copilot-dev-days.aa104ffc4da4844e.webp differ diff --git a/translated_images/es/copilot-trust.f21051666ebb7f13.webp b/translated_images/es/copilot-trust.f21051666ebb7f13.webp new file mode 100644 index 00000000..20f799ae Binary files /dev/null and b/translated_images/es/copilot-trust.f21051666ebb7f13.webp differ diff --git a/translated_images/es/creating-custom-agents.9433443b252022ef.webp b/translated_images/es/creating-custom-agents.9433443b252022ef.webp new file mode 100644 index 00000000..3b0d2245 Binary files /dev/null and b/translated_images/es/creating-custom-agents.9433443b252022ef.webp differ diff --git a/translated_images/es/creating-managing-skills.dfa089ffc37004de.webp b/translated_images/es/creating-managing-skills.dfa089ffc37004de.webp new file mode 100644 index 00000000..f3132a71 Binary files /dev/null and b/translated_images/es/creating-managing-skills.dfa089ffc37004de.webp differ diff --git a/translated_images/es/cross-file-intelligence.06c691a169a72ebf.webp b/translated_images/es/cross-file-intelligence.06c691a169a72ebf.webp new file mode 100644 index 00000000..120a5a28 Binary files /dev/null and b/translated_images/es/cross-file-intelligence.06c691a169a72ebf.webp differ diff --git a/translated_images/es/debugging-swimlane-single.e277602180ccb764.webp b/translated_images/es/debugging-swimlane-single.e277602180ccb764.webp new file mode 100644 index 00000000..d1927dbf Binary files /dev/null and b/translated_images/es/debugging-swimlane-single.e277602180ccb764.webp differ diff --git a/translated_images/es/essential-basic-context.928622a2209eb287.webp b/translated_images/es/essential-basic-context.928622a2209eb287.webp new file mode 100644 index 00000000..9a2a8c4e Binary files /dev/null and b/translated_images/es/essential-basic-context.928622a2209eb287.webp differ diff --git a/translated_images/es/first-copilot-experience.4ebe72574ce5e9fd.webp b/translated_images/es/first-copilot-experience.4ebe72574ce5e9fd.webp new file mode 100644 index 00000000..7c789562 Binary files /dev/null and b/translated_images/es/first-copilot-experience.4ebe72574ce5e9fd.webp differ diff --git a/translated_images/es/five-workflows-swimlane.5d5c7ca95363f7a8.webp b/translated_images/es/five-workflows-swimlane.5d5c7ca95363f7a8.webp new file mode 100644 index 00000000..af76723c Binary files /dev/null and b/translated_images/es/five-workflows-swimlane.5d5c7ca95363f7a8.webp differ diff --git a/translated_images/es/five-workflows.79c1125329964d79.webp b/translated_images/es/five-workflows.79c1125329964d79.webp new file mode 100644 index 00000000..439c80e6 Binary files /dev/null and b/translated_images/es/five-workflows.79c1125329964d79.webp differ diff --git a/translated_images/es/git-integration-swimlane-single.48aa7ca7a64cde50.webp b/translated_images/es/git-integration-swimlane-single.48aa7ca7a64cde50.webp new file mode 100644 index 00000000..aeda5e85 Binary files /dev/null and b/translated_images/es/git-integration-swimlane-single.48aa7ca7a64cde50.webp differ diff --git a/translated_images/es/github-skills-logo.369e18e53c74874d.webp b/translated_images/es/github-skills-logo.369e18e53c74874d.webp new file mode 100644 index 00000000..ac9663ac Binary files /dev/null and b/translated_images/es/github-skills-logo.369e18e53c74874d.webp differ diff --git a/translated_images/es/hiring-specialists-analogy.0559fa250f7bf75e.webp b/translated_images/es/hiring-specialists-analogy.0559fa250f7bf75e.webp new file mode 100644 index 00000000..841f7644 Binary files /dev/null and b/translated_images/es/hiring-specialists-analogy.0559fa250f7bf75e.webp differ diff --git a/translated_images/es/how-skills-work.d0b288623028d4fc.webp b/translated_images/es/how-skills-work.d0b288623028d4fc.webp new file mode 100644 index 00000000..5e4e5c2d Binary files /dev/null and b/translated_images/es/how-skills-work.d0b288623028d4fc.webp differ diff --git a/translated_images/es/integration-pattern.949caacd87d83eda.webp b/translated_images/es/integration-pattern.949caacd87d83eda.webp new file mode 100644 index 00000000..e2c6d7ae Binary files /dev/null and b/translated_images/es/integration-pattern.949caacd87d83eda.webp differ diff --git a/translated_images/es/interactive-mode.303237fddcebd5fd.webp b/translated_images/es/interactive-mode.303237fddcebd5fd.webp new file mode 100644 index 00000000..f7261f55 Binary files /dev/null and b/translated_images/es/interactive-mode.303237fddcebd5fd.webp differ diff --git a/translated_images/es/issue-to-pr-workflow.3283131a7a8c7017.webp b/translated_images/es/issue-to-pr-workflow.3283131a7a8c7017.webp new file mode 100644 index 00000000..50899938 Binary files /dev/null and b/translated_images/es/issue-to-pr-workflow.3283131a7a8c7017.webp differ diff --git a/translated_images/es/learning-path.6c7069656df25927.webp b/translated_images/es/learning-path.6c7069656df25927.webp new file mode 100644 index 00000000..c67a4426 Binary files /dev/null and b/translated_images/es/learning-path.6c7069656df25927.webp differ diff --git a/translated_images/es/managing-sharing-skills.32af99cc9ffca3f2.webp b/translated_images/es/managing-sharing-skills.32af99cc9ffca3f2.webp new file mode 100644 index 00000000..99ea0c5a Binary files /dev/null and b/translated_images/es/managing-sharing-skills.32af99cc9ffca3f2.webp differ diff --git a/translated_images/es/mockup.4618d97445bd29b7.webp b/translated_images/es/mockup.4618d97445bd29b7.webp new file mode 100644 index 00000000..de75975c Binary files /dev/null and b/translated_images/es/mockup.4618d97445bd29b7.webp differ diff --git a/translated_images/es/modes-and-commands.6150c011b961166e.webp b/translated_images/es/modes-and-commands.6150c011b961166e.webp new file mode 100644 index 00000000..3ba64ff3 Binary files /dev/null and b/translated_images/es/modes-and-commands.6150c011b961166e.webp differ diff --git a/translated_images/es/multi-server-workflow.c44948f3a225e6c9.webp b/translated_images/es/multi-server-workflow.c44948f3a225e6c9.webp new file mode 100644 index 00000000..2f56be3c Binary files /dev/null and b/translated_images/es/multi-server-workflow.c44948f3a225e6c9.webp differ diff --git a/translated_images/es/optional-going-deeper.bdeed7f7838fd922.webp b/translated_images/es/optional-going-deeper.bdeed7f7838fd922.webp new file mode 100644 index 00000000..90fbd6b6 Binary files /dev/null and b/translated_images/es/optional-going-deeper.bdeed7f7838fd922.webp differ diff --git a/translated_images/es/orchestra-analogy.fff0e1dc0799ec5c.webp b/translated_images/es/orchestra-analogy.fff0e1dc0799ec5c.webp new file mode 100644 index 00000000..2e410f56 Binary files /dev/null and b/translated_images/es/orchestra-analogy.fff0e1dc0799ec5c.webp differ diff --git a/translated_images/es/ordering-food-analogy.248925fdf6fc7241.webp b/translated_images/es/ordering-food-analogy.248925fdf6fc7241.webp new file mode 100644 index 00000000..f6fd9f9c Binary files /dev/null and b/translated_images/es/ordering-food-analogy.248925fdf6fc7241.webp differ diff --git a/translated_images/es/plan-mode.befa623cdcdcb8ff.webp b/translated_images/es/plan-mode.befa623cdcdcb8ff.webp new file mode 100644 index 00000000..e0b35d4c Binary files /dev/null and b/translated_images/es/plan-mode.befa623cdcdcb8ff.webp differ diff --git a/translated_images/es/power-tools-analogy.8b2bcf6fcf1eeb35.webp b/translated_images/es/power-tools-analogy.8b2bcf6fcf1eeb35.webp new file mode 100644 index 00000000..8ed8209e Binary files /dev/null and b/translated_images/es/power-tools-analogy.8b2bcf6fcf1eeb35.webp differ diff --git a/translated_images/es/practice.ca83e957212c4945.webp b/translated_images/es/practice.ca83e957212c4945.webp new file mode 100644 index 00000000..0bd121ab Binary files /dev/null and b/translated_images/es/practice.ca83e957212c4945.webp differ diff --git a/translated_images/es/programmatic-mode.986a0b20f0fa67d4.webp b/translated_images/es/programmatic-mode.986a0b20f0fa67d4.webp new file mode 100644 index 00000000..4c9fc246 Binary files /dev/null and b/translated_images/es/programmatic-mode.986a0b20f0fa67d4.webp differ diff --git a/translated_images/es/qr.de083a7d935fc8d4.webp b/translated_images/es/qr.de083a7d935fc8d4.webp new file mode 100644 index 00000000..53a57266 Binary files /dev/null and b/translated_images/es/qr.de083a7d935fc8d4.webp differ diff --git a/translated_images/es/quick-reference-header.860a3b7a46b3bfa0.webp b/translated_images/es/quick-reference-header.860a3b7a46b3bfa0.webp new file mode 100644 index 00000000..04269de9 Binary files /dev/null and b/translated_images/es/quick-reference-header.860a3b7a46b3bfa0.webp differ diff --git a/translated_images/es/quick-start-mcp.fd090cca49f20565.webp b/translated_images/es/quick-start-mcp.fd090cca49f20565.webp new file mode 100644 index 00000000..43d54d8c Binary files /dev/null and b/translated_images/es/quick-start-mcp.fd090cca49f20565.webp differ diff --git a/translated_images/es/refactoring-swimlane-single.66e8e2c5072a1304.webp b/translated_images/es/refactoring-swimlane-single.66e8e2c5072a1304.webp new file mode 100644 index 00000000..32455204 Binary files /dev/null and b/translated_images/es/refactoring-swimlane-single.66e8e2c5072a1304.webp differ diff --git a/translated_images/es/screenshot.8712f552a008236b.webp b/translated_images/es/screenshot.8712f552a008236b.webp new file mode 100644 index 00000000..746e91fb Binary files /dev/null and b/translated_images/es/screenshot.8712f552a008236b.webp differ diff --git a/translated_images/es/session-persistence-timeline.2a5a3758ff1d3c16.webp b/translated_images/es/session-persistence-timeline.2a5a3758ff1d3c16.webp new file mode 100644 index 00000000..a9f610c6 Binary files /dev/null and b/translated_images/es/session-persistence-timeline.2a5a3758ff1d3c16.webp differ diff --git a/translated_images/es/skill-auto-discovery-flow.52644f9f1d8f0bf1.webp b/translated_images/es/skill-auto-discovery-flow.52644f9f1d8f0bf1.webp new file mode 100644 index 00000000..ef12bc8b Binary files /dev/null and b/translated_images/es/skill-auto-discovery-flow.52644f9f1d8f0bf1.webp differ diff --git a/translated_images/es/skills-agents-mcp-comparison.269e280641e1743e.webp b/translated_images/es/skills-agents-mcp-comparison.269e280641e1743e.webp new file mode 100644 index 00000000..52170840 Binary files /dev/null and b/translated_images/es/skills-agents-mcp-comparison.269e280641e1743e.webp differ diff --git a/translated_images/es/specialized-workflows.2ab9b8b540f95f3f.webp b/translated_images/es/specialized-workflows.2ab9b8b540f95f3f.webp new file mode 100644 index 00000000..01788b51 Binary files /dev/null and b/translated_images/es/specialized-workflows.2ab9b8b540f95f3f.webp differ diff --git a/translated_images/es/test-gen-swimlane-single.a5ca2cd4a07b5dbe.webp b/translated_images/es/test-gen-swimlane-single.a5ca2cd4a07b5dbe.webp new file mode 100644 index 00000000..1394823b Binary files /dev/null and b/translated_images/es/test-gen-swimlane-single.a5ca2cd4a07b5dbe.webp differ diff --git a/translated_images/es/using-agents.bb24c89aebe238a3.webp b/translated_images/es/using-agents.bb24c89aebe238a3.webp new file mode 100644 index 00000000..b4876232 Binary files /dev/null and b/translated_images/es/using-agents.bb24c89aebe238a3.webp differ diff --git a/translated_images/es/using-mcp-servers.b3ef4e8f334c449c.webp b/translated_images/es/using-mcp-servers.b3ef4e8f334c449c.webp new file mode 100644 index 00000000..ec74e84a Binary files /dev/null and b/translated_images/es/using-mcp-servers.b3ef4e8f334c449c.webp differ diff --git a/translations/es/.co-op-translator.json b/translations/es/.co-op-translator.json new file mode 100644 index 00000000..d5329e64 --- /dev/null +++ b/translations/es/.co-op-translator.json @@ -0,0 +1,206 @@ +{ + "00-quick-start/README.md": { + "original_hash": "8f9bdaf959024e50a713100e365a9ac5", + "translation_date": "2026-08-04T20:31:07+00:00", + "source_file": "00-quick-start/README.md", + "language_code": "es" + }, + "01-setup-and-first-steps/README.md": { + "original_hash": "725f2b0f32036473fc85fa1e5ceea8fe", + "translation_date": "2026-08-04T20:45:30+00:00", + "source_file": "01-setup-and-first-steps/README.md", + "language_code": "es" + }, + "02-context-conversations/README.md": { + "original_hash": "fffcec1e7d5a4cf56bba0e8609ab53dd", + "translation_date": "2026-08-04T20:25:49+00:00", + "source_file": "02-context-conversations/README.md", + "language_code": "es" + }, + "03-development-workflows/README.md": { + "original_hash": "35f628ad39880ce5574999c806f36e01", + "translation_date": "2026-08-04T21:05:05+00:00", + "source_file": "03-development-workflows/README.md", + "language_code": "es" + }, + "04-agents-custom-instructions/README.md": { + "original_hash": "e8d56b3fb3228ffd9b160888570a785d", + "translation_date": "2026-08-04T20:57:11+00:00", + "source_file": "04-agents-custom-instructions/README.md", + "language_code": "es" + }, + "05-skills/README.md": { + "original_hash": "c8a2a3c3dc3cbd64268fa115a77a5f02", + "translation_date": "2026-08-04T20:38:20+00:00", + "source_file": "05-skills/README.md", + "language_code": "es" + }, + "06-mcp-servers/README.md": { + "original_hash": "e9c0cfe542bb9c8b1470182468b6ae2f", + "translation_date": "2026-08-04T20:51:34+00:00", + "source_file": "06-mcp-servers/README.md", + "language_code": "es" + }, + "06-mcp-servers/mcp-custom-server.md": { + "original_hash": "7947b6e5482c966d51b2b3b853feeeeb", + "translation_date": "2026-08-04T20:46:10+00:00", + "source_file": "06-mcp-servers/mcp-custom-server.md", + "language_code": "es" + }, + "07-putting-it-together/README.md": { + "original_hash": "f6e4cc01b3e814d2b7af2ff194d72659", + "translation_date": "2026-08-04T20:29:13+00:00", + "source_file": "07-putting-it-together/README.md", + "language_code": "es" + }, + "AGENTS.md": { + "original_hash": "ee92ae79ac3ebc6ad521a1ee273fae41", + "translation_date": "2026-08-04T20:14:03+00:00", + "source_file": "AGENTS.md", + "language_code": "es" + }, + "CODE_OF_CONDUCT.md": { + "original_hash": "8b6516f8c2a7f71d51c047f2cf67da7b", + "translation_date": "2026-08-04T20:16:21+00:00", + "source_file": "CODE_OF_CONDUCT.md", + "language_code": "es" + }, + "CONTRIBUTING.md": { + "original_hash": "c1fe7b97ee917d79aa61312a7fb74e75", + "translation_date": "2026-08-04T20:14:25+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "es" + }, + "GLOSSARY.md": { + "original_hash": "0df506dde6938b83ef8eca2de865d2ac", + "translation_date": "2026-08-04T20:15:24+00:00", + "source_file": "GLOSSARY.md", + "language_code": "es" + }, + "README.md": { + "original_hash": "5a929cd1dc7e2d45b1d1d398603447d9", + "translation_date": "2026-08-04T20:17:34+00:00", + "source_file": "README.md", + "language_code": "es" + }, + "SECURITY.md": { + "original_hash": "c540a9732501726bf7fff2f58b143ac3", + "translation_date": "2026-08-04T20:18:05+00:00", + "source_file": "SECURITY.md", + "language_code": "es" + }, + "SUPPORT.md": { + "original_hash": "3999b38d93fe3d9a90e6ffd908f14cbf", + "translation_date": "2026-08-04T20:16:34+00:00", + "source_file": "SUPPORT.md", + "language_code": "es" + }, + "appendices/README.md": { + "original_hash": "fb5794d955fefcbaace78d80a2543720", + "translation_date": "2026-08-04T20:58:12+00:00", + "source_file": "appendices/README.md", + "language_code": "es" + }, + "appendices/additional-context.md": { + "original_hash": "26568aa839758755533c1576e07d929c", + "translation_date": "2026-08-04T20:59:03+00:00", + "source_file": "appendices/additional-context.md", + "language_code": "es" + }, + "appendices/ci-cd-integration.md": { + "original_hash": "d5c480c342afce29154a81efed641145", + "translation_date": "2026-08-04T20:57:51+00:00", + "source_file": "appendices/ci-cd-integration.md", + "language_code": "es" + }, + "samples/agents/README.md": { + "original_hash": "9de7cf939dcf741b2982297ad5cf6581", + "translation_date": "2026-08-04T21:10:09+00:00", + "source_file": "samples/agents/README.md", + "language_code": "es" + }, + "samples/agents/hello-world.agent.md": { + "original_hash": "db3c04f3976846c58ddf05144e624b09", + "translation_date": "2026-08-04T21:08:55+00:00", + "source_file": "samples/agents/hello-world.agent.md", + "language_code": "es" + }, + "samples/agents/pytest-helper.agent.md": { + "original_hash": "3cfa8198900378848104d6e970aafbf4", + "translation_date": "2026-08-04T21:08:38+00:00", + "source_file": "samples/agents/pytest-helper.agent.md", + "language_code": "es" + }, + "samples/agents/python-reviewer.agent.md": { + "original_hash": "f7bd2c6f349fa270519c6d186b8e77f3", + "translation_date": "2026-08-04T21:08:13+00:00", + "source_file": "samples/agents/python-reviewer.agent.md", + "language_code": "es" + }, + "samples/book-app-buggy/README.md": { + "original_hash": "969121831d9dba9314f1fd75f29ebfe0", + "translation_date": "2026-08-04T21:06:13+00:00", + "source_file": "samples/book-app-buggy/README.md", + "language_code": "es" + }, + "samples/book-app-project-cs/README.md": { + "original_hash": "99c4f97ce8c39547e0a0fede1ab2d400", + "translation_date": "2026-08-04T21:05:27+00:00", + "source_file": "samples/book-app-project-cs/README.md", + "language_code": "es" + }, + "samples/book-app-project-js/README.md": { + "original_hash": "98bb7fe8a2cf1d73c31e3911683b8476", + "translation_date": "2026-08-04T21:05:47+00:00", + "source_file": "samples/book-app-project-js/README.md", + "language_code": "es" + }, + "samples/book-app-project/README.md": { + "original_hash": "8e014705b00d769d7b1d5954b890fc16", + "translation_date": "2026-08-04T21:10:32+00:00", + "source_file": "samples/book-app-project/README.md", + "language_code": "es" + }, + "samples/buggy-code/README.md": { + "original_hash": "15b20ed65bd5136c5ce1e719f88d5d05", + "translation_date": "2026-08-04T21:07:30+00:00", + "source_file": "samples/buggy-code/README.md", + "language_code": "es" + }, + "samples/skills/README.md": { + "original_hash": "668a73830bd833ecaf8303615c53342a", + "translation_date": "2026-08-04T21:06:55+00:00", + "source_file": "samples/skills/README.md", + "language_code": "es" + }, + "samples/skills/code-checklist/SKILL.md": { + "original_hash": "fa98bdb133a0a3494587b9e1cdb46d22", + "translation_date": "2026-08-04T21:12:12+00:00", + "source_file": "samples/skills/code-checklist/SKILL.md", + "language_code": "es" + }, + "samples/skills/commit-message/SKILL.md": { + "original_hash": "b7d664a594d498d95b1d79751f508b3f", + "translation_date": "2026-08-04T21:11:27+00:00", + "source_file": "samples/skills/commit-message/SKILL.md", + "language_code": "es" + }, + "samples/skills/hello-world/SKILL.md": { + "original_hash": "37e425f6e5b4a3a0147ff6c4e1f49903", + "translation_date": "2026-08-04T21:10:56+00:00", + "source_file": "samples/skills/hello-world/SKILL.md", + "language_code": "es" + }, + "samples/skills/pytest-gen/SKILL.md": { + "original_hash": "ed0dc993c3006abb96495ca309bd9a1f", + "translation_date": "2026-08-04T21:11:49+00:00", + "source_file": "samples/skills/pytest-gen/SKILL.md", + "language_code": "es" + }, + "samples/src/README.md": { + "original_hash": "07d30c7bddf8817f7754183573ac9303", + "translation_date": "2026-08-04T21:07:51+00:00", + "source_file": "samples/src/README.md", + "language_code": "es" + } +} \ No newline at end of file diff --git a/translations/es/00-quick-start/README.md b/translations/es/00-quick-start/README.md new file mode 100644 index 00000000..1a9ac14a --- /dev/null +++ b/translations/es/00-quick-start/README.md @@ -0,0 +1,311 @@ + + +![Capítulo 00: Inicio rápido](../../../00-quick-start/assets/chapter-header.png) + +¡Bienvenido! En este capítulo, instalarás GitHub Copilot CLI (Interfaz de Línea de Comandos), iniciarás sesión con tu cuenta de GitHub y verificarás que todo funcione. Este es un capítulo de configuración rápida. Una vez que estés en funcionamiento, las demostraciones reales comienzan en el Capítulo 01! + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, habrás: + +- Instalado GitHub Copilot CLI +- Iniciado sesión con tu cuenta de GitHub +- Verificado que funciona con una prueba sencilla + +> ⏱️ **Tiempo estimado**: ~10 minutos (5 min lectura + 5 min práctica) + +--- + +## ✅ Requisitos previos + +- **Cuenta de GitHub** con acceso a Copilot. [Ver opciones de suscripción](https://github.com/features/copilot/plans). Estudiantes/Profesores pueden acceder a Copilot Pro [gratis a través de GitHub Education](https://education.github.com/pack). +- **Conceptos básicos de la terminal**: Cómodo con comandos como `cd` y `ls` + +### Qué significa "Acceso a Copilot" + +GitHub Copilot CLI requiere una suscripción activa a Copilot. Puedes verificar tu estado en [github.com/settings/copilot](https://github.com/settings/copilot). Deberías ver una de las siguientes: + +- **Copilot Individual** - Suscripción personal +- **Copilot Business** - A través de tu organización +- **Copilot Enterprise** - A través de tu empresa +- **GitHub Education** - Gratis para estudiantes/profesores verificados + +Si ves "No tienes acceso a GitHub Copilot", tendrás que usar la opción gratuita, suscribirte a un plan o unirte a una organización que proporcione acceso. + +--- + +## Instalación + +> ⏱️ **Estimación de tiempo**: La instalación toma 2-5 minutos. La autenticación añade otros 1-2 minutos. + +### GitHub Codespaces (Configuración cero) + +Si no quieres instalar ninguno de los requisitos previos, puedes usar GitHub Codespaces, que incluye GitHub Copilot CLI listo para usar (necesitarás iniciar sesión) y preinstala Python y pytest. + +1. [Haz un fork de este repositorio](https://github.com/github/copilot-cli-for-beginners/fork) en tu cuenta de GitHub +2. Selecciona **Code** > **Codespaces** > **Create codespace on main** +3. Espera unos minutos a que se construya el contenedor +4. ¡Estás listo! La terminal se abrirá automáticamente en el entorno del Codespace. + +> 💡 **Verificar en Codespace**: Ejecuta `cd samples/book-app-project && python book_app.py help` para confirmar que Python y la aplicación de ejemplo funcionan. + +### Instalación local + +Sigue estos pasos si deseas ejecutar Copilot CLI en tu máquina local con las muestras del curso. + +1. Clona el repositorio para obtener las muestras del curso en tu máquina: + + ```bash + git clone https://github.com/github/copilot-cli-for-beginners + cd copilot-cli-for-beginners + ``` + +2. Instala Copilot CLI usando una de las siguientes opciones. + + > 💡 **¿No estás seguro de cuál elegir?** Usa `npm` si tienes Node.js instalado. De lo contrario, elige la opción que coincida con tu sistema. + + ### Todas las plataformas (npm) + + ```bash + # Si tienes Node.js instalado, esta es una forma rápida de obtener la interfaz de línea de comandos. + npm install -g @github/copilot + ``` + + ### macOS/Linux (Homebrew) + + ```bash + brew install copilot-cli + ``` + + ### Windows (WinGet) + + ```bash + winget install GitHub.Copilot + ``` + + ### macOS/Linux (Script de instalación) + + ```bash + curl -fsSL https://gh.io/copilot-install | bash + ``` + +
+Opcional: Habilitar autocompletado con Tab en la shell + +El autocompletado con Tab en la shell te permite presionar **Tab** para completar subcomandos de `copilot`, opciones de comando y algunos valores de opciones. Esto es opcional, pero puede ser útil una vez que te sientas cómodo usando la CLI. + +Copilot CLI actualmente soporta scripts de autocompletado para Bash, Zsh y Fish: + +```shell +# Bash, solo para la sesión actual +source <(copilot completion bash) + +# Bash, persistente en Linux +copilot completion bash | sudo tee /etc/bash_completion.d/copilot + +# Zsh +copilot completion zsh > "${fpath[1]}/_copilot" + +# Fish +copilot completion fish > ~/.config/fish/completions/copilot.fish +``` + +Reinicia tu shell después de añadir el autocompletado persistente. PowerShell es compatible para ejecutar Copilot CLI en Windows, pero `copilot completion` actualmente solo soporta Bash, Zsh y Fish. + +
+ +--- + +## Autenticación + +Abre una ventana de terminal en la raíz del repositorio `copilot-cli-for-beginners`, inicia la CLI y permite el acceso a la carpeta. + +```bash +copilot +``` + +Se te pedirá que confíes en la carpeta que contiene el repositorio (si aún no lo has hecho). Puedes confiar en ella una sola vez o en todas las sesiones futuras. + +Confiar en archivos en una carpeta con Copilot CLI + +Después de confiar en la carpeta, puedes iniciar sesión con tu cuenta de GitHub. + +``` +> /login +``` + +**Qué sucede a continuación (terminal local):** + +1. Elige iniciar sesión en tu cuenta de GitHub.com o en una cuenta empresarial. +2. Selecciona `Sign in with your browser (recommended)` +3. Tu navegador se abrirá automáticamente en la página de autorización de GitHub. Inicia sesión en GitHub si aún no lo has hecho. +4. Selecciona "Authorize" para otorgar acceso a GitHub Copilot CLI. +5. Regresa a tu terminal — ¡ahora has iniciado sesión! + +> 💡 **Terminales remotos o sin interfaz gráfica**: Si estás en un servidor remoto o en una terminal sin navegador (como SSH), Copilot CLI recurre al **flujo de códigos de dispositivo** en su lugar. Verás un código de una sola vez como `ABCD-1234`. Visita [github.com/login/device](https://github.com/login/device) en un navegador en otra máquina e introduce el código para completar el inicio de sesión. Para forzar un flujo específico, usa `copilot login --web-flow` para usar la ventana emergente del navegador o `copilot login --device-code` para usar el flujo basado en código. También puedes elegir interactivamente con `/login`. +> +> Flujo de autorización de dispositivo: muestra el proceso de 5 pasos desde el inicio de sesión en la terminal hasta la confirmación +> + +*El flujo basado en el navegador: tu navegador se abre automáticamente y autorizas con un solo clic. En terminales remotos/sin interfaz gráfica, se muestra un código de dispositivo en su lugar.* + +**Consejo**: El inicio de sesión persiste entre sesiones. Solo necesitas hacerlo una vez, a menos que tu token expire o cierres sesión explícitamente. + +--- + +## Verificar que funciona + +### Paso 1: Probar Copilot CLI + +Ahora que has iniciado sesión, verifiquemos que Copilot CLI funciona para ti. En la terminal, inicia la CLI si aún no lo has hecho: + +```bash +> Say hello and tell me what you can help with +``` + +Después de recibir una respuesta, puedes salir de la CLI: + +```bash +> /exit +``` + +--- + +
+🎬 ¡Míralo en acción! + +![Demostración: Hello](../../../00-quick-start/assets/hello-demo.gif) + +*La salida de la demostración varía. Tu modelo, herramientas y respuestas serán diferentes de lo que se muestra aquí.* + +
+ +--- + +**Salida esperada**: Una respuesta amigable que enumere las capacidades de Copilot CLI. + +### Paso 2: Ejecuta la aplicación de ejemplo del libro + +El curso proporciona una aplicación de ejemplo que explorarás y mejorarás a lo largo del curso usando la CLI *(puedes ver el código en /samples/book-app-project)*. Verifica que la *aplicación de terminal de colección de libros en Python* funcione antes de comenzar. Ejecuta `python` o `python3` dependiendo de tu sistema. + +> **Nota:** Los ejemplos principales mostrados a lo largo del curso usan Python (`samples/book-app-project`), por lo que necesitarás tener [Python 3.10+](https://www.python.org/downloads/) disponible en tu máquina local si elegiste esa opción (el Codespace ya lo tiene instalado). También hay versiones en JavaScript (`samples/book-app-project-js`) y C# (`samples/book-app-project-cs`) si prefieres trabajar con esos lenguajes. Cada muestra tiene un README con instrucciones para ejecutar la aplicación en ese lenguaje. + +```bash +cd samples/book-app-project +python book_app.py list +``` + +**Salida esperada**: Una lista de 5 libros que incluye "The Hobbit", "1984" y "Dune". + +### Paso 3: Prueba Copilot CLI con la aplicación del libro + +Navega de vuelta a la raíz del repositorio primero (si ejecutaste el Paso 2): + +```bash +cd ../.. # Volver a la raíz del repositorio si es necesario +copilot +> What does @samples/book-app-project/book_app.py do? +``` + +**Salida esperada**: Un resumen de las funciones principales y comandos de la aplicación del libro. + +Si ves un error, consulta la [sección de solución de problemas](#no-tienes-acceso-a-github-copilot) abajo. + +Una vez que hayas terminado, puedes salir de Copilot CLI: + +```bash +> /exit +``` + +--- + +## ✅ ¡Estás listo! + +Eso es todo por la instalación. La verdadera diversión comienza en el Capítulo 01, donde: + +- Verás a la IA revisar la aplicación del libro y encontrar problemas de calidad de código al instante +- Aprenderás tres formas diferentes de usar Copilot CLI +- Generarás código funcional a partir de lenguaje natural + +**[Continuar al Capítulo 01: Primeros pasos →](../01-setup-and-first-steps/README.md)** + +--- + +## Solución de problemas + +### "copilot: command not found" + +La CLI no está instalada. Prueba un método de instalación diferente: + +```bash +# Si brew falló, prueba con npm: +npm install -g @github/copilot + +# O el script de instalación: +curl -fsSL https://gh.io/copilot-install | bash +``` + +### "No tienes acceso a GitHub Copilot" + +1. Verifica que tienes una suscripción a Copilot en [github.com/settings/copilot](https://github.com/settings/copilot) +2. Comprueba que tu organización permite el acceso a la CLI si usas una cuenta de trabajo + +### "Autenticación fallida" + +Vuelve a autenticarte: + +```bash +copilot +> /login +``` + +### El navegador no se abre automáticamente + +En terminales remotos o sin interfaz gráfica, se usa en su lugar el flujo de códigos de dispositivo. Tu terminal mostrará un código de una sola vez. Visita [github.com/login/device](https://github.com/login/device) e introduce el código, luego autoriza el acceso. + +### Token expirado + +Simplemente ejecuta `/login` de nuevo: + +```bash +copilot +> /login +``` + +### ¿Sigues atascado? + +- Consulta la [documentación de GitHub Copilot CLI](https://docs.github.com/copilot/concepts/agents/about-copilot-cli) +- Busca en [GitHub Issues](https://github.com/github/copilot-cli/issues) + +--- + +## 🔑 Puntos clave + +1. **Un GitHub Codespace es una forma rápida de comenzar**: Python, pytest y GitHub Copilot CLI vienen preinstalados para que puedas empezar directamente con las demostraciones +2. **Múltiples métodos de instalación** - Elige lo que funcione para tu sistema (Homebrew, WinGet, npm o script de instalación) +3. **Autenticación única** - El inicio de sesión persiste hasta que el token expire +4. **La aplicación del libro funciona** - Usarás `samples/book-app-project` durante todo el curso + +> 📚 **Documentación oficial**: [Instalar Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-cli/cli-getting-started) para opciones de instalación y requisitos. + +> 📋 **Referencia rápida**: Consulta la [referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para una lista completa de comandos y atajos. + +--- + +**[Continuar al Capítulo 01: Primeros pasos →](../01-setup-and-first-steps/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/01-setup-and-first-steps/README.md b/translations/es/01-setup-and-first-steps/README.md new file mode 100644 index 00000000..d9267333 --- /dev/null +++ b/translations/es/01-setup-and-first-steps/README.md @@ -0,0 +1,723 @@ + + +![Capítulo 01: Primeros pasos](../../../01-setup-and-first-steps/assets/chapter-header.png) + +> **Observa cómo la IA encuentra errores al instante, explica código confuso y genera scripts funcionales. Luego aprende tres formas diferentes de usar GitHub Copilot CLI.** + +This chapter is where the magic starts! You'll experience firsthand why developers describe GitHub Copilot CLI as having a senior engineer on speed dial. You'll watch AI find security bugs in seconds, get complex code explained in plain English, and generate working scripts instantly. Then you'll master the three interaction modes (Interactive, Plan, and Programmatic) so you know exactly which one to use for any task. + +> ⚠️ **Prerequisites**: Make sure you've completed **[Chapter 00: Quick Start](../00-quick-start/README.md)** first. You'll need GitHub Copilot CLI installed and authenticated before running the demos below. + +## 🎯 Learning Objectives + +By the end of this chapter, you'll be able to: + +- Experience the productivity boost GitHub Copilot CLI provides through hands-on demos +- Choose the right mode (Interactive, Plan, or Programmatic) for any task +- Use slash commands to control your sessions + +> ⏱️ **Estimated Time**: ~45 minutes (15 min reading + 30 min hands-on) + +--- + +# Your First Copilot CLI Experience + +Desarrollador sentado en un escritorio con código en el monitor y partículas brillantes que representan la asistencia de la IA + +Sumérgete y descubre lo que Copilot CLI puede hacer. + +--- + +## Getting Comfortable: Your First Prompts + +Before diving into the impressive demos, let's start with some simple prompts you can try right now. **No code repository needed**! Just open a terminal and start Copilot CLI: + +```bash +copilot +``` + +Try these beginner-friendly prompts: + +``` +> Explain what a dataclass is in Python in simple terms + +> Write a function that sorts a list of dictionaries by a specific key + +> What's the difference between a list and a tuple in Python? + +> Give me 5 best practices for writing clean Python code +``` + +Don't use Python? No problem! Just ask questions about your language of choice. + +Notice how natural it feels. Just ask questions like you would to a colleague. When you're done exploring, type `/exit` to leave the session. + +**The key insight**: GitHub Copilot CLI is conversational. You don't need special syntax to get started. Just ask questions in plain English. + +## See It In Action + +Now let's see why developers are calling this "having a senior engineer on speed dial." + +> 📖 **Reading the Examples**: Lines starting with `>` are prompts you type inside an interactive Copilot CLI session. Lines without a `>` prefix are shell commands you run in your terminal. + +> 💡 **About Example Outputs**: The sample outputs shown throughout this course are illustrative. Because Copilot CLI's responses vary each time, your results will differ in wording, formatting, and detail. Focus on the *type* of information returned, not the exact text. + +### Demo 1: Code Review in Seconds + +The course includes sample files with intentional code quality issues. If you're working on your local machine and haven't already cloned the repo, please run the `git clone` command below, navigate to the `copilot-cli-for-beginners` folder, and then run the `copilot` command. + +```bash +# Clona el repositorio del curso si estás trabajando localmente y aún no lo has hecho +git clone https://github.com/github/copilot-cli-for-beginners +cd copilot-cli-for-beginners + +# Inicia Copilot +copilot +``` + +Once inside the interactive Copilot CLI session, run the following: + +``` +> Review @samples/book-app-project/book_app.py for code quality issues and suggest improvements +``` + +> 💡 **What's the `@` symbol used for?** The `@` symbol tells Copilot CLI to read a file. You'll learn all about this in Chapter 02. For now, just copy the command exactly as shown. + +--- + +
+🎬 Verlo en acción + +![Demostración de revisión de código](../../../01-setup-and-first-steps/assets/code-review-demo.gif) + +*La salida de la demostración varía. Tu modelo, herramientas y respuestas serán diferentes de lo mostrado aquí.* + +
+ +--- + +**The takeaway**: A professional code review in seconds. Manual review would take...well...more time than that! + +--- + +### Demo 2: Explain Confusing Code + +Ever stared at code wondering what it does? Try this in your Copilot CLI session: + +``` +> Explain what @samples/book-app-project/books.py does in simple terms +``` + +--- + +
+🎬 Verlo en acción + +![Demostración de explicación de código](../../../01-setup-and-first-steps/assets/explain-code-demo.gif) + +*Demo output varies. Your model, tools, and responses will differ from what's shown here.* + +
+ +--- + +**What happens**: (your output will differ) Copilot CLI reads the file, understands the code, and explains it in plain English. + +``` +This is a book collection management module using Python dataclasses. + +Think of it like a digital bookshelf: +- Book is a dataclass - a simple way to store book information (title, author, year, read status) +- BookCollection manages the entire collection and handles saving/loading + +Key components: + +1. @dataclass decorator (line 8) + - Automatically creates __init__, __repr__, etc. + - Clean way to define data structures in Python + +2. BookCollection class (line 16) + - Maintains a list of Book objects + - Handles persistence with JSON file I/O + - load_books() reads from data.json + - save_books() writes to data.json using asdict() + +3. Book operations: + - add_book() - creates and saves new books + - find_book_by_title() - searches collection + - mark_as_read() - updates read status + - find_by_author() - filters by author name + +Common pattern: Read from JSON → Work with Python objects → Write back to JSON +``` + +**The takeaway**: Complex code explained like a patient mentor would explain it. + +--- + +### Demo 3: Generate Working Code + +Need a function you'd otherwise spend 15 minutes googling? Still in your session: + +``` +> Write a Python function that takes a list of books and returns statistics: + total count, number read, number unread, oldest and newest book +``` + +--- + +
+🎬 Verlo en acción + +![Demostración de generación de código](../../../01-setup-and-first-steps/assets/generate-code-demo.gif) + +*Demo output varies. Your model, tools, and responses will differ from what's shown here.* + +
+ +--- + +**What happens**: A complete, working function in seconds that you can copy-paste-run. + +When you're done exploring, exit the session: + +``` +> /exit +``` + +**The takeaway**: Instant gratification, and you stayed in one continuous session the whole time. + +--- + +# Modes and Commands + +Panel de control futurista con pantallas luminosas, diales y ecualizadores que representan los modos y comandos de Copilot CLI + +You've just seen what Copilot CLI can do. Now let's understand *how* to use these capabilities effectively. The key is knowing which of the three interaction modes to use for different situations. + +> 💡 **Note**: Copilot CLI also has an **Autopilot** mode where it works through tasks without waiting for your input. It's powerful but requires granting full permissions and uses premium requests autonomously. This course focuses on the three modes below. We'll point you to Autopilot once you're comfortable with the basics. + +--- + +## 🧩 Real-World Analogy: Dining Out + +Think of using GitHub Copilot CLI like going out to eat. From planning the trip to placing your order, different situations call for different approaches: + +| Modo | Analogía gastronómica | Cuándo usarlo | +|------|----------------|-------------| +| **Plan** | Ruta GPS al restaurante | Tareas complejas: traza la ruta, revisa las paradas, acuerda el plan y luego ejecútalo | +| **Interactive** | Hablar con el camarero | Exploración e iteración: haz preguntas, personaliza, obtén retroalimentación en tiempo real | +| **Programmatic** | Pedido por drive-through | Tareas rápidas y específicas: permanece en tu entorno y obtén un resultado rápido | + +Just like dining out, you'll naturally learn when each approach feels right. + +Tres formas de usar GitHub Copilot CLI - Modo Plan (ruta GPS al restaurante), Modo Interactive (hablar con el camarero), Modo Programmatic (drive-through) + +*Choose your mode based on the task: Plan for mapping it out first, Interactive for back-and-forth collaboration, Programmatic for quick one-shot results* + +### Which Mode Should I Start With? + +**Start with Interactive mode.** +- You can experiment and ask follow-up questions +- Context builds naturally through conversation +- Mistakes are easy to correct with `/clear` + +Once you're comfortable, try: +- **Programmatic mode** (`copilot -p ""`) for quick, one-off questions +- **Plan mode** (`/plan`) when you need to plan things out in more detail before coding + +--- + +## The Three Modes + +### Modo 1: Interactive Mode (comienza aquí) + +Interactive Mode: como hablar con un camarero que puede responder preguntas y ajustar el pedido + +**Best for**: Exploration, iteration, multi-turn conversations. Like talking to a waiter who can answer questions, take feedback, and adjust the order on the fly. + +Start an interactive session: + +```bash +copilot +``` + +As you've seen up to this point, you'll see a prompt where you can type naturally. To get help on available commands, just type: + +``` +> /help +``` + +**Key insight**: Interactive mode maintains context. Each message builds on previous ones, just like a real conversation. + +#### Ejemplo del modo Interactive + +```bash +copilot + +> Review @samples/book-app-project/utils.py and suggest improvements + +> Add type hints to all functions + +> Make the error handling more robust + +> /exit +``` + +Notice how each prompt builds on the previous answer. You're having a conversation, not starting over each time. + +--- + +### Modo 2: Plan Mode + +Plan Mode: como planear una ruta antes de un viaje usando GPS + +**Best for**: Complex tasks where you want to review the approach before execution. Similar to planning a route before a trip using GPS. + +Plan mode helps you create a step-by-step plan before writing any code. Use the `/plan` command, press **Shift+Tab** to cycle into Plan Mode: + +```bash +copilot + +> /plan Add a "mark as read" command to the book app +``` + +> 💡 **Tip**: **Shift+Tab** cycles between modes: Interactive → Plan → Autopilot. Press it anytime during an interactive session to switch modes without typing a command. + +You can also launch Copilot CLI directly in plan mode using the `--plan` flag: + +```bash +copilot --plan +``` + +**Plan mode output:** (your output may differ) + +``` +📋 Implementation Plan + +Step 1: Update the command handler in book_app.py + - Add new elif branch for "mark" command + - Create handle_mark_as_read() function + +Step 2: Implement the handler function + - Prompt user for book title + - Call collection.mark_as_read(title) + - Display success/failure message + +Step 3: Update help text + - Add "mark" to available commands list + - Document the command usage + +Step 4: Test the flow + - Add a book + - Mark it as read + - Verify status changes in list output + +Proceed with implementation? [Y/n] +``` + +**Key insight**: Plan mode lets you review and modify the approach before any code is written. While in plan mode, Copilot CLI is **read-only** and will not edit any files or run commands that change your workspace until you approve and move to implementation. This keeps you safely in the "thinking" stage until you're ready. Once a plan is complete, you can even tell Copilot CLI to save it to a file for later reference. For example, "Save this plan to `mark_as_read_plan.md`" would create a markdown file with the plan details. + +> 💡 **Want something more complex?** Try: `/plan Add search and filter capabilities to the book app`. Plan mode scales from simple features to full applications. + +> 📚 **Autopilot mode**: You may have noticed Shift+Tab cycles through a third mode called **Autopilot**. In autopilot mode, Copilot works through an entire plan without waiting for your input after each step — like handing a task to a colleague and saying "let me know when you're finished." The typical workflow is plan → accept → autopilot, which means you need to be good at writing plans first. You can also launch directly into autopilot with `copilot --autopilot`. Get comfortable with Interactive and Plan modes first, then see the [official docs](https://docs.github.com/copilot/concepts/agents/copilot-cli/autopilot) when you're ready. + +--- + +### Modo 3: Programmatic Mode + +Programmatic Mode: como usar un drive-through para un pedido rápido + +**Best for**: Automation, scripts, CI/CD, single-shot commands. Like using a drive-through for a quick order without needing to talk to a waiter. + +Use the `-p` flag for one-time commands that don't need interaction: + +```bash +# Generar código +copilot -p "Write a function that checks if a number is even or odd" + +# Obtener ayuda rápida +copilot -p "How do I read a JSON file in Python?" +``` + +**Key insight**: Programmatic mode gives you a quick answer and exits. No conversation, just input → output. + +
+📚 Más a fondo: Uso del modo Programmatic en scripts (clic para expandir) + +Once you're comfortable, you can use `-p` in shell scripts: + +```bash +#!/bin/bash + +# Generar mensajes de commit automáticamente +COMMIT_MSG=$(copilot -p "Generate a commit message for: $(git diff --staged)") +git commit -m "$COMMIT_MSG" + +# Revisar un archivo +copilot --allow-all -p "Review @myfile.py for issues" +``` +> ⚠️ **Sobre `--allow-all`**: Esta bandera omite todas las solicitudes de permiso, permitiendo que Copilot CLI lea archivos, ejecute comandos y acceda a URLs sin preguntar primero. Esto es necesario para el modo programmatic (`-p`) ya que no hay una sesión interactiva para aprobar acciones. Usa `--allow-all` solo con prompts que hayas escrito tú mismo y en directorios que confíes. Nunca lo uses con entradas no confiables o en directorios sensibles. + +
+ +--- + +## Essential Slash Commands + +These commands are great to learn initially as you're getting started with Copilot CLI: + +| Comando | Qué hace | Cuándo usar | +|---------|--------------|-------------| +| `/ask` | Ask a quick question without it affecting your conversation history | When you want a quick answer without derailing your current task | +| `/clear` | Clear conversation and start fresh | When switching topics | +| `/help` | Show all available commands | When you forget a command | +| `/model` | Show or switch AI model | When you want to change the AI model | +| `/plan` | Plan your work out before coding | For more complex features | +| `/refine` | Rewrite a rough, stream-of-consciousness prompt into a clear, focused one | When your prompt feels messy and you want better results | +| `/research` | Deep research using GitHub and web sources | When you need to investigate a topic before coding | + +| `/exit` | Finalizar la sesión | Cuando hayas terminado | + +> 💡 **`/ask` vs regular chat**: Normalmente cada mensaje que envías pasa a formar parte de la conversación en curso y afecta a las respuestas futuras. `/ask` es un atajo "fuera de registro" — perfecto para preguntas rápidas y puntuales como `/ask What does YAML mean?` sin contaminar el contexto de tu sesión. + +> 💡 **`/refine` for better prompts**: ¿No estás seguro de si tu prompt es lo suficientemente claro? Escríbelo tal como te venga a la mente, luego ejecuta `/refine` para que Copilot lo reescriba en un prompt preciso y bien estructurado antes de enviarlo. Esto es especialmente útil cuando eres nuevo en herramientas de IA y estás aprendiendo a redactar prompts efectivos. + +> 💡 **Tab-completion**: Al escribir un comando con barra (/), presiona **Tab** para completar automáticamente el nombre del comando o recorrer los subcomandos y argumentos disponibles. Esto es especialmente útil cuando no recuerdas el nombre exacto de un comando. + +¡Eso es todo para empezar! A medida que te sientas cómodo, puedes explorar comandos adicionales. + +> 📚 **Official Documentation**: [Referencia de comandos de la CLI](https://docs.github.com/copilot/reference/cli-command-reference) para la lista completa de comandos y banderas. + +
+📚 Comandos adicionales (haga clic para expandir) + +> 💡 Los comandos esenciales anteriores cubren gran parte de lo que harás en el uso diario. Esta referencia está aquí para cuando estés listo para explorar más. + +### Entorno del agente + +| Comando | Qué hace | +|---------|--------------| +| `/agent` | Examinar y seleccionar entre los agentes disponibles | +| `/env` | Mostrar detalles del entorno cargado — qué instrucciones, servidores MCP, habilidades, agentes y plugins están activos | +| `/init` | Inicializar las instrucciones de Copilot para tu repositorio | +| `/mcp` | Administrar la configuración del servidor MCP | +| `/plugins` | Habilitar o deshabilitar plugins, instrucciones, agentes, servidores LSP y hooks sin reiniciar la sesión | +| `/settings` | Abrir un diálogo interactivo para explorar y editar todos los ajustes de usuario en un solo lugar | +| `/skills` | Gestionar habilidades para capacidades mejoradas | + +> 💡 Los agentes se tratan en [Capítulo 04](../04-agents-custom-instructions/README.md), las habilidades se tratan en [Capítulo 05](../05-skills/README.md), y los servidores MCP se tratan en [Capítulo 06](../06-mcp-servers/README.md). + +### Models and Subagents + +| Comando | Qué hace | +|---------|--------------| +| `/delegate` | Delegar la tarea a un agente en la nube de GitHub Copilot | +| `/fleet` | Dividir una tarea compleja en subtareas paralelas para una finalización más rápida | +| `/model` | Mostrar o cambiar el modelo de IA | +| `/tasks` | Ver subagentes en segundo plano y sesiones de shell desacopladas | + +### Código + +| Comando | Qué hace | +|---------|--------------| +| `/diff` | Revisar los cambios realizados en el directorio actual | +| `/pr` | Operar sobre pull requests de la rama actual | +| `/research` | Realizar una investigación profunda usando GitHub y fuentes web | +| `/review` | Ejecutar el agente de revisión de código para analizar cambios | +| `/terminal-setup` | Habilitar soporte de entrada multilínea (shift+enter y ctrl+enter) | + +### Permisos + +| Comando | Qué hace | +|---------|--------------| +| `/add-dir ` | Agregar un directorio a la lista permitida | +| `/allow-all [on\|off\|show]` | Aprobar automáticamente todas las solicitudes de permiso; usa `on` para habilitar, `off` para deshabilitar, `show` para comprobar el estado actual | +| `/permissions` | Cambiar entre modos de aprobación (interactivo, plan, piloto automático) para controlar cuánto puede hacer Copilot sin pedir permiso | +| `/yolo` | Alias rápido para `/allow-all on` — aprueba automáticamente todas las solicitudes de permiso. | +| `/cwd`, `/cd [directory]` | Ver o cambiar el directorio de trabajo | +| `/list-dirs` | Mostrar todos los directorios permitidos | + +> ⚠️ **Use with caution**: `/allow-all` and `/yolo` skip confirmation prompts. Great for trusted projects, but be careful with untrusted code. + +### Sesión + +| Comando | Qué hace | +|---------|--------------| +| `/clear` | Abandona la sesión actual (no se guarda el historial) y comienza una conversación nueva | +| `/compact` | Resumir la conversación para reducir el uso de contexto (opcionalmente agrega instrucciones de enfoque, p. ej. `/compact focus on the bug list`) | +| `/context` | Mostrar el uso de tokens de la ventana de contexto y visualización | +| `/keep-alive` | Impedir que tu sistema entre en suspensión mientras Copilot CLI está activo — útil para tareas de larga duración en un portátil | +| `/memory [on\|off\|show]` | Habilitar, deshabilitar o ver la memoria persistente — hechos y preferencias recordados en todas las sesiones | +| `/new` | Termina la sesión actual (guardándola en el historial para búsqueda/recuperación) y comienza una conversación nueva. | +| `/resume` | Cambiar a una sesión diferente (opcionalmente especifica el ID o nombre de la sesión) | +| `/rename` | Renombrar la sesión actual (omitir el nombre para generar uno automáticamente) | +| `/rewind` | Abrir un selector de línea de tiempo para retroceder a cualquier punto anterior en la conversación | +| `/usage` | Mostrar métricas y estadísticas de uso de la sesión, incluyendo barras de progreso de cuota | +| `/session` | Mostrar información de la sesión y resumen del espacio de trabajo; usa `/session delete`, `/session delete `, o `/session delete-all` para eliminar sesiones | +| `/share` | Exportar la sesión como un archivo markdown, un gist de GitHub o un archivo HTML autónomo | +| `/every ` | Programar un prompt para ejecutarse en un intervalo recurrente (p. ej., `/every 1h summarize new commits`). Usa lenguaje natural para el intervalo. `/loop` es un alias de `/every`. | +| `/after
+ +--- + +# Práctica + +Configuración de escritorio acogedora con monitor mostrando código, lámpara, taza de café y auriculares listos para practicar + +Es hora de poner en práctica lo que has aprendido. + +--- + +## ▶️ Pruébalo tú mismo + +### Exploración interactiva + +Inicia Copilot y usa prompts de seguimiento para mejorar iterativamente la aplicación de libros: + +```bash +copilot + +> Review @samples/book-app-project/book_app.py - what could be improved? + +> Refactor the if/elif chain into a more maintainable structure + +> Add type hints to all the handler functions + +> /exit +``` + +### Planificar una función + +Usa `/plan` para que Copilot CLI trace una implementación antes de escribir código: + +```bash +copilot + +> /plan Add a search feature to the book app that can find books by title or author + +# Revisar el plan +# Aprobar o modificar +# Observar su implementación paso a paso +``` + +### Automatizar con el modo programático + +La bandera `-p` te permite ejecutar Copilot CLI directamente desde tu terminal sin entrar en modo interactivo. Copia y pega el siguiente script en tu terminal (no dentro de Copilot) desde la raíz del repositorio para revisar todos los archivos Python de la aplicación de libros. + +```bash +# Revisar todos los archivos Python en la aplicación del libro +for file in samples/book-app-project/*.py; do + echo "Reviewing $file..." + copilot --allow-all -p "Quick code quality review of @$file - critical issues only" +done +``` + +**PowerShell (Windows):** + +```powershell +# Revisar todos los archivos Python en la aplicación book +Get-ChildItem samples/book-app-project/*.py | ForEach-Object { + $relativePath = "samples/book-app-project/$($_.Name)"; + Write-Host "Reviewing $relativePath..."; + copilot --allow-all -p "Quick code quality review of @$relativePath - critical issues only" +} +``` + +--- + +Después de completar las demostraciones, prueba estas variaciones: + +1. **Desafío interactivo**: Inicia `copilot` y explora la aplicación de libros. Pregunta sobre `@samples/book-app-project/books.py` y solicita mejoras 3 veces seguidas. + +2. **Desafío en modo Plan**: Ejecuta `/plan Add rating and review features to the book app`. Lee el plan cuidadosamente. ¿Tiene sentido? + +3. **Desafío programático**: Ejecuta `copilot --allow-all -p "List all functions in @samples/book-app-project/book_app.py and describe what each does"`. ¿Funcionó a la primera? + +--- + +## 💡 Consejo: Controla tu sesión de CLI desde la web o el móvil + +GitHub Copilot CLI soporta **sesiones remotas**, lo que te permite supervisar e interactuar con una sesión CLI en ejecución desde un navegador web (en escritorio o móvil) o desde la app GitHub Mobile sin estar físicamente en tu terminal. + +Inicia una sesión remota con la bandera `--remote`: + +```bash +copilot --remote +``` + +Copilot CLI mostrará un enlace y proporcionará acceso a un código QR. Abre el enlace en tu teléfono o en una pestaña del navegador en el escritorio para ver la sesión en tiempo real, enviar prompts de seguimiento, revisar planes y dirigir el agente de forma remota. Las sesiones son específicas del usuario, por lo que solo puedes acceder a tus propias sesiones de Copilot CLI. + +También puedes habilitar el acceso remoto desde dentro de una sesión activa en cualquier momento: + +``` +> /remote +``` + +Puedes encontrar más detalles sobre las sesiones remotas en la [documentación de Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-cli/steer-remotely). + +--- + +## 📝 Tarea + +### Desafío principal: Mejorar las utilidades de la aplicación de libros + +Los ejemplos prácticos se centraron en revisar y refactorizar `book_app.py`. Ahora practica las mismas habilidades en un archivo diferente, `utils.py`: + +1. Inicia una sesión interactiva: `copilot` +2. Pide a Copilot CLI que resuma el archivo: "Haz un resumen de @samples/book-app-project/utils.py y explica qué hace cada función en este archivo" +3. Pídele que añada validación de entrada: "Agrega validación a `get_user_choice()` para que maneje entradas vacías y entradas no numéricas" +4. Pídele que mejore el manejo de errores: "¿Qué ocurre si `get_book_details()` recibe una cadena vacía para el título? Añade protecciones para eso." +5. Pide un docstring: "Agrega un docstring completo a `get_book_details()` con descripciones de parámetros y valores de retorno" +6. Observa cómo el contexto se mantiene entre prompts. Cada mejora se basa en la anterior +7. Sal con `/exit` + +**Criterios de éxito**: Deberías tener un `utils.py` mejorado con validación de entrada, manejo de errores y un docstring, todo construido mediante una conversación de múltiples turnos. + +
+💡 Sugerencias (haz clic para expandir) + +**Ejemplos de prompts para probar:** +```bash +> @samples/book-app-project/utils.py What does each function in this file do? +> Add validation to get_user_choice() so it handles empty input and non-numeric entries +> What happens if get_book_details() receives an empty string for the title? Add guards for that. +> Add a comprehensive docstring to get_book_details() with parameter descriptions and return values +``` + +**Problemas comunes:** +- Si Copilot CLI hace preguntas aclaratorias, simplemente respóndelas de forma natural +- El contexto se conserva, por lo que cada prompt se basa en el anterior +- Usa `/clear` si quieres empezar de nuevo + +
+ +### Reto adicional: Compara los modos + +Los ejemplos usaron `/plan` para una función de búsqueda y `-p` para revisiones por lotes. Ahora prueba los tres modos en una única tarea nueva: añadir un método `list_by_year()` a la clase `BookCollection`: + +1. **Interactivo**: `copilot` → pídele que diseñe y construya el método paso a paso +2. **Plan**: `/plan Add a list_by_year(start, end) method to BookCollection that filters books by publication year range` +3. **Programático**: `copilot --allow-all -p "@samples/book-app-project/books.py Add a list_by_year(start, end) method that returns books published between start and end year inclusive"` + +**Reflexión**: ¿Qué modo te pareció más natural? ¿Cuándo usarías cada uno? + +--- + +
+🔧 Errores comunes y solución de problemas (haz clic para expandir) + +### Errores comunes + +| Error | Qué ocurre | Solución | +|---------|--------------|-----| +| Typing `exit` instead of `/exit` | Copilot CLI interpreta "exit" como un prompt, no como un comando | Los comandos con barra siempre comienzan con `/` | + +| Usar `-p` para conversaciones de múltiples turnos | Cada llamada `-p` está aislada y no tiene memoria de llamadas anteriores | Use el modo interactivo (`copilot`) para conversaciones que se basan en el contexto | +| Olvidar las comillas alrededor de las indicaciones que contienen `$` o `!` | El shell interpreta los caracteres especiales antes de que Copilot CLI los vea | Envuelva las indicaciones entre comillas simples: `copilot -p '¿Qué significa $HOME?'` | +| Presionar Esc una vez para cancelar una tarea en ejecución | Un solo Esc ya no cancela el trabajo en curso (para evitar accidentes) | Presione **Esc dos veces** para cancelar mientras Copilot CLI está procesando | + +### Solución de problemas + +**"Modelo no disponible"** - Tu suscripción puede no incluir todos los modelos. Usa `/model` para ver qué está disponible. + +**"Contexto demasiado largo"** - Tu conversación ha usado toda la ventana de contexto. Usa `/clear` para restablecer, o inicia una nueva sesión. + +**"Límite de tasa excedido"** - Espera unos minutos y vuelve a intentarlo. Considera usar el modo programático para operaciones por lotes con retrasos. + +
+ +--- + +# Resumen + +## 🔑 Puntos clave + +1. **Modo interactivo** es para exploración e iteración - el contexto se conserva. Es como tener una conversación con alguien que recuerda lo que has dicho hasta ese punto. +2. **Modo Plan** es normalmente para tareas más complejas. Revisa antes de implementar. +3. **Modo programático** es para automatización. No se necesita interacción. +4. **Comandos esenciales** (`/ask`, `/help`, `/clear`, `/plan`, `/research`, `/model`, `/exit`) cubren la mayoría del uso diario. + +> 📋 **Referencia rápida**: Consulta la [Referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para una lista completa de comandos y atajos. + +--- + +## ➡️ ¿Qué sigue? + +Ahora que entiendes los tres modos, aprendamos cómo darle contexto a Copilot CLI sobre tu código. + +En **[Capítulo 02: Contexto y conversaciones](../02-context-conversations/README.md)**, aprenderás: + +- La sintaxis `@` para referenciar archivos y directorios +- Gestión de sesiones con `--resume` y `--continue` +- Cómo la gestión del contexto hace que Copilot CLI sea realmente potente + +--- + +**[← Volver al inicio del curso](../README.md)** | **[Continuar al Capítulo 02 →](../02-context-conversations/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/02-context-conversations/README.md b/translations/es/02-context-conversations/README.md new file mode 100644 index 00000000..cb4e196d --- /dev/null +++ b/translations/es/02-context-conversations/README.md @@ -0,0 +1,963 @@ + + +![Capítulo 02: Contexto y conversaciones](../../../02-context-conversations/assets/chapter-header.png) + +> **¿Y si la IA pudiera ver todo tu repositorio de código, no solo un archivo a la vez?** + +En este capítulo, desbloquearás el verdadero poder de GitHub Copilot CLI: el contexto. Aprenderás a usar la sintaxis `@` para referenciar archivos y directorios, dándole a Copilot CLI una comprensión profunda de tu base de código. Descubrirás cómo mantener conversaciones a través de sesiones, reanudar el trabajo días después exactamente donde lo dejaste, y verás cómo el análisis entre archivos detecta errores que las revisiones de un solo archivo pasan por alto por completo. + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, podrás: + +- Usar la sintaxis `@` para referenciar archivos, directorios e imágenes +- Reanudar sesiones previas con `--resume` y `--continue` +- Entender cómo funcionan las [ventanas de contexto](../GLOSSARY.md#ventana-de-contexto) +- Escribir conversaciones multironda efectivas +- Gestionar permisos de directorio para flujos de trabajo multi-proyecto + +> ⏱️ **Tiempo estimado**: ~50 minutos (20 min lectura + 30 min práctica) + +--- + +## 🧩 Analogía del mundo real: Trabajar con un colega + +El contexto marca la diferencia - Sin contexto vs Con contexto + +*Al igual que tus colegas, Copilot CLI no es un lector de mentes. Proporcionar más información ayuda tanto a las personas como a Copilot a ofrecer soporte más específico.* + +Imagina explicar un error a un colega: + +> **Sin contexto**: "La aplicación de libros no funciona." + +> **Con contexto**: "Mira `books.py`, especialmente la función `find_book_by_title`. No está haciendo una comparación que ignore mayúsculas y minúsculas." + +Para darle contexto a Copilot CLI, usa *la sintaxis `@`* para indicarle archivos específicos. + +--- + +# Esencial: Contexto básico + +Bloques de código brillantes conectados por rastros de luz que representan cómo fluye el contexto a través de las conversaciones de Copilot CLI + +Esta sección cubre todo lo que necesitas para trabajar de forma eficaz con el contexto. Domina estos conceptos básicos primero. + +--- + +## La sintaxis @ + +El símbolo `@` referencia archivos y directorios en tus indicaciones. Es la forma de decirle a Copilot CLI "mira este archivo." + +> 💡 **Nota**: Todos los ejemplos en este curso usan la carpeta `samples/` incluida en este repositorio, así que puedes probar cada comando directamente. + +### Pruébalo ahora (no se requiere configuración) + +Puedes probar esto con cualquier archivo en tu equipo: + +```bash +copilot + +# Señala cualquier archivo que tengas +> Explain what @package.json does +> Summarize @README.md +> What's in @.gitignore and why? +``` + +> 💡 **¿No tienes un proyecto a la mano?** Crea un archivo de prueba rápido: +> ```bash +> echo "def greet(name): return 'Hello ' + name" > test.py +> copilot +> > What does @test.py do? +> ``` + +### Patrones básicos de @ + +| Patrón | Lo que hace | Ejemplo de uso | +|---------|--------------|-------------| +| `@file.py` | Referenciar un solo archivo | `Review @samples/book-app-project/books.py` | +| `@folder/` | Referenciar todos los archivos en un directorio | `Review @samples/book-app-project/` | +| `@file1.py @file2.py` | Referenciar múltiples archivos | `Compare @samples/book-app-project/book_app.py @samples/book-app-project/books.py` | + +### Referenciar un solo archivo + +```bash +copilot + +> Explain what @samples/book-app-project/utils.py does +``` + +--- + +
+🎬 ¡Míralo en acción! + +![Demostración de contexto de archivo](../../../02-context-conversations/assets/file-context-demo.gif) + +*La salida de la demo varía. Tu modelo, herramientas y respuestas serán diferentes a las que se muestran aquí.* + +
+ +--- + +### Referenciar múltiples archivos + +```bash +copilot + +> Compare @samples/book-app-project/book_app.py and @samples/book-app-project/books.py for consistency +``` + +### Referenciar un directorio completo + +```bash +copilot + +> Review all files in @samples/book-app-project/ for error handling +``` + +--- + +## Inteligencia entre archivos + +Aquí es donde el contexto se vuelve una superpotencia. El análisis de un solo archivo es útil. El análisis entre archivos es transformador. + +Inteligencia entre archivos - comparación de análisis de un solo archivo vs análisis entre archivos mostrando cómo analizar archivos juntos revela errores, flujo de datos y patrones invisibles en aislamiento + +### Demostración: Encontrar errores que abarcan varios archivos + +```bash +copilot + +> @samples/book-app-project/book_app.py @samples/book-app-project/books.py +> +> How do these files work together? What's the data flow? +``` + +> 💡 **Opción avanzada**: Para análisis entre archivos enfocado en seguridad, prueba los ejemplos de seguridad en Python: +> ```bash +> > @samples/buggy-code/python/user_service.py @samples/buggy-code/python/payment_processor.py +> > Find security vulnerabilities that span BOTH files +> ``` + +--- + +
+🎬 ¡Míralo en acción! + +![Demostración de múltiples archivos](../../../02-context-conversations/assets/multi-file-demo.gif) + +*La salida de la demo varía. Tu modelo, herramientas y respuestas serán diferentes a las que se muestran aquí.* + +
+ +--- + +**Lo que descubre Copilot CLI**: + +``` +Cross-Module Analysis +===================== + +1. DATA FLOW PATTERN + book_app.py creates BookCollection instance and calls methods + books.py defines BookCollection class and manages data persistence + + Flow: book_app.py (UI) → books.py (business logic) → data.json (storage) + +2. DUPLICATE DISPLAY FUNCTIONS + book_app.py:9-21 show_books() function + utils.py:28-36 print_books() function + + Impact: Two nearly identical functions doing the same thing. If you update + one (like changing the format), you must remember to update the other. + +3. INCONSISTENT ERROR HANDLING + book_app.py handles ValueError from year conversion + books.py silently returns None/False on errors + + Pattern: No unified approach to error handling across modules +``` + +**Por qué esto importa**: Una revisión de un solo archivo pasaría por alto el panorama general. Solo el análisis entre archivos revela: +- **Código duplicado** que debería consolidarse +- **Patrones de flujo de datos** que muestran cómo interactúan los componentes +- **Problemas arquitectónicos** que afectan la mantenibilidad + +--- + +### Demostración: Entender una base de código en 60 segundos + +Comparación en pantalla dividida mostrando revisión manual de código tomando 1 hora frente a análisis asistido por IA tomando 10 segundos + +¿Nuevo en un proyecto? Conócelo rápidamente usando Copilot CLI. + +```bash +copilot + +> @samples/book-app-project/ +> +> In one paragraph, what does this app do and what are its biggest quality issues? +``` + +**Lo que obtienes**: +``` +This is a CLI book collection manager that lets users add, list, remove, and +search books stored in a JSON file. The biggest quality issues are: + +1. Duplicate display logic - show_books() and print_books() do the same thing +2. Inconsistent error handling - some errors raise exceptions, others return False +3. No input validation - year can be 0, empty strings accepted for title/author +4. Missing tests - no test coverage for critical functions like find_book_by_title + +Priority fix: Consolidate duplicate display functions and add input validation. +``` + +**Resultado**: Lo que lleva una hora de lectura de código se comprime en 10 segundos. Sabes exactamente dónde enfocarte. + +--- + +## Ejemplos prácticos + +### Ejemplo 1: Revisión de código con contexto + +```bash +copilot + +> @samples/book-app-project/books.py Review this file for potential bugs + +# Copilot CLI ahora tiene el contenido completo del archivo y puede dar retroalimentación específica: +# "Línea 49: La comparación que distingue mayúsculas y minúsculas puede omitir libros..." +# "Línea 29: Los errores al decodificar JSON se capturan pero la corrupción de datos no se registra..." + +> What about @samples/book-app-project/book_app.py? + +# Ahora revisando book_app.py, pero todavía consciente del contexto de books.py +``` + +### Ejemplo 2: Comprender una base de código + +```bash +copilot + +> @samples/book-app-project/books.py What does this module do? + +# Copilot CLI lee books.py y comprende la clase BookCollection + +> @samples/book-app-project/ Give me an overview of the code structure + +# Copilot CLI escanea el directorio y resume + +> How does the app save and load books? + +# Copilot CLI puede rastrear el código que ya ha visto +``` + +
+🎬 ¡Mira una conversación multironda en acción! + +![Demostración multironda](../../../02-context-conversations/assets/multi-turn-demo.gif) + +*La salida de la demo varía. Tu modelo, herramientas y respuestas serán diferentes a las que se muestran aquí.* + +
+ +### Ejemplo 3: Refactorización multiarchivo + +```bash +copilot + +> @samples/book-app-project/book_app.py @samples/book-app-project/utils.py +> I see duplicate display functions: show_books() and print_books(). Help me consolidate these. + +# Copilot CLI ve ambos archivos y puede sugerir cómo fusionar el código duplicado +``` + +--- + +## Gestión de sesiones + +Las sesiones se guardan automáticamente mientras trabajas. Puedes reanudar sesiones previas para continuar donde las dejaste. + +### Autoguardado de sesiones + +Cada conversación se guarda automáticamente. Simplemente sal normalmente: + +```bash +copilot + +> @samples/book-app-project/ Let's improve error handling across all modules + +[... do some work ...] + +> /exit +``` + +### Reanudar la sesión más reciente + +```bash +# Continúa donde lo dejaste +copilot --continue +``` + +### Reanudar una sesión específica + +```bash +# Seleccionar de una lista de sesiones de forma interactiva +copilot --resume + +# -r es una abreviatura de --resume (¡ahorra algo de tecleo!) +copilot -r + +# O reanudar una sesión específica por ID +copilot --resume=abc123 + +# O reanudar usando el nombre que le diste a la sesión +copilot --resume="my book app review" +``` + +> 💡 **¿Cómo encuentro un ID de sesión?** No necesitas memorizarlos. Ejecutar `copilot --resume` sin un ID muestra una lista interactiva de tus sesiones previas, sus nombres, IDs y cuándo estuvieron activas por última vez. Simplemente elige la que quieras. +> +> **¿Y qué pasa con múltiples terminales?** Cada ventana de terminal es su propia sesión con su propio contexto. Si tienes Copilot CLI abierto en tres terminales, son tres sesiones separadas. Ejecutar `--resume` desde cualquier terminal te permite navegar por todas ellas. La bandera `--continue` toma la sesión del directorio de trabajo actual primero; si no existe ninguna allí, elige la sesión más recientemente activa. +> +> **¿Puedo cambiar de sesión sin reiniciar?** Sí. Usa el comando con barra `/resume` desde dentro de una sesión activa: +> ``` +> > /resume +> # Shows a list of sessions to switch to +> ``` + +### Organiza tus sesiones + +Dale nombres significativos a las sesiones para que puedas encontrarlas después. Puedes nombrar una sesión cuando la inicias, o renombrarla en cualquier momento mientras estás dentro de la sesión: + +```bash +# Nombra una sesión justo cuando la inicias +copilot --name book-app-review + +# O renombra la sesión actual desde dentro +copilot + +> /rename book-app-review +# Sesión renombrada para facilitar su identificación +``` + +Una vez que una sesión tiene nombre, puedes reanudarla directamente por nombre sin tener que navegar por una lista: + +```bash +copilot --resume=book-app-review +``` + +Para limpiar sesiones que ya no necesitas, usa `/session delete` desde dentro de una sesión: + +```bash +copilot + +> /session delete # Elimina la sesión actual +> /session delete abc123 # Elimina una sesión específica por su ID +> /session delete-all # Elimina todas las sesiones (¡úselo con precaución!) +``` + +### Memoria persistente entre sesiones + +Las sesiones guardan el historial de tu conversación, pero la **memoria** va un paso más allá y permite que Copilot CLI recuerde preferencias y hechos *a través de todas las sesiones*, no solo dentro de una. + +```bash +copilot + +> /memory show +# Muestra lo que Copilot CLI recuerda actualmente sobre ti y tu proyecto + +> /memory on +# Habilita la memoria (activada por defecto si tu cuenta la admite) + +> /memory off +# Desactiva la memoria (útil si prefieres empezar de cero cada vez) +``` + +Por ejemplo, si le dices a Copilot CLI "Siempre prefiero pytest para pruebas en Python", puede recordar esa preferencia y aplicarla automáticamente en futuras sesiones. Todo sin que tengas que repetirlo. + +> 💡 **Memoria vs. sesiones**: Las sesiones guardan el historial de conversación para que puedas reanudar una tarea específica. La memoria guarda hechos reutilizables del repositorio y preferencias del usuario que Copilot puede aplicar en trabajos futuros. Piensa en las sesiones como cuadernos de tareas, y en la memoria como contexto reutilizable que Copilot puede llevar adelante. + +### Comprobar y gestionar el contexto + +A medida que agregas archivos y conversación, la [ventana de contexto](../GLOSSARY.md#ventana-de-contexto) de Copilot CLI se llena. Hay varios comandos disponibles para ayudarte a mantener el control: + +```bash +copilot + +> /context +Context usage: 62k/200k tokens (31%) + +> /clear +# Abandona la sesión actual (no se guarda el historial) e inicia una conversación nueva + +> /new +# Finaliza la sesión actual (guardándola en el historial para búsqueda/reanudación) e inicia una conversación nueva + +> /rewind +# Abre un selector de línea temporal que te permite retroceder a un punto anterior en tu conversación +``` + +> 💡 **Cuándo usar `/clear` o `/new`**: Si has estado revisando books.py y quieres cambiar a discutir utils.py, ejecuta /new primero (o /clear si no necesitas el historial de la sesión). De lo contrario, el contexto obsoleto del tema anterior puede confundir las respuestas. + +> 💡 **¿Cometiste un error o quieres probar un enfoque diferente?** Usa `/rewind` (o presiona Esc dos veces) para abrir un **selector de línea de tiempo** que te permite retroceder a cualquier punto anterior de tu conversación, no solo al más reciente. Esto es útil cuando has tomado un camino equivocado y quieres echarte atrás sin empezar de nuevo por completo. + +--- + +### Retomar donde lo dejaste + +Línea de tiempo que muestra cómo las sesiones de GitHub Copilot CLI persisten a través de los días - comenzar el lunes, reanudar el miércoles con el contexto completo restaurado + +*Las sesiones se autoguardan cuando sales. Reanuda días después con el contexto completo: archivos, issues y progreso, todo recordado.* + +Imagina este flujo de trabajo a lo largo de varios días: + +```bash +# Lunes: Iniciar la revisión de la aplicación de libros con un nombre desde el principio +copilot --name book-app-review + +> @samples/book-app-project/books.py +> Review and number all code quality issues + +Quality Issues Found: +1. Duplicate display functions (book_app.py & utils.py) - MEDIUM +2. No input validation for empty strings - MEDIUM +3. Year can be 0 or negative - LOW +4. No type hints on all functions - LOW +5. Missing error logging - LOW + +> Fix issue #1 (funciones duplicadas) +# Trabajar en la corrección... + +> /exit +``` + +```bash +# Miércoles: Reanuda exactamente donde lo dejaste, por nombre +copilot --resume=book-app-review + +> What issues remain unfixed from our book app review? + +Remaining issues from our book-app-review session: +2. No input validation for empty strings - MEDIUM +3. Year can be 0 or negative - LOW +4. No type hints on all functions - LOW +5. Missing error logging - LOW + +Issue #1 (funciones duplicadas) se solucionó el lunes. + +> Let's tackle issue #2 next +``` + +**Lo que hace esto poderoso**: Días después, Copilot CLI recuerda: +- El archivo exacto en el que estabas trabajando +- La lista numerada de issues +- Cuáles ya has abordado +- El contexto de tu conversación + +No volver a explicar. No volver a leer archivos. Simplemente continúa trabajando. + +--- + +**🎉 ¡Ahora conoces lo esencial!** La sintaxis `@`, la gestión de sesiones (`--name`/`--continue`/`--resume`/`/rename`), y los comandos de contexto (`/context`/`/clear`) son suficientes para ser muy productivo. Todo lo de abajo es opcional. Vuelve a ello cuando estés listo. + +--- + +# Opcional: Ir más a fondo + +Cueva de cristal abstracta en tonos azules y morados que representa una exploración más profunda de los conceptos de contexto + +Estos temas se basan en lo esencial anterior. **Elige lo que te interese, o avanza hasta [Práctica](#el-espectro-de-especificidad).** + +| Quiero aprender sobre... | Ir a | +|---|---| +| Patrones comodín y comandos avanzados de sesión | [Patrones @ adicionales y comandos de sesión](#comprobar-y-gestionar-el-contexto) | +| Construir sobre el contexto a través de múltiples indicaciones | [Conversaciones conscientes del contexto](#patrones-adicionales) | +| Límites de tokens y `/compact` | [Comprender las ventanas de contexto](#compartir-tu-sesión) | +| Cómo elegir los archivos correctos para referenciar | [Elegir qué referenciar](#el-comando-compact) | +| Analizar capturas de pantalla y maquetas | [Trabajar con imágenes](#qué-incluir-vs-excluir) | + +
+Patrones @ adicionales y comandos de sesión + + +### Patrones @ adicionales + +Para usuarios avanzados, Copilot CLI soporta patrones comodín y referencias a imágenes: + +| Patrón | Qué hace | +|---------|--------------| +| `@folder/*.py` | Todos los archivos .py en la carpeta | +| `@**/test_*.py` | Comodín recursivo: encuentra todos los archivos de prueba en cualquier lugar | +| `@image.png` | Archivo de imagen para revisión de interfaz | + +```bash +copilot + +> Find all TODO comments in @samples/book-app-project/**/*.py +``` + +### Ver información de la sesión + +```bash +copilot + +> /session +# Muestra los detalles de la sesión actual y un resumen del espacio de trabajo + +> /usage +# Muestra métricas y estadísticas de la sesión +``` + +### Compartir tu sesión + +```bash +copilot + +> /share file ./my-session.md +# Exporta la sesión como un archivo Markdown + +> /share gist +# Crea un gist de GitHub con la sesión + +> /share html +# Exporta la sesión como un archivo HTML interactivo autocontenido +# Útil para compartir informes de sesión pulidos con compañeros de equipo o guardarlos como referencia +``` + +
+ +
+Conversaciones conscientes del contexto + + +### Conversaciones conscientes del contexto + +La magia ocurre cuando tienes conversaciones multironda que se construyen unas sobre otras. + +#### Ejemplo: Mejora progresiva + +```bash +copilot + +> @samples/book-app-project/books.py Review the BookCollection class + +Copilot CLI: "The class looks functional, but I notice: +1. Missing type hints on some methods +2. No validation for empty title/author +3. Could benefit from better error handling" + +> Add type hints to all methods + +Copilot CLI: "Here's the class with complete type hints..." +[Shows typed version] + +> Now improve error handling + +Copilot CLI: "Building on the typed version, here's improved error handling..." +[Adds validation and proper exceptions] + +> Generate tests for this final version + +Copilot CLI: "Based on the class with types and error handling..." +[Generates comprehensive tests] +``` + +Fíjate cómo cada indicación se basa en el trabajo anterior. Este es el poder del contexto. + +
+ +
+Comprender las ventanas de contexto + + +### Comprender las ventanas de contexto + +Ya conoces `/context` y `/clear` de lo esencial. Aquí está una visión más profunda de cómo funcionan las ventanas de contexto. + +Cada IA tiene una "ventana de contexto", que es la cantidad de texto que puede considerar a la vez. + +Visualización de la ventana de contexto + +*La ventana de contexto es como un escritorio: solo puede sostener cierta cantidad a la vez. Los archivos, el historial de conversación y los prompts del sistema ocupan espacio.* + +#### Qué sucede al límite + +```bash +copilot + +> /context + +Context usage: 45,000 / 128,000 tokens (35%) + +# A medida que agregas más archivos y conversaciones, esto crece + +> @large-codebase/ + +Context usage: 120,000 / 128,000 tokens (94%) + +# Advertencia: Se está acercando al límite de contexto + +> @another-large-file.py + +Context limit reached. Older context will be summarized. +``` + +#### El comando `/compact` + + +Cuando tu contexto se está llenando pero no quieres perder la conversación, `/compact` resume tu historial para liberar tokens: + +```bash +copilot + +> /compact +# Resume el historial de la conversación, liberando espacio de contexto +# Sus hallazgos clave y decisiones se conservan +``` + +También puedes dar a `/compact` instrucciones de enfoque opcionales para determinar qué se prioriza en el resumen: + +```bash +copilot + +> /compact focus on the list of bugs we found and decisions made +# Resume la historia, manteniendo la lista de errores y las decisiones en primer plano +``` + +> 💡 **Cuándo usar instrucciones de enfoque**: Si tu conversación cubrió muchos temas, las instrucciones de enfoque ayudan a `/compact` a conservar las partes más relevantes para tus próximos pasos para que no pierdas el hilo. + +#### Consejos para la eficiencia del contexto + +| Situación | Acción | Por qué | +|-----------|--------|-----| +| Iniciar un nuevo tema | `/clear` | Elimina el contexto irrelevante | +| Tomaste un camino equivocado | `/rewind` | Revertir a cualquier punto anterior | +| Conversación larga | `/compact` | Resume el historial, libera tokens | +| Necesitas un archivo específico | `@file.py` no `@folder/` | Carga solo lo que necesitas | +| Alcanzando límites | `/new` o `/clear` | Contexto nuevo | +| Múltiples temas | Usa `/rename` por tema | Fácil reanudar la sesión correcta | + +#### Mejores prácticas para grandes bases de código + +1. **Sé específico**: `@samples/book-app-project/books.py` en lugar de `@samples/book-app-project/` +2. **Limpia el contexto entre temas**: Usa `/new` o `/clear` al cambiar de enfoque +3. **Usa `/compact`**: Resume la conversación para liberar contexto +4. **Usa múltiples sesiones**: Una sesión por funcionalidad o tema + +
+ +
+Elegir qué referenciar + + +### Elegir qué referenciar + +No todos los archivos son iguales cuando se trata de contexto. Aquí tienes cómo elegir con criterio: + +#### Consideraciones sobre el tamaño de los archivos + +| Tamaño del archivo | Aproximados [Tokens](../GLOSSARY.md#token) | Estrategia | +|-----------|-------------------|----------| +| Pequeño (<100 líneas) | ~500-1,500 tokens | Referéncialo libremente | +| Mediano (100-500 líneas) | ~1,500-7,500 tokens | Referencia archivos específicos | +| Grande (500+ líneas) | 7,500+ tokens | Sé selectivo, usa archivos específicos | +| Muy grande (1000+ líneas) | 15,000+ tokens | Considera dividir o dirigirte a secciones | + +**Ejemplos concretos:** +- Los 4 archivos Python de la app de libros combinados ≈ 2,000-3,000 tokens +- Un módulo Python típico (200 líneas) ≈ 3,000 tokens +- Un archivo de API Flask (400 líneas) ≈ 6,000 tokens +- Tu package.json ≈ 200-500 tokens +- Un prompt breve + respuesta ≈ 500-1,500 tokens + +> 💡 **Estimación rápida para código:** Multiplica las líneas de código por ~15 para obtener los tokens aproximados. Ten en cuenta que esto es solo una estimación. + +#### Qué incluir vs. excluir + +**Alto valor** (incluye estos): +- Puntos de entrada (`book_app.py`, `main.py`, `app.py`) +- Los archivos específicos sobre los que preguntas +- Archivos importados directamente por tu archivo objetivo +- Archivos de configuración (`requirements.txt`, `pyproject.toml`) +- Modelos de datos o dataclasses + +**Menor valor** (considera excluir): +- Archivos generados (salida compilada, assets empaquetados) +- Node modules o directorios vendor +- Archivos de datos grandes o fixtures +- Archivos no relacionados con tu pregunta + +#### El espectro de especificidad + +``` +Less specific ────────────────────────► More specific +@samples/book-app-project/ @samples/book-app-project/books.py:47-52 + │ │ + └─ Scans everything └─ Just what you need + (uses more context) (preserves context) +``` + +**Cuándo optar por un enfoque amplio** (`@samples/book-app-project/`): +- Exploración inicial de la base de código +- Encontrar patrones en muchos archivos +- Revisiones de arquitectura + +**Cuándo optar por un enfoque específico** (`@samples/book-app-project/books.py`): +- Depurar un problema en particular +- Revisión de código de un archivo específico +- Preguntar sobre una única función + +#### Ejemplo práctico: Carga de contexto por etapas + +```bash +copilot + +# Paso 1: Empieza con la estructura +> @package.json What frameworks does this project use? + +# Paso 2: Reduce según la respuesta +> @samples/book-app-project/ Show me the project structure + +# Paso 3: Concéntrate en lo que importa +> @samples/book-app-project/books.py Review the BookCollection class + +# Paso 4: Añade archivos relacionados solo cuando sea necesario +> @samples/book-app-project/book_app.py @samples/book-app-project/books.py How does the CLI use the BookCollection? +``` + +Este enfoque por etapas mantiene el contexto enfocado y eficiente. + +
+ +
+Trabajar con imágenes + + +### Trabajar con imágenes + +Puedes incluir imágenes en tus conversaciones usando la sintaxis `@`, o simplemente **pegar desde tu portapapeles** (Cmd+V / Ctrl+V). Copilot CLI puede analizar capturas de pantalla, mockups y diagramas para ayudar con la depuración de la interfaz, la implementación del diseño y el análisis de errores. + +```bash +copilot + +> @assets/screenshot.png What is happening in this image? + +> @assets/mockup.png Write the HTML and CSS to match this design. Place it in a new file called index.html and put the CSS in styles.css. +``` + +> 📖 **Aprende más**: Consulta [Additional Context Features](../appendices/additional-context.md#trabajar-con-imágenes) para formatos compatibles, casos de uso prácticos y consejos para combinar imágenes con código. + +
+ +--- + +# Práctica + +Escritorio acogedor con monitor mostrando código, lámpara, taza de café y auriculares listos para la práctica + +Es hora de aplicar tus habilidades de gestión de contexto y sesiones. + +--- + +## ▶️ Pruébalo tú mismo + +### Revisión completa del proyecto + +El curso incluye archivos de ejemplo que puedes revisar directamente. Inicia copilot y ejecuta el prompt que se muestra a continuación: + +```bash +copilot + +> @samples/book-app-project/ Give me a code quality review of this project + +# Copilot CLI identificará problemas como: +# - Funciones de visualización duplicadas +# - Falta validación de entrada +# - Manejo de errores inconsistente +``` + +> 💡 **¿Quieres probar con tus propios archivos?** Crea un pequeño proyecto Python (`mkdir -p my-project/src`), agrega algunos archivos .py, luego usa `@my-project/src/` para revisarlos. ¡Puedes pedirle a copilot que cree código de ejemplo si lo deseas! + +### Flujo de trabajo de la sesión + +```bash +copilot + +> /rename book-app-review +> @samples/book-app-project/books.py Let's add input validation for empty titles + +[Copilot CLI suggests validation approach] + +> Implement that fix +> Now consolidate the duplicate display functions in @samples/book-app-project/ +> /exit + +# Más tarde - retoma donde lo dejaste +copilot --continue + +> Generate tests for the changes we made +``` + +--- + +Después de completar las demostraciones, prueba estas variaciones: + +1. **Desafío entre archivos**: Analiza cómo trabajan juntos book_app.py y books.py: + ```bash + copilot + > @samples/book-app-project/book_app.py @samples/book-app-project/books.py + > What's the relationship between these files? Are there any code smells? + ``` + +2. **Desafío de sesión**: Inicia una sesión, nómbrala con `/rename my-first-session`, trabaja en algo, sal con `/exit`, luego ejecuta `copilot --continue`. ¿Recuerda lo que estabas haciendo? + +3. **Desafío de contexto**: Ejecuta `/context` a mitad de sesión. ¿Cuántos tokens estás usando? Prueba `/compact` y comprueba de nuevo. (Consulta [Comprender las ventanas de contexto](#compartir-tu-sesión) en Going Deeper para más sobre `/compact`.) + +**Autoevaluación**: Entiendes el contexto cuando puedes explicar por qué `@folder/` es más poderoso que abrir cada archivo individualmente. + +--- + +## 📝 Tarea + +### Desafío principal: Rastrear el flujo de datos + +Los ejemplos prácticos se centraron en revisiones de calidad de código y validación de entradas. Ahora practica las mismas habilidades de contexto en una tarea diferente, rastreando cómo los datos se mueven por la aplicación: + +1. Inicia una sesión interactiva: `copilot` +2. Referencia `books.py` y `book_app.py` juntos: + `@samples/book-app-project/books.py @samples/book-app-project/book_app.py Trace how a book goes from user input to being saved in data.json. What functions are involved at each step?` +3. Incorpora el archivo de datos para contexto adicional: + `@samples/book-app-project/data.json What happens if this JSON file is missing or corrupted? Which functions would fail?` +4. Pide una mejora entre archivos: + `@samples/book-app-project/books.py @samples/book-app-project/utils.py Suggest a consistent error-handling strategy that works across both files.` +5. Renombra la sesión: `/rename data-flow-analysis` +6. Sal con `/exit`, luego reanuda con `copilot --continue` y realiza una pregunta de seguimiento sobre el flujo de datos + +**Criterios de éxito**: Puedes rastrear datos a través de múltiples archivos, reanudar una sesión nombrada y obtener sugerencias entre archivos. + +
+💡 Pistas (haz clic para expandir) + +**Para comenzar:** +```bash +cd /path/to/copilot-cli-for-beginners +copilot +> @samples/book-app-project/books.py @samples/book-app-project/book_app.py Trace how a book goes from user input to being saved in data.json. +> @samples/book-app-project/data.json What happens if this file is missing or corrupted? +> /rename data-flow-analysis +> /exit +``` + +Luego reanuda con: `copilot --continue` + +**Comandos útiles:** +- `@file.py` - Referencia un solo archivo +- `@folder/` - Referencia todos los archivos en una carpeta (nota la `/` final) +- `/context` - Comprueba cuánto contexto estás usando +- `/rename ` - Nombra tu sesión para reanudarla fácilmente + +
+ +### Desafío adicional: Límites de contexto + +1. Referencia todos los archivos de la app de libros a la vez con `@samples/book-app-project/` +2. Haz varias preguntas detalladas sobre archivos diferentes (`books.py`, `utils.py`, `book_app.py`, `data.json`) +3. Ejecuta `/context` para ver el uso. ¿Qué tan rápido se llena? +4. Practica usar `/compact` para recuperar espacio, luego continúa la conversación +5. Intenta ser más específico con las referencias de archivos (p. ej., `@samples/book-app-project/books.py` en lugar de toda la carpeta) y observa cómo afecta al uso del contexto + +--- + +
+🔧 Errores comunes y solución de problemas (haz clic para expandir) + +### Errores comunes + +| Error | Qué ocurre | Solución | +|---------|--------------|-----| +| Olvidar el `@` antes de los nombres de archivo | Copilot CLI trata "books.py" como texto sin formato | Usa `@samples/book-app-project/books.py` para referenciar archivos | +| Esperar que las sesiones persistan automáticamente | Iniciar `copilot` desde cero pierde todo el contexto previo | Usa `--continue` (última sesión) o `--resume` (elegir una sesión) | +| Referenciar archivos fuera del directorio actual | "Permission denied" or "File not found" errors | Usa `/add-dir /path/to/directory` para otorgar acceso | +| No usar `/clear` al cambiar de tema | El contexto antiguo confunde las respuestas sobre el nuevo tema | Ejecuta `/clear` antes de comenzar una tarea diferente | + +### Solución de problemas + +**"File not found" errors** - Asegúrate de que estás en el directorio correcto: + +```bash +pwd # Comprobar el directorio actual +ls # Listar archivos + +# Luego inicia copilot y usa rutas relativas +copilot + +> Review @samples/book-app-project/books.py +``` + +**"Permission denied"** - Agrega el directorio a tu lista de permitidos: + +```bash +copilot --add-dir /path/to/directory + +# O en una sesión: +> /add-dir /path/to/directory +``` + +**El contexto se llena demasiado rápido**: +- Sé más específico con las referencias de archivos +- Usa `/clear` entre distintos temas +- Divide el trabajo en varias sesiones + +
+ +--- + +# Resumen + +## 🔑 Puntos clave + +1. **La sintaxis `@`** proporciona a Copilot CLI contexto sobre archivos, directorios e imágenes +2. **Las conversaciones de múltiples turnos** se construyen unas sobre otras a medida que el contexto se acumula +3. **Las sesiones se guardan automáticamente**: nómbralas al iniciar con `--name`, reanúdalas por nombre con `--resume=`, o usa `--continue` para retomar la sesión más reciente +4. **Las ventanas de contexto** tienen límites: adminístralas con `/clear`, `/compact`, `/context`, `/new` y `/rewind`. Usa `/compact focus on ` para dar forma a lo que se mantiene en el resumen +5. **Memoria persistente** (`/memory`) permite que Copilot CLI recuerde preferencias y hechos a través de *todas* las sesiones — no solo la actual +6. **Flags de permiso** (`--add-dir`, `--allow-all`) controlan el acceso a múltiples directorios. ¡Úsalos con prudencia! +7. **Referencias de imágenes** (`@screenshot.png`) ayudan a depurar problemas de interfaz visualmente + +> 📚 **Documentación oficial**: [Use Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-cli/use-copilot-cli) para la referencia completa sobre contexto, sesiones y trabajo con archivos. + +> 📋 **Referencia rápida**: Consulta la [referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para una lista completa de comandos y atajos. + +--- + +## ➡️ Qué sigue + +Ahora que puedes proporcionar contexto a Copilot CLI, pongámoslo a trabajar en tareas de desarrollo reales. Las técnicas de contexto que acabas de aprender (referencias de archivos, análisis entre archivos y gestión de sesiones) son la base para los flujos de trabajo potentes del próximo capítulo. + +En **[Capítulo 03: Flujos de trabajo de desarrollo](../03-development-workflows/README.md)**, aprenderás: + +- Flujos de trabajo de revisión de código +- Patrones de refactorización +- Asistencia para depuración +- Generación de pruebas +- Integración con Git + +--- + +**[← Volver al Capítulo 01](../01-setup-and-first-steps/README.md)** | **[Continuar al Capítulo 03 →](../03-development-workflows/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/03-development-workflows/README.md b/translations/es/03-development-workflows/README.md new file mode 100644 index 00000000..2c23cdcb --- /dev/null +++ b/translations/es/03-development-workflows/README.md @@ -0,0 +1,1014 @@ + + +![Chapter 03: Development Workflows](../../../03-development-workflows/assets/chapter-header.png) + +> **¿Y si la IA pudiera encontrar errores sobre los que ni siquiera sabías preguntar?** + +En este capítulo, GitHub Copilot CLI se convierte en tu herramienta diaria. Lo usarás dentro de los flujos de trabajo que ya utilizas a diario: pruebas, refactorización, depuración y Git. + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, serás capaz de: + +- Ejecutar revisiones de código exhaustivas con Copilot CLI +- Refactorizar código heredado de forma segura +- Depurar problemas con asistencia de IA +- Generar pruebas automáticamente +- Integrar Copilot CLI con tu flujo de trabajo de git + +> ⏱️ **Tiempo estimado**: ~60 minutos (15 min lectura + 45 min práctico) + +--- + +## 🧩 Analogía del mundo real: el flujo de trabajo de un carpintero + +Un carpintero no solo sabe usar herramientas, tiene *flujos de trabajo* para diferentes tareas: + +Taller del artesano que muestra tres carriles de flujo de trabajo: Construcción de muebles (Medir, Cortar, Ensamblar, Acabar), Reparación de daños (Evaluar, Quitar, Reparar, Emparejar), y Control de calidad (Inspeccionar, Probar juntas, Verificar alineación) + +De manera similar, los desarrolladores tienen flujos de trabajo para distintas tareas. GitHub Copilot CLI mejora cada uno de estos flujos, haciéndote más eficiente y eficaz en tus tareas diarias de programación. + +--- + +# Los cinco flujos de trabajo + +Cinco iconos de neón brillantes que representan flujos de trabajo de revisión de código, pruebas, depuración, refactorización e integración con git + +Cada flujo de trabajo a continuación es independiente. Elige los que coincidan con tus necesidades actuales, o trabaja en todos ellos. + +--- + +## Elige tu propia aventura + +Este capítulo cubre cinco flujos de trabajo que los desarrolladores suelen usar. **Sin embargo, no necesitas leerlos todos de una vez!** Cada flujo de trabajo está contenido en una sección plegable más abajo. Elige los que se ajusten a lo que necesitas y a tu proyecto actual. Siempre puedes volver y explorar los demás más tarde. + +Cinco flujos de desarrollo: Revisión de código, Refactorización, Depuración, Generación de pruebas e Integración con Git mostrados como carriles horizontales + +| I want to... | Jump to | +|---|---| +| Review code before merging | [Flujo de trabajo 1: Revisión de código](#workflow-1-code-review) | +| Clean up messy or legacy code | [Flujo de trabajo 2: Refactorización](#workflow-2-refactoring) | +| Track down and fix a bug | [Flujo de trabajo 3: Depuración](#workflow-3-debugging) | +| Generate tests for my code | [Flujo de trabajo 4: Generación de pruebas](#workflow-4-test-generation) | +| Write better commits and PRs | [Flujo de trabajo 5: Integración con Git](#workflow-5-git-integration) | +| Research before coding | [Consejo rápido: Investiga antes de planear o codificar](#usar-delegate-para-tareas-en-segundo-plano) | +| See a full bug-fix workflow end to end | [Poniéndolo todo junto](#usar-diff-para-revisar-los-cambios-de-la-sesión) | + +**Selecciona un flujo de trabajo abajo para expandirlo** y ver cómo GitHub Copilot CLI puede mejorar tu proceso de desarrollo en esa área. + +--- + + +
+Flujo de trabajo 1: Revisión de código - Revisar archivos, usar el agente /review, crear listas de verificación por severidad + +Flujo de revisión de código: revisar, identificar problemas, priorizar, generar lista de verificación. + +### Revisión básica + +Este ejemplo usa el símbolo `@` para referenciar un archivo, dando a Copilot CLI acceso directo a su contenido para revisión. + +```bash +copilot + +> Review @samples/book-app-project/book_app.py for code quality +``` + +--- + +
+🎬 ¡Míralo en acción! + +![Code Review Demo](../../../03-development-workflows/assets/code-review-demo.gif) + +*La salida de la demostración varía. Tu modelo, herramientas y respuestas serán diferentes de lo que se muestra aquí.* + +
+ +--- + +### Revisión de validación de entrada + +Pídele a Copilot CLI que enfoque su revisión en una preocupación específica (aquí, validación de entrada) listando las categorías que te importan en el prompt. + +```text +copilot + +> Review @samples/book-app-project/utils.py for input validation issues. Check for: missing validation, error handling gaps, and edge cases +``` + + +### Revisión de proyecto entre archivos + +Referencia un directorio entero con `@` para permitir que Copilot CLI escanee todos los archivos del proyecto a la vez. + +```bash +copilot + +> @samples/book-app-project/ Review this entire project. Create a markdown checklist of issues found, categorized by severity +``` + +### Revisión de código interactiva + +Usa una conversación de varios turnos para profundizar. Comienza con una revisión amplia y luego haz preguntas de seguimiento sin reiniciar. + +```bash +copilot + +> @samples/book-app-project/book_app.py Review this file for: +> - Input validation +> - Error handling +> - Code style and best practices + +# Copilot CLI proporciona una revisión detallada + +> The user input handling - are there any edge cases I'm missing? + +# Copilot CLI muestra posibles problemas con cadenas vacías y caracteres especiales + +> Create a checklist of all issues found, prioritized by severity + +# Copilot CLI genera elementos de acción priorizados +``` + +### Plantilla de lista de verificación de revisión + +Pídele a Copilot CLI que estructure su salida en un formato específico (aquí, una lista de verificación en markdown categorizada por severidad que puedas pegar en un issue). + +```bash +copilot + +> Review @samples/book-app-project/ and create a markdown checklist of issues found, categorized by: +> - Critical (data loss risks, crashes) +> - High (bugs, incorrect behavior) +> - Medium (performance, maintainability) +> - Low (style, minor improvements) +``` + +### Comprendiendo los cambios en Git (Importante para /review) + +Antes de usar el comando `/review`, necesitas entender dos tipos de cambios en git: + +| Tipo de cambio | Qué significa | Cómo ver | +|-------------|---------------|------------| +| **Cambios preparados (staged)** | Archivos que has marcado para el próximo commit con `git add` | `git diff --staged` | +| **Cambios no preparados (unstaged)** | Archivos que has modificado pero aún no has agregado | `git diff` | + +```bash +# Referencia rápida +git status # Muestra tanto los cambios preparados como los no preparados +git add file.py # Prepara un archivo para el commit +git diff # Muestra los cambios no preparados +git diff --staged # Muestra los cambios preparados +``` + +### Usando el comando /review + +El comando `/review` invoca el agente integrado **code-review**, que está optimizado para analizar cambios staged y unstaged con una salida de alta relación señal/ruido. Usa un comando con barra para activar un agente integrado especializado en lugar de escribir un prompt libre. + +```bash +copilot + +> /review +# Invoca al agente de revisión de código en cambios preparados/no preparados +# Proporciona retroalimentación enfocada y accionable + +> /review Check for security issues in authentication +# Ejecuta la revisión con un área de enfoque específica +``` + +> 💡 **Consejo**: El agente code-review funciona mejor cuando tienes cambios pendientes. Prepara tus archivos con `git add` para revisiones más enfocadas. + +
+ +--- + + +
+Flujo de trabajo 2: Refactorización - Reestructurar código, separar responsabilidades, mejorar el manejo de errores + +Flujo de refactorización: evaluar código, planear cambios, implementar, verificar comportamiento. + +### Refactorización simple + +> **Prueba esto primero:** `@samples/book-app-project/book_app.py The command handling uses if/elif chains. Refactor it to use a dictionary dispatch pattern.` + +Comienza con mejoras sencillas. Prueba estas en la app de libros. Cada prompt usa una referencia de archivo `@` emparejada con una instrucción de refactorización específica para que Copilot CLI sepa exactamente qué cambiar. + +```bash +copilot + +> @samples/book-app-project/book_app.py The command handling uses if/elif chains. Refactor it to use a dictionary dispatch pattern. + +> @samples/book-app-project/utils.py Add type hints to all functions + +> @samples/book-app-project/book_app.py Extract the book display logic into utils.py for better separation of concerns +``` + +> 💡 **¿Nuevo en refactorización?** Comienza con solicitudes sencillas como agregar anotaciones de tipo o mejorar los nombres de variables antes de abordar transformaciones complejas. + +--- + +
+🎬 ¡Míralo en acción! + +![Refactor Demo](../../../03-development-workflows/assets/refactor-demo.gif) + +*La salida de la demostración varía. Tu modelo, herramientas y respuestas serán diferentes de lo que se muestra aquí.* + +
+ +--- + +### Separar responsabilidades + +Referencia múltiples archivos con `@` en un solo prompt para que Copilot CLI pueda mover código entre ellos como parte del refactor. + +```bash +copilot + +> @samples/book-app-project/utils.py @samples/book-app-project/book_app.py +> The utils.py file has print statements mixed with logic. Refactor to separate display functions from data processing. +``` + +### Mejorar el manejo de errores + +Proporciona dos archivos relacionados y describe la preocupación transversal para que Copilot CLI pueda sugerir una solución coherente en ambos. + +```bash +copilot + +> @samples/book-app-project/utils.py @samples/book-app-project/books.py +> These files have inconsistent error handling. Suggest a unified approach using custom exceptions. +``` + +### Agregar documentación + +Usa una lista de viñetas detallada para especificar exactamente qué debe contener cada docstring. + +```bash +copilot + +> @samples/book-app-project/books.py Add comprehensive docstrings to all methods: +> - Include parameter types and descriptions +> - Document return values +> - Note any exceptions raised +> - Add usage examples +``` + +### Refactorización segura con pruebas + +Encadena dos solicitudes relacionadas en una conversación de varios turnos. Primero genera pruebas, luego refactoriza con esas pruebas como red de seguridad. + +```bash +copilot + +> @samples/book-app-project/books.py Before refactoring, generate tests for current behavior + +# Obtén las pruebas primero + +> Now refactor the BookCollection class to use a context manager for file operations + +# Refactoriza con confianza - las pruebas verifican que se preserve el comportamiento +``` + +
+ +--- + + +
+Flujo de trabajo 3: Depuración - Rastrear errores, auditorías de seguridad, seguir problemas a través de archivos + +Flujo de depuración: entender el error, localizar la causa raíz, arreglar, probar. + +### Depuración simple + +> **Prueba esto primero:** `@samples/book-app-buggy/books_buggy.py Users report that searching for "The Hobbit" returns no results even though it's in the data. Debug why.` + +Comienza describiendo lo que está mal. Aquí hay patrones comunes de depuración que puedes probar con la app de libros con errores. Cada prompt empareja una referencia `@` de archivo con una descripción clara del síntoma para que Copilot CLI pueda localizar y diagnosticar el error. + +```bash +copilot + +# Patrón: "Se esperaba X pero se obtuvo Y" +> @samples/book-app-buggy/books_buggy.py Users report that searching for "The Hobbit" returns no results even though it's in the data. Debug why. + +# Patrón: "Comportamiento inesperado" +> @samples/book-app-buggy/book_app_buggy.py When I remove a book that doesn't exist, the app says it was removed. Help me find why. + +# Patrón: "Resultados incorrectos" +> @samples/book-app-buggy/books_buggy.py When I mark one book as read, ALL books get marked. What's the bug? +``` + +> 💡 **Consejo de depuración**: Describe el *síntoma* (lo que ves) y la *expectativa* (lo que debería ocurrir). Copilot CLI se encarga del resto. + +--- + +
+🎬 ¡Míralo en acción! + +![Fix Bug Demo](../../../03-development-workflows/assets/fix-bug-demo.gif) + +*La salida de la demostración varía. Tu modelo, herramientas y respuestas serán diferentes de lo que se muestra aquí.* + +
+ +--- + +### El "Detective de errores" - La IA encuentra errores RELACIONADOS + +Aquí es donde la depuración consciente del contexto brilla. Prueba este escenario con la app de libros con errores. Proporciona el archivo completo mediante `@` y describe solo el síntoma informado por el usuario. Copilot CLI rastreará la causa raíz y puede detectar errores adicionales cercanos. + +```bash +copilot + +> @samples/book-app-buggy/books_buggy.py +> +> Users report: "Finding books by author name doesn't work for partial names" +> Debug why this happens +``` + +**What Copilot CLI does**: +``` +Root Cause: Line 80 uses exact match (==) instead of partial match (in). + +Line 80: return [b for b in self.books if b.author == author] + +The find_by_author function requires an exact match. Searching for "Tolkien" +won't find books by "J.R.R. Tolkien". + +Fix: Change to case-insensitive partial match: +return [b for b in self.books if author.lower() in b.author.lower()] +``` + +**Por qué importa esto**: Copilot CLI lee todo el archivo, entiende el contexto de tu informe de error y te da una solución específica con una explicación clara. + +> 💡 **Bonus**: Dado que Copilot CLI analiza todo el archivo, a menudo descubre *otros* problemas sobre los que no preguntaste. Por ejemplo, al arreglar la búsqueda por autor, Copilot CLI podría también notar el error de sensibilidad a mayúsculas/minúsculas en `find_book_by_title`! + +### Nota de seguridad del mundo real + +Mientras depurar tu propio código es importante, entender vulnerabilidades de seguridad en aplicaciones en producción es crítico. Prueba este ejemplo: apunta Copilot CLI a un archivo desconocido y pídele auditarlo en busca de problemas de seguridad. + +```bash +copilot + +> @samples/buggy-code/python/user_service.py Find all security vulnerabilities in this Python user service +``` + +Este archivo muestra patrones de seguridad del mundo real que encontrarás en aplicaciones de producción. + +> 💡 **Términos de seguridad comunes que encontrarás:** +> - **SQL Injection**: When user input is put directly into a database query, allowing attackers to run malicious commands +> - **Parameterized queries**: The safe alternative - placeholders (`?`) separate user data from SQL commands +> - **Race condition**: When two operations happen at the same time and interfere with each other +> - **XSS (Cross-Site Scripting)**: When attackers inject malicious scripts into web pages + +--- + +### Entendiendo un error + +Pega un stack trace directamente en tu prompt junto con una referencia `@` de archivo para que Copilot CLI pueda mapear el error al código fuente. + +```bash +copilot + +> I'm getting this error: +> AttributeError: 'NoneType' object has no attribute 'title' +> at show_books (book_app.py:19) +> +> @samples/book-app-project/book_app.py Explain why and how to fix it +``` + +### Depuración con caso de prueba + +Describe la entrada exacta y la salida observada para darle a Copilot CLI un caso de prueba concreto y reproducible sobre el que razonar. + +```bash +copilot + +> @samples/book-app-buggy/books_buggy.py The remove_book function has a bug. When I try to remove "Dune", +> it also removes "Dune Messiah". Debug this: explain the root cause and provide a fix. +``` + +### Rastrear un problema a través del código + +Referencia múltiples archivos y pide a Copilot CLI que siga el flujo de datos entre ellos para localizar dónde se origina el problema. + +```bash +copilot + +> Users report that the book list numbering starts at 0 instead of 1. +> @samples/book-app-buggy/book_app_buggy.py @samples/book-app-buggy/books_buggy.py +> Trace through the list display flow and identify where the issue occurs +``` + +### Comprendiendo problemas de datos + +Incluye un archivo de datos junto con el código que lo lee para que Copilot CLI entienda la imagen completa al sugerir mejoras en el manejo de errores. + +```bash +copilot + +> @samples/book-app-project/data.json @samples/book-app-project/books.py +> Sometimes the JSON file gets corrupted and the app crashes. How should we handle this gracefully? +``` + +
+ +--- + + +
+Flujo de trabajo 4: Generación de pruebas - Generar pruebas exhaustivas y casos límite automáticamente + +Flujo de generación de pruebas: analizar función, generar pruebas, incluir casos límite, ejecutar. + +> **Prueba esto primero:** `@samples/book-app-project/books.py Generate pytest tests for all functions including edge cases` + +### La "Explosión de pruebas" - 2 pruebas vs 15+ pruebas + +Al escribir pruebas manualmente, los desarrolladores típicamente crean 2-3 pruebas básicas: +- Probar entrada válida +- Probar entrada inválida +- Probar un caso límite + +Observa lo que ocurre cuando pides a Copilot CLI que genere pruebas exhaustivas. Este prompt usa una lista estructurada de viñetas con una referencia de archivo `@` para guiar a Copilot CLI hacia una cobertura de pruebas completa: + +```bash +copilot + +> @samples/book-app-project/books.py Generate comprehensive pytest tests. Include tests for: +> - Adding books +> - Removing books +> - Finding by title +> - Finding by author +> - Marking as read +> - Edge cases with empty data +``` + +--- + +
+🎬 ¡Míralo en acción! + +![Test Generation Demo](../../../03-development-workflows/assets/test-gen-demo.gif) + +*La salida de la demostración varía. Tu modelo, herramientas y respuestas serán diferentes de lo que se muestra aquí.* + +
+ +--- + +**Lo que obtienes**: 15+ pruebas exhaustivas que incluyen: + +```python +class TestBookCollection: + # Camino feliz + def test_add_book_creates_new_book(self): + ... + def test_list_books_returns_all_books(self): + ... + + # Operaciones de búsqueda + def test_find_book_by_title_case_insensitive(self): + ... + def test_find_book_by_title_returns_none_when_not_found(self): + ... + def test_find_by_author_partial_match(self): + ... + def test_find_by_author_case_insensitive(self): + ... + + # Casos límite + def test_add_book_with_empty_title(self): + ... + def test_remove_nonexistent_book(self): + ... + def test_mark_as_read_nonexistent_book(self): + ... + + # Persistencia de datos + def test_save_books_persists_to_json(self): + ... + def test_load_books_handles_missing_file(self): + ... + def test_load_books_handles_corrupted_json(self): + ... + + # Caracteres especiales + def test_add_book_with_unicode_characters(self): + ... + def test_find_by_author_with_special_characters(self): + ... +``` + +**Resultado**: En 30 segundos obtienes pruebas de casos límite que te llevaría una hora pensar y escribir. + +--- + +### Pruebas unitarias + +Apunta a una única función y enumera las categorías de entrada que quieres probar para que Copilot CLI genere pruebas unitarias enfocadas y exhaustivas. + +```bash +copilot + +> @samples/book-app-project/utils.py Generate comprehensive pytest tests for get_book_details covering: +> - Valid input +> - Empty strings +> - Invalid year formats +> - Very long titles +> - Special characters in author names +``` + + +### Ejecutar pruebas + +Hazle a Copilot CLI una pregunta en lenguaje natural sobre tu cadena de herramientas. Puede generar el comando de shell correcto para ti. + +```bash +copilot + +> How do I run the tests? Show me the pytest command. + +# Copilot CLI responde: +# cd samples/book-app-project && python -m pytest tests/ +# O para salida detallada: python -m pytest tests/ -v +# Para ver las sentencias print: python -m pytest tests/ -s +``` + +### Pruebas para escenarios específicos + +Enumera escenarios avanzados o complicados que quieras cubrir para que Copilot CLI vaya más allá del camino feliz. + +```bash +copilot + +> @samples/book-app-project/books.py Generate tests for these scenarios: +> - Adding duplicate books (same title and author) +> - Removing a book by partial title match +> - Finding books when collection is empty +> - File permission errors during save +> - Concurrent access to the book collection +``` + +### Añadir pruebas a un archivo existente + +Pide pruebas *adicionales* para una única función para que Copilot CLI genere nuevos casos que complementen los que ya tienes. + +```bash +copilot + +> @samples/book-app-project/books.py +> Generate additional tests for the find_by_author function with edge cases: +> - Author name with hyphens (e.g., "Jean-Paul Sartre") +> - Author with multiple first names +> - Empty string as author +> - Author name with accented characters +``` + +
+ +--- + + +
+Flujo de trabajo 5: Integración con Git - Mensajes de commit, descripciones de PR, /pr, /delegate, /diff y /branch + +Flujo de trabajo de integración con Git: preparar cambios, generar mensaje, hacer commit, crear PR. + +> 💡 **Este flujo de trabajo asume conocimientos básicos de git** (preparación de cambios, commits y ramas). Si git es nuevo para ti, prueba primero los otros cuatro flujos de trabajo. + +### Generar mensajes de commit + +> **Prueba esto primero:** `copilot -p "Generate a conventional commit message for: $(git diff --staged)"` — prepara algunos cambios, luego ejecuta esto para ver a Copilot CLI escribir tu mensaje de commit. + +Este ejemplo usa la bandera de prompt en línea `-p` con sustitución de comandos del shell para canalizar la salida de `git diff` directamente a Copilot CLI para un mensaje de commit en un solo paso. La sintaxis `$(...)` ejecuta el comando dentro de los paréntesis e inserta su salida en el comando exterior. + +```bash + +# Ver qué cambió +git diff --staged + +# Generar mensaje de commit usando el formato [Conventional Commit](../GLOSSARY.md#commit-convencional) +# (mensajes estructurados como "feat(books): agregar búsqueda" o "fix(data): manejar entrada vacía") +copilot -p "Generate a conventional commit message for: $(git diff --staged)" + +# Salida: "feat(books): agregar búsqueda parcial por nombre de autor +# +# - Actualizar find_by_author para admitir coincidencias parciales +# - Añadir comparación que no distinga entre mayúsculas y minúsculas +# - Mejorar la experiencia de usuario al buscar autores" +``` + +--- + +
+🎬 ¡Míralo en acción! + +![Demostración de integración con Git](../../../03-development-workflows/assets/git-integration-demo.gif) + +*La salida de la demo varía. Tu modelo, herramientas y respuestas diferirán de lo que se muestra aquí.* + +
+ +--- + +### Explicar cambios + +Canaliza la salida de `git show` en un prompt `-p` para obtener un resumen en lenguaje natural del último commit. + +```bash +# ¿Qué cambió este commit? +copilot -p "Explain what this commit does: $(git show HEAD --stat)" +``` + +### Descripción del PR + +Combina la salida de `git log` con una plantilla de prompt estructurada para generar automáticamente una descripción completa del pull request. + +```bash +# Generar la descripción del PR a partir de los cambios en la rama +copilot -p "Generate a pull request description for these changes: +$(git log main..HEAD --oneline) + +Include: +- Summary of changes +- Why these changes were made +- Testing done +- Breaking changes? (yes/no)" +``` + +### Usar /pr en modo interactivo para la rama actual + +Si estás trabajando con una rama en el modo interactivo de Copilot CLI, puedes usar el comando `/pr` para trabajar con pull requests. Usa `/pr` para ver un PR, crear uno nuevo, arreglar un PR existente o permitir que Copilot CLI decida automáticamente según el estado de la rama. + +```bash +copilot + +> /pr [view|create|fix|auto] +``` + +### Revisar antes de hacer push + +Usa `git diff main..HEAD` dentro de un prompt `-p` para una comprobación rápida antes del push de todos los cambios de la rama. + +```bash +# Última revisión antes de hacer push +copilot -p "Review these changes for issues before I push: +$(git diff main..HEAD)" +``` + +### Usar /delegate para tareas en segundo plano + +El comando `/delegate` delega trabajo al agente en la nube de GitHub Copilot. Usa el comando slash `/delegate` (o el atajo `&`) para descargar una tarea bien definida a un agente en segundo plano. + +```bash +copilot + +> /delegate Add input validation to the login form + +# O usa el atajo de prefijo &: +> & Fix the typo in the README header + +# Copilot CLI: +# 1. Confirma tus cambios en una nueva rama +# 2. Abre una pull request en borrador +# 3. Trabaja en segundo plano en GitHub +# 4. Solicita tu revisión cuando termine +``` + +Esto es ideal para tareas bien definidas que quieres que se completen mientras te concentras en otro trabajo. + +### Usar /diff para revisar los cambios de la sesión + +El comando `/diff` muestra todos los cambios realizados durante tu sesión actual. Usa este comando slash para ver un diff visual de todo lo que Copilot CLI ha modificado antes de que hagas commit. También funciona en carpetas que no son repositorios git. + +```bash +copilot + +# Después de hacer algunos cambios... +> /diff + +# Muestra una comparación visual de todos los archivos modificados en esta sesión +# Ideal para revisar antes de confirmar +``` + +### Ramificar tu sesión con /branch o /fork + +A veces quieres explorar dos enfoques diferentes para un problema sin perder tu conversación original. El comando `/branch` (también disponible como `/fork`) crea una copia de tu sesión actual para que puedas probar una dirección distinta y luego comparar resultados. + +```bash +copilot + +> Fix the find_by_author function to support partial matches + +# ¿Quieres probar un enfoque diferente — ¡crea primero una rama! +> /branch + +# Ahora estás en una copia de la sesión. Prueba tu enfoque alternativo: +> Fix find_by_author using a different regex-based strategy + +# Si no te gusta el resultado, vuelve a tu sesión original usando /session +``` + +> 💡 **`/branch` y `/fork` son lo mismo**: Ambos comandos hacen cosas idénticas. `/branch` se añadió como un nombre más intuitivo. Usa el que tenga más sentido para ti. + +> 💡 **Cuándo ramificar**: Ramificar es ideal cuando no estás seguro de qué enfoque es mejor y quieres mantener ambas opciones abiertas. + +
+ +--- + +## Consejo rápido: Investiga antes de planear o codificar + +Cuando necesites investigar una librería, entender las mejores prácticas o explorar un tema desconocido, usa `/research` para realizar una investigación profunda antes de escribir código: + +```bash +copilot + +> /research What are the best Python libraries for validating user input in CLI apps? +``` + +Copilot busca en repositorios de GitHub y fuentes web, y luego devuelve un resumen con referencias. Esto es útil cuando estás a punto de comenzar una nueva funcionalidad y quieres tomar decisiones informadas primero. Puedes compartir los resultados usando `/share`. + +> 💡 **Consejo**: `/research` funciona bien *antes de* `/plan`. Investiga el enfoque y luego planifica la implementación. + +--- + +## Poniéndolo todo junto: flujo de trabajo para corregir errores + +Aquí tienes un flujo de trabajo completo para arreglar un error reportado: + +```bash + +# 1. Entender el informe de errores +copilot + +> Users report: 'Finding books by author name doesn't work for partial names' +> @samples/book-app-project/books.py Analyze and identify the likely cause + +# 2. Depurar el problema y arreglarlo (continuando en la misma sesión) +> Based on the analysis, show me the find_by_author function and explain the issue + +> Fix the find_by_author function to handle partial name matches + +# 3. Generar pruebas para la corrección +> @samples/book-app-project/books.py Generate pytest tests specifically for: +> - Full author name match +> - Partial author name match +> - Case-insensitive matching +> - Author name not found + +# Salir de la sesión interactiva + +> /exit + +# 4. Ejecutar git add + +# Agregar los cambios al área de preparación para que git diff --staged tenga algo con lo que trabajar +git add . + +# 5. Generar el mensaje del commit +copilot -p "Generate commit message for: $(git diff --staged)" + +# Ejemplo de salida: "fix(books): soportar búsqueda parcial del nombre del autor" + +# 6. Confirmar los cambios (opcional) + +git commit -m "" +``` + +### Resumen del flujo de trabajo para corregir errores + +| Paso | Acción | Comando de Copilot | +|------|--------|-----------------| +| 1 | Entender el error | `> [describe bug] @relevant-file.py Analyze the likely cause` | +| 2 | Análisis y corrección | `> Show me the function and fix the issue` | +| 3 | Generar pruebas | `> Generate tests for [specific scenarios]` | +| 4 | Preparar cambios | `git add .` | +| 5 | Generar mensaje de commit | `copilot -p "Generate commit message for: $(git diff --staged)"` | +| 6 | Hacer commit de los cambios | `git commit -m ""` | + +--- + +# Práctica + +Escritorio acogedor con monitor mostrando código, lámpara, taza de café y auriculares listos para una práctica práctica + +Ahora es tu turno para aplicar estos flujos de trabajo. + +--- + +## ▶️ Pruébalo tú mismo + +Después de completar las demos, prueba estas variaciones: + +1. **Desafío detective de bugs**: Pide a Copilot CLI depurar la función `mark_as_read` en `samples/book-app-buggy/books_buggy.py`. ¿Explicó por qué la función marca TODOS los libros como leídos en lugar de solo uno? + +2. **Desafío de pruebas**: Genera pruebas para la función `add_book` en la aplicación de libros. Cuenta cuántos casos límite incluye Copilot CLI que tú no habrías pensado. + +3. **Desafío de mensaje de commit**: Haz cualquier cambio pequeño en un archivo de la app de libros, préparalo (`git add .`), luego ejecuta: + ```bash + copilot -p "Generate a conventional commit message for: $(git diff --staged)" + ``` + ¿Es el mensaje mejor de lo que hubieras escrito rápidamente? + +**Autoevaluación**: Entiendes los flujos de trabajo de desarrollo cuando puedes explicar por qué "depurar este bug" es más poderoso que "encontrar bugs" (¡el contexto importa!). + +--- + +## 📝 Tarea + +### Desafío principal: refactorizar, probar y entregar + +Los ejemplos prácticos se centraron en `find_book_by_title` y revisiones de código. Ahora practica las mismas habilidades de flujo de trabajo en diferentes funciones en `book-app-project`: + +1. **Revisión**: Pide a Copilot CLI revisar `remove_book()` en `books.py` por casos límite y problemas potenciales: + `@samples/book-app-project/books.py Review the remove_book() function. What happens if the title partially matches another book (e.g., "Dune" vs "Dune Messiah")? Are there any edge cases not handled?` +2. **Refactorizar**: Pide a Copilot CLI que mejore `remove_book()` para manejar casos límite como coincidencia sin distinguir mayúsculas/minúsculas y devolver retroalimentación útil cuando no se encuentra un libro +3. **Prueba**: Genera pruebas con pytest específicamente para la función `remove_book()` mejorada, cubriendo: + - Eliminar un libro que existe + - Coincidencia de título sin distinguir mayúsculas/minúsculas + - Un libro que no existe devuelve retroalimentación apropiada + - Eliminar de una colección vacía +4. **Revisión**: Prepara tus cambios y ejecuta `/review` para comprobar si quedan problemas +5. **Commit**: Genera un mensaje de commit convencional: + `copilot -p "Generate a conventional commit message for: $(git diff --staged)"` + +
+💡 Pistas (haz clic para expandir) + +**Prompts de ejemplo para cada paso:** + +```bash +copilot + +# Paso 1: Revisar +> @samples/book-app-project/books.py Review the remove_book() function. What edge cases are not handled? + +# Paso 2: Refactorizar +> Improve remove_book() to use case-insensitive matching and return a clear message when the book isn't found. Show me the before and after code. + +# Paso 3: Probar +> Generate pytest tests for the improved remove_book() function, including: +> - Removing a book that exists +> - Case-insensitive matching ("dune" should remove "Dune") +> - Book not found returns appropriate response +> - Removing from an empty collection + +# Paso 4: Revisar +> /review + +# Paso 5: Confirmar +> Generate a conventional commit message for this refactor +``` + +**Consejo:** Después de mejorar `remove_book()`, prueba a preguntar a Copilot CLI: "¿Hay otras funciones en este archivo que podrían beneficiarse de las mismas mejoras?". Puede sugerir cambios similares a `find_book_by_title()` o `find_by_author()`. + +
+ +### Desafío extra: Crea una aplicación con Copilot CLI + +> 💡 **Nota**: Este ejercicio de GitHub Skills usa **Node.js** en lugar de Python. Las técnicas de GitHub Copilot CLI que practicarás — crear issues, generar código y colaborar desde la terminal — aplican a cualquier lenguaje. + +El ejercicio muestra a los desarrolladores cómo usar GitHub Copilot CLI para crear issues, generar código y colaborar desde la terminal mientras construyen una app calculadora en Node.js. Instalarás el CLI, usarás plantillas y agentes, y practicarás desarrollo iterativo dirigido por la línea de comandos. + +##### [Comienza el ejercicio de Skills "Crear aplicaciones con el Copilot CLI"](https://github.com/skills/create-applications-with-the-copilot-cli) + +--- + +
+🔧 Errores comunes y resolución de problemas (haz clic para ampliar) + +### Errores comunes + +| Error | Qué sucede | Solución | +|---------|--------------|-----| +| Usar prompts vagos como "Revisa este código" | Retroalimentación genérica que pasa por alto problemas específicos | Sé específico: "Revisa por inyección SQL, XSS y problemas de autenticación" | +| No usar `/review` para revisiones de código | Falta el agente de revisión de código optimizado | Usa `/review` que está ajustado para una salida con alta relación señal/ruido | +| Pedir "find bugs" sin contexto | Copilot CLI no sabe qué error estás experimentando | Describe el síntoma: "Los usuarios informan que X ocurre cuando Y" | +| Generar pruebas sin especificar el framework | Las pruebas pueden usar sintaxis o librería de aserciones incorrectas | Especifica: "Genera pruebas usando Jest" o "usando pytest" | + +### Resolución de problemas + +**La revisión parece incompleta** - Sé más específico sobre qué buscar: + +```bash +copilot + +# En lugar de: +> Review @samples/book-app-project/book_app.py + +# Intenta: +> Review @samples/book-app-project/book_app.py for input validation, error handling, and edge cases +``` + +**Las pruebas no coinciden con mi framework** - Especifica el framework: + +```bash +copilot + +> @samples/book-app-project/books.py Generate tests using pytest (not unittest) +``` + +**El refactor cambia el comportamiento** - Pide a Copilot CLI que preserve el comportamiento: + +```bash +copilot + +> @samples/book-app-project/book_app.py Refactor command handling to use dictionary dispatch. IMPORTANT: Maintain identical external behavior - no breaking changes +``` + +
+ +--- + +# Resumen + +## 🔑 Puntos clave + +Flujos de trabajo especializados para cada tarea: revisión de código, refactorización, depuración, pruebas e integración con Git + +1. **Revisión de código** se vuelve integral con prompts específicos +2. **Refactorización** es más segura cuando generas pruebas primero +3. **Depuración** se beneficia de mostrar a Copilot CLI el error Y el código +4. **Generación de pruebas** debe incluir casos límite y escenarios de error +5. **Integración con Git** automatiza mensajes de commit y descripciones de PR + +> 📋 **Referencia rápida**: Consulta la [referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para una lista completa de comandos y atajos. + +--- + +## ✅ Punto de control: Has dominado lo esencial + +**¡Felicidades!** Ahora tienes todas las habilidades básicas para ser productivo con GitHub Copilot CLI: + +| Habilidad | Capítulo | Ahora puedes... | +|-------|---------|----------------| +| Comandos básicos | Ch 01 | Usa el modo interactivo, modo plan, modo programático (-p) y comandos slash | +| Contexto | Ch 02 | Referenciar archivos con `@`, gestionar sesiones, entender las ventanas de contexto | +| Flujos de trabajo | Ch 03 | Revisar código, refactorizar, depurar, generar pruebas, integrar con git | + +Los capítulos 04-06 cubren características adicionales que añaden aún más potencia y vale la pena aprender. + +--- + +## 🛠️ Construyendo tu flujo de trabajo personal + +No hay una única forma "correcta" de usar GitHub Copilot CLI. Aquí tienes algunos consejos mientras desarrollas tus propios patrones: + +> 📚 **Documentación oficial**: [Mejores prácticas de Copilot CLI](https://docs.github.com/copilot/how-tos/copilot-cli/cli-best-practices) para flujos de trabajo recomendados y consejos de GitHub. + +- **Comienza con `/plan`** para cualquier cosa no trivial. Refina el plan antes de ejecutarlo - un buen plan conduce a mejores resultados. +- **Guarda los prompts que funcionen bien.** Cuando Copilot CLI cometa un error, anota qué salió mal. Con el tiempo, esto se convierte en tu manual personal. +- **Experimenta libremente.** Algunos desarrolladores prefieren prompts largos y detallados. Otros prefieren prompts cortos con seguimientos. Prueba diferentes enfoques y observa qué se siente natural. + +> 💡 **Próximamente**: En los capítulos 04 y 05, aprenderás cómo codificar tus mejores prácticas en instrucciones y skills personalizadas que Copilot CLI cargará automáticamente. + +--- + +## ➡️ Qué sigue + +Los capítulos restantes cubren características adicionales que amplían las capacidades de Copilot CLI: + +| Capítulo | Qué cubre | Cuándo lo querrás | +|---------|----------------|---------------------| +| Ch 04: Agentes | Crear personas de IA especializadas | Cuando quieras expertos en dominio (frontend, seguridad) | +| Ch 05: Skills | Cargar automáticamente instrucciones para tareas | Cuando repitas los mismos prompts con frecuencia | + +| Cap. 06: MCP | Conectar servicios externos | Cuando necesitas datos en vivo de GitHub, bases de datos | + +**Recomendación**: Prueba los flujos de trabajo principales durante una semana, luego vuelve a los Capítulos 04-06 cuando tengas necesidades específicas. + +--- + +## Continuar con temas adicionales + +En **[Capítulo 04: Agentes e instrucciones personalizadas](../04-agents-custom-instructions/README.md)**, aprenderás: + +- Uso de agentes integrados (`/plan`, `/review`) +- Creación de agentes especializados (experto en frontend, auditor de seguridad) con archivos `.agent.md` +- Patrones de colaboración multiagente +- Archivos de instrucciones personalizadas para los estándares del proyecto + +--- + +**[← Volver al Capítulo 02](../02-context-conversations/README.md)** | **[Continuar al Capítulo 04 →](../04-agents-custom-instructions/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/04-agents-custom-instructions/README.md b/translations/es/04-agents-custom-instructions/README.md new file mode 100644 index 00000000..accb8806 --- /dev/null +++ b/translations/es/04-agents-custom-instructions/README.md @@ -0,0 +1,867 @@ + + +![Capítulo 04: Agentes e Instrucciones Personalizadas](../../../04-agents-custom-instructions/assets/chapter-header.png) + +> **¿Y si pudieras contratar a un revisor de código Python, experto en pruebas y revisor de seguridad... todo en una sola herramienta?** + +En el Capítulo 03, dominaste los flujos de trabajo esenciales: revisión de código, refactorización, depuración, generación de pruebas e integración con git. Eso te hace muy productivo con GitHub Copilot CLI. Ahora, vamos más allá. + +Hasta ahora, has estado usando Copilot CLI como un asistente de propósito general. Los agentes te permiten darle una persona específica con estándares incorporados, como un revisor de código que aplica las anotaciones de tipo y PEP 8, o un ayudante de pruebas que escribe casos de pytest. Verás cómo la misma instrucción obtiene resultados notablemente mejores cuando la maneja un agente con instrucciones dirigidas. + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, serás capaz de: + +- Usar agentes integrados: Plan (`/plan`), Code-review (`/review`), y entender los agentes automáticos (Explore, Task) +- Crear agentes especializados usando archivos de agente (`.agent.md`) +- Usar agentes para tareas específicas de dominio +- Cambiar entre agentes usando `/agent` y `--agent` +- Escribir archivos de instrucciones personalizados para estándares específicos del proyecto + +> ⏱️ **Tiempo estimado**: ~55 minutos (20 min lectura + 35 min práctico) + +--- + +## 🧩 Analogía del mundo real: Contratar especialistas + +Cuando necesitas ayuda con tu casa, no llamas a un "ayudante general." Llamas a especialistas: + +| Problema | Especialista | Por qué | +|---------|------------|-----| +| Tubería con fuga | Fontanero | Conoce los códigos de plomería, tiene herramientas especializadas | +| Reinstalación eléctrica | Electricista | Entiende los requisitos de seguridad, cumple con las normas | +| Tejado nuevo | Techador | Conoce los materiales y las consideraciones del clima local | + +Los agentes funcionan de la misma manera. En lugar de una IA genérica, usa agentes que se enfoquen en tareas específicas y conozcan el proceso correcto a seguir. Configura las instrucciones una vez y luego reutilízalas siempre que necesites esa especialidad: revisión de código, pruebas, seguridad, documentación. + +Analogía de contratación de especialistas: así como llamas a oficios especializados para reparaciones en la casa, los agentes de IA están especializados en tareas específicas como revisión de código, pruebas, seguridad y documentación + +--- + +# Usando agentes + +Empieza de inmediato con agentes incorporados y personalizados. + +--- + +## *¿Nuevo en agentes?* ¡Comienza aquí! +¿Nunca has usado o creado un agente? Aquí tienes todo lo que necesitas saber para comenzar con este curso. + +1. **Prueba un agente *integrado* ahora mismo:** + ```bash + copilot + > /plan Add input validation for book year in the book app + ``` + Esto invoca al agente Plan para crear un plan de implementación paso a paso. + +2. **Consulta uno de nuestros ejemplos de agentes personalizados:** Es sencillo definir las instrucciones de un agente; mira el archivo proporcionado [python-reviewer.agent.md](../../../.github/agents/python-reviewer.agent.md) para ver el patrón. + +3. **Entiende el concepto central:** Los agentes son como consultar a un especialista en vez de a un generalista. Un "frontend agent" se centrará automáticamente en la accesibilidad y en los patrones de componentes; no tienes que recordárselo porque ya está especificado en las instrucciones del agente. + + +## Agentes integrados + +**¡Ya has usado algunos agentes integrados en el Capítulo 03 Flujo de trabajo de desarrollo!** +
`/plan` y `/review` son en realidad agentes integrados. Ahora sabes qué ocurre detrás de escena. Aquí está la lista completa: + +| Agente | Cómo invocarlo | Qué hace | +|-------|---------------|--------------| +| **Plan** | `/plan` or `Shift+Tab` (cycle modes) | Crea planes de implementación paso a paso antes de codificar | +| **Code-review** | `/review` | Revisa cambios preparados/no preparados con comentarios concisos y accionables | +| **Init** | `/init` | Genera archivos de configuración del proyecto (instrucciones, agentes) | +| **Explore** | *Automático* | Usado internamente cuando pides a Copilot que explore o analice la base de código | +| **Task** | *Automático* | Ejecuta comandos como tests, builds, lints e instalaciones de dependencias | + +
+ +**Agentes integrados en acción** - Ejemplos de invocación de Plan, Code-review, Explore y Task + +```bash +copilot + +# Invocar el agente Plan para crear un plan de implementación +> /plan Add input validation for book year in the book app + +# Invocar el agente de revisión de código para tus cambios +> /review + +# Los agentes Explore y Task se invocan automáticamente cuando son relevantes: +> Run the test suite # Usa el agente Task + +> Explore how book data is loaded # Usa el agente Explore +``` + +¿Y el agente Task? Funciona detrás de escena para gestionar y hacer seguimiento de lo que sucede y reportar de vuelta en un formato limpio y claro: + +| Resultado | Lo que ves | +|---------|--------------| +| ✅ **Éxito** | Resumen breve (p. ej., "All 247 tests passed", "Build succeeded") | +| ❌ **Fallo** | Salida completa con trazas de pila, errores del compilador y registros detallados | + +> 💡 **Subagentes multi-turno**: Los subagentes (tareas en segundo plano lanzadas por agentes) admiten mensajes de seguimiento. Mientras un agente se ejecuta en segundo plano, puedes abrir `/tasks` para verlo y enviar instrucciones adicionales. No tienes que esperar a que termine para guiarlo más. Piénsalo como poder tocar el hombro de tu asistente a mitad de la tarea para darle más indicaciones. + +### Elegir un modelo para el modo Plan + +Por defecto, `/plan` usa el mismo modelo de IA que hayas seleccionado para tu sesión. Puedes elegir un modelo *diferente* para usar solo mientras estás en modo plan — ideal para usar un modelo más rápido o menos costoso para la planificación, y luego volver a uno más potente para la implementación: + +```bash +copilot + +# Abrir el selector de modelos solo para el modo de planificación +> /model plan + +# O especifica un ID de modelo directamente (usa 'off' para borrar el modelo del modo de planificación) +> /model plan gpt-5.6-sol + +# Al salir del modo de planificación, el modelo vuelve automáticamente al de tu sesión +``` + +> 💡 **¿Por qué establecer un modelo para modo plan?** Un plan de alta calidad creado por un modelo de vanguardia de antemano puede ahorrar tokens y tiempo en general. Un plan preciso y bien acotado significa menos correcciones de ida y vuelta durante la implementación. + +> 📚 **Documentación oficial**: [GitHub Copilot CLI Agents](https://docs.github.com/copilot/how-tos/copilot-cli/use-copilot-cli/invoke-custom-agents) + +--- + +# Agregar agentes a Copilot CLI + +¡Puedes definir fácilmente tus propios agentes para que formen parte de tu flujo de trabajo! Define una vez, luego dirígelos! + +Cuatro robots de IA coloridos de pie juntos, cada uno con diferentes herramientas que representan capacidades especializadas de agentes + +## 🗂️ Agrega tus agentes + +Los archivos de agente son archivos markdown con la extensión `.agent.md`. Tienen dos partes: frontmatter YAML (metadatos) e instrucciones en markdown. + +> 💡 **¿Nuevo en el frontmatter YAML?** Es un pequeño bloque de configuraciones en la parte superior del archivo, rodeado por marcadores `---`. YAML son solo pares `clave: valor`. El resto del archivo es markdown normal. + +Aquí tienes un agente mínimo: + +```markdown +--- +name: my-reviewer +description: Code reviewer focused on bugs and security issues +--- + +# Code Reviewer + +You are a code reviewer focused on finding bugs and security issues. + +When reviewing code, always check for: +- SQL injection vulnerabilities +- Missing error handling +- Hardcoded secrets +``` + +> 💡 **Obligatorio vs Opcional**: El campo `description` es obligatorio. Otros campos como `name`, `tools` y `model` son opcionales. + +## Dónde colocar los archivos de agente + +| Ubicación | Alcance | Mejor para | +|----------|-------|----------| +| `.github/agents/` | Específico del proyecto | Agentes compartidos por el equipo con convenciones del proyecto | +| `~/.copilot/agents/` | Global (todos los proyectos) | Agentes personales que usas en todas partes | + +**Este proyecto incluye archivos de agente de ejemplo en la carpeta [.github/agents/](../../../.github/agents)**. Puedes escribir los tuyos o personalizar los ya proporcionados. + +
+📂 Ver los agentes de ejemplo en este curso + +| Archivo | Descripción | +|------|-------------| +| `hello-world.agent.md` | Ejemplo mínimo - comienza aquí | +| `python-reviewer.agent.md` | Revisor de calidad de código Python | +| `pytest-helper.agent.md` | Especialista en pruebas con Pytest | + +```bash +# O copie uno en su carpeta de agentes personales (disponible en cada proyecto) +cp .github/agents/python-reviewer.agent.md ~/.copilot/agents/ +``` + +Para más agentes de la comunidad, consulta [github/awesome-copilot](https://github.com/github/awesome-copilot) + +
+ + +## 🚀 Dos formas de usar agentes personalizados + +### Modo interactivo +Dentro del modo interactivo, lista los agentes usando `/agent` y selecciona el agente con el que empezar a trabajar. +Selecciona un agente para continuar tu conversación. + +```bash +copilot +> /agent +``` + +Para cambiar a un agente diferente, o para volver al modo predeterminado, usa de nuevo el comando `/agent`. + +### Modo programático + +Inicia directamente una nueva sesión con un agente. + +```bash +copilot --agent python-reviewer +> Review @samples/book-app-project/books.py +``` + +> 💡 **Cambiar de agente**: Puedes cambiar a un agente diferente en cualquier momento usando `/agent` o `--agent` de nuevo. Para volver a la experiencia estándar de Copilot CLI, usa `/agent` y selecciona **no agent**. + +> 💡 **El modo agente tiene alcance de sesión**: El agente que selecciones se aplica solo a la sesión actual. Cuando inicias una nueva sesión con `/new`, `/clear`, o abriendo un terminal nuevo, Copilot vuelve a su modo predeterminado — la selección de agente no se conserva automáticamente. Esto significa que cada sesión comienza con una pizarra limpia, lo cual es una buena práctica para mantener tu trabajo enfocado. + +--- + +# Profundizando con agentes + +Robot siendo ensamblado en un banco de trabajo rodeado de componentes y herramientas que representan la creación de agentes personalizados + +> 💡 **Esta sección es opcional.** Los agentes integrados (`/plan`, `/review`) son lo suficientemente potentes para la mayoría de los flujos de trabajo. Crea agentes personalizados cuando necesites una experiencia especializada que se aplique de forma consistente en tu trabajo. + +Cada tema a continuación es autocontenido. **Elige lo que te interese - no necesitas leerlos todos de una vez.** + +| Quiero... | Ir a | +|---|---| +| Ver por qué los agentes superan a los prompts genéricos | [Specialist vs Generic](#especialista-vs-genérico-ve-la-diferencia) | +| Combinar agentes en una característica | [Trabajar con múltiples agentes](#trabajar-con-múltiples-agentes) | +| Organizar, nombrar y compartir agentes | [Organizar y compartir agentes](#organizar-y-compartir-agentes) | +| Configurar contexto de proyecto siempre activo | [Configurar tu proyecto para Copilot](#configurar-tu-proyecto-para-copilot) | +| Consultar propiedades YAML y herramientas | [Referencia de archivos de agente](#referencia-de-archivo-de-agente) | + +Selecciona un escenario abajo para expandirlo. + +--- + + +
+Especialista vs Genérico: Ve la diferencia - Por qué los agentes producen mejores resultados que los prompts genéricos + +## Especialista vs Genérico: Ve la diferencia + +Aquí es donde los agentes demuestran su valor. Observa la diferencia: + +### Sin un agente (Copilot genérico) + +```bash +copilot + +> Add a function to search books by year range in the book app +``` + +**Salida genérica**: +```python +def search_by_year_range(books, start_year, end_year): + results = [] + for book in books: + if book['year'] >= start_year and book['year'] <= end_year: + results.append(book) + return results +``` + +Básico. Funciona. Pero faltan muchas cosas. + +--- + +### Con el agente revisor de Python + +```bash +copilot + +> /agent +# Selecciona "python-reviewer" + +> Add a function to search books by year range in the book app +``` + +**Salida especializada**: +```python +from typing import List, Dict, Any + +def search_by_year_range( + books: List[Dict[str, Any]], + start_year: int, + end_year: int +) -> List[Dict[str, Any]]: + """ + Search for books within a specified year range. + + Args: + books: List of book dictionaries + start_year: Starting year (inclusive) + end_year: Ending year (inclusive) + + Returns: + List of books published within the year range + + Raises: + ValueError: If start_year is greater than end_year + TypeError: If year values are not integers + """ + if not isinstance(start_year, int) or not isinstance(end_year, int): + raise TypeError("Year values must be integers") + + if start_year > end_year: + raise ValueError(f"Start year ({start_year}) cannot be greater than end year ({end_year})") + + return [ + book for book in books + if isinstance(book.get('year'), int) + and start_year <= book['year'] <= end_year + ] +``` + +**Lo que el agente python-reviewer incluye automáticamente**: +- ✅ Anotaciones de tipo en todos los parámetros y valores de retorno +- ✅ Docstring completa con Args/Returns/Raises +- ✅ Validación de entradas con manejo de errores adecuado +- ✅ Comprensión de listas para un mejor rendimiento +- ✅ Manejo de casos límite (valores de año faltantes/no válidos) +- ✅ Formato conforme a PEP 8 +- ✅ Prácticas de programación defensiva + +**La diferencia**: La misma instrucción, una salida dramáticamente mejor. El agente aporta la experiencia que olvidarías pedir. + +
+ +--- + + +
+Trabajar con múltiples agentes - Combinar especialistas, cambiar a mitad de la sesión, agente como herramienta + +## Trabajar con múltiples agentes + +El verdadero poder surge cuando los especialistas trabajan juntos en una funcionalidad. + +### Ejemplo: Construir una funcionalidad simple + +```bash +copilot + +> I want to add a "search by year range" feature to the book app + +# Usa python-reviewer para el diseño +> /agent +# Selecciona "python-reviewer" + +> @samples/book-app-project/books.py Design a find_by_year_range method. What's the best approach? + +# Cambia a pytest-helper para el diseño de pruebas +> /agent +# Selecciona "pytest-helper" + +> @samples/book-app-project/tests/test_books.py Design test cases for a find_by_year_range method. +> What edge cases should we cover? + +# Sintetiza ambos diseños +> Create an implementation plan that includes the method implementation and comprehensive tests. +``` + +**La idea clave**: Eres el arquitecto que dirige a los especialistas. Ellos manejan los detalles, tú manejas la visión. + +
+🎬 ¡Míralo en acción! + +![Demostración del revisor de Python](../../../04-agents-custom-instructions/assets/python-reviewer-demo.gif) + +*La salida de la demostración varía - tu modelo, herramientas y respuestas diferirán de lo que se muestra aquí.* + +
+ +### Agente como herramienta + +Cuando los agentes están configurados, Copilot también puede llamarlos como herramientas durante tareas complejas. Si pides una funcionalidad full-stack, Copilot puede delegar automáticamente partes a los agentes especialistas apropiados. + +
+ +--- + + +
+Organizar y compartir agentes - Nombrado, ubicación de archivos, archivos de instrucciones y compartición en equipo + +## Organizar y compartir agentes + +### Nombrar tus agentes + +Cuando creas archivos de agente, el nombre importa. Es lo que escribirás después de `/agent` o `--agent`, y lo que tus compañeros verán en la lista de agentes. + +| ✅ Buenos nombres | ❌ Evitar | +|--------------|----------| +| `frontend` | `my-agent` | +| `backend-api` | `agent1` | +| `security-reviewer` | `helper` | +| `react-specialist` | `code` | +| `python-backend` | `assistant` | + +**Convenciones de nombres:** +- Usa minúsculas con guiones: `my-agent-name.agent.md` + +- Incluir el dominio: `frontend`, `backend`, `devops`, `security` +- Sé específico cuando sea necesario: `react-typescript` vs solo `frontend` + +--- + +### Compartir con tu equipo + +Coloca los archivos de agente en `.github/agents/` y estarán controlados por versiones. Haz push a tu repositorio y cada miembro del equipo los recibirá automáticamente. Pero los agentes son solo un tipo de archivo que Copilot lee de tu proyecto. También admite **archivos de instrucciones** que se aplican automáticamente a cada sesión, sin que nadie necesite ejecutar `/agent`. + +Piénsalo así: los agentes son especialistas a los que llamas, y los archivos de instrucciones son reglas del equipo que siempre están activas. + +### Dónde colocar tus archivos + +Ya conoces las dos ubicaciones principales (ver [Dónde colocar archivos de agente](#dónde-colocar-los-archivos-de-agente) más arriba). Usa este árbol de decisión para elegir: + +Árbol de decisión sobre dónde colocar archivos de agente: experimentar → carpeta actual, uso en equipo → .github/agents/, en todas partes → ~/.copilot/agents/ + +**Empieza simple:** Crea un único `*.agent.md` en la carpeta de tu proyecto. Muévelo a una ubicación permanente una vez que estés satisfecho con él. + +Además de los archivos de agente, Copilot también lee **archivos de instrucciones a nivel de proyecto** automáticamente, sin necesidad de `/agent`. Consulta [Configurar tu proyecto para Copilot](#configurar-tu-proyecto-para-copilot) más abajo para `AGENTS.md`, `.instructions.md`, y `/init`. + +
+ +--- + + +
+Configurar tu proyecto para Copilot - AGENTS.md, archivos de instrucciones y configuración de /init + +## Configurar tu proyecto para Copilot + +Los agentes son especialistas que invocas bajo demanda. **Los archivos de configuración del proyecto** son diferentes: Copilot los lee automáticamente en cada sesión para entender las convenciones del proyecto, la pila tecnológica y las reglas. Nadie necesita ejecutar `/agent`; el contexto siempre está activo para todo el que trabaja en el repo. + +### Configuración rápida con /init + +La forma más rápida de empezar es dejar que Copilot genere archivos de configuración por ti: + +```bash +copilot +> /init +``` + +Copilot escaneará tu proyecto y creará archivos de instrucciones personalizados. Puedes editarlos después. + +### Formatos de archivos de instrucciones + +| Archivo | Alcance | Notas | +|------|-------|-------| +| `AGENTS.md` | Raíz del proyecto o anidado | **Estándar multiplataforma** - funciona con Copilot y otras herramientas de IA para codificación | +| `.github/copilot-instructions.md` | Proyecto | Específico de GitHub Copilot | +| `.github/instructions/*.instructions.md` | Proyecto | Instrucciones granulares por tema | +| `~/.copilot/instructions/**/*.instructions.md` | Usuario (todos los proyectos) | Instrucciones personales que se aplican en todas partes, en todos tus repositorios | +| `CLAUDE.md`, `GEMINI.md` | Raíz del proyecto | Admitidos por compatibilidad | + +> 🎯 **¿Recién empezando?** Usa `AGENTS.md` para las instrucciones del proyecto. Puedes explorar los otros formatos más adelante según sea necesario. + +### AGENTS.md + +`AGENTS.md` es el formato recomendado. Es un [estándar abierto](https://agents.md/) que funciona con Copilot y otras herramientas de codificación con IA. Colócalo en la raíz de tu repositorio y Copilot lo lee automáticamente. El propio [AGENTS.md](../AGENTS.md) de este proyecto es un ejemplo funcional. + +Un `AGENTS.md` típico describe tu contexto de proyecto, estilo de código, requisitos de seguridad y estándares de pruebas. Escribe el tuyo siguiendo el patrón en nuestro archivo de ejemplo. + +### Archivos de instrucciones personalizados (.instructions.md) + +Para equipos que quieran un control más granular, divide las instrucciones en archivos por tema. Cada archivo cubre una preocupación y se aplica automáticamente: + +``` +.github/ +└── instructions/ + ├── python-standards.instructions.md + ├── security-checklist.instructions.md + └── api-design.instructions.md +``` + +> 💡 **Nota**: Los archivos de instrucciones funcionan con cualquier lenguaje. Este ejemplo usa Python para coincidir con el proyecto del curso, pero puedes crear archivos similares para TypeScript, Go, Rust o cualquier tecnología que use tu equipo. + +#### Restringir el alcance con `applyTo` + +Por defecto, un archivo de instrucciones se aplica a cada conversación. Para limitarlo a tipos de archivo específicos, agrega un campo `applyTo` en el frontmatter YAML (el bloque entre los marcadores `---` en la parte superior del archivo): + +```markdown +--- +applyTo: "**/*.py" +--- +# Python Standards +Always follow PEP 8 style conventions. +Use type hints in all function signatures. +``` + +Con `applyTo: "**/*.py"`, Copilot solo carga ese archivo de instrucciones cuando estás trabajando con archivos Python. Las instrucciones para el estilo de Python nunca saturan una conversación sobre, por ejemplo, un Dockerfile o una consulta SQL. + +Aquí hay algunos patrones comunes: + +| `applyTo` value | Cuándo se aplica | +|---|---| +| `"**/*.py"` | Cualquier archivo Python | +| `"**/*.{ts,tsx}"` | Archivos TypeScript y TSX | +| `"tests/**"` | Cualquier archivo dentro de una carpeta `tests/` | +| (no frontmatter) | Cada conversación — por defecto | + +> 💡 **Consejo**: Envuelve el patrón glob entre comillas (p. ej., `"**/*.py"`) para asegurarte de que se interprete correctamente en todos los sistemas operativos y shells. + +#### Importar otros archivos con `@` + +Puedes referenciar otro archivo dentro de `AGENTS.md` o cualquier archivo de instrucciones usando la sintaxis `@filepath`. Copilot expande la referencia e incluye el contenido de ese archivo automáticamente, por lo que puedes mantener tu archivo principal corto mientras almacenas los detalles en otro lugar: + +```markdown + +# Project Instructions + +@.github/instructions/python-standards.instructions.md +@.github/instructions/test-standards.instructions.md +``` + +Esto es útil cuando tus instrucciones se vuelven extensas. Divídelas en archivos focalizados e impórtalos con `@` desde un único `AGENTS.md`. La misma sintaxis funciona dentro de `.github/copilot-instructions.md` y otros archivos de instrucciones también. + +> 💡 **Consejo**: Usa importaciones con `@` para compartir un archivo base común entre varios archivos de instrucciones. Por ejemplo, podrías tener un `@.github/instructions/shared-rules.md` que cada otro archivo de instrucciones incluya. + +**Encontrar archivos de instrucciones de la comunidad**: Explora [github/awesome-copilot](https://github.com/github/awesome-copilot) para archivos de instrucciones preconfeccionados que cubren .NET, Angular, Azure, Python, Docker y muchas más tecnologías. + +### Deshabilitar instrucciones personalizadas + +Si necesitas que Copilot ignore todas las configuraciones específicas del proyecto (útil para depurar o comparar comportamientos): + +```bash +copilot --no-custom-instructions +``` + +
+ +--- + + +
+Referencia de archivo de agente - propiedades YAML, alias de herramientas y ejemplos completos + +## Referencia de archivo de agente + +### Un ejemplo más completo + +Has visto el [formato mínimo de agente](#-add-your-agents) arriba. Aquí hay un agente más completo que usa la propiedad `tools`. Crea `~/.copilot/agents/python-reviewer.agent.md`: + +```markdown +--- +name: python-reviewer +description: Python code quality specialist for reviewing Python projects +tools: ["read", "edit", "search", "execute"] +--- + +# Python Code Reviewer + +You are a Python specialist focused on code quality and best practices. + +**Your focus areas:** +- Code quality (PEP 8, type hints, docstrings) +- Performance optimization (list comprehensions, generators) +- Error handling (proper exception handling) +- Maintainability (DRY principles, clear naming) + +**Code style requirements:** +- Use Python 3.10+ features (dataclasses, type hints, pattern matching) +- Follow PEP 8 naming conventions +- Use context managers for file I/O +- All functions must have type hints and docstrings + +**When reviewing code, always check:** +- Missing type hints on function signatures +- Mutable default arguments +- Proper error handling (no bare except) +- Input validation completeness +``` + +### Propiedades YAML + +| Propiedad | Requerido | Descripción | +|----------|----------|-------------| +| `name` | No | Nombre para mostrar (por defecto usa el nombre del archivo) | +| `description` | **Sí** | Qué hace el agente - ayuda a Copilot a entender cuándo sugerirlo | +| `tools` | No | Lista de herramientas permitidas (omitir = todas las herramientas disponibles). Ver los alias de herramientas más abajo. | +| `target` | No | Limitar a `vscode` o `github-copilot` solamente | + +### Alias de herramientas + +Usa estos nombres en la lista `tools`: +- `read` - Leer el contenido de archivos +- `edit` - Editar archivos +- `search` - Buscar archivos (grep/glob) +- `execute` - Ejecutar comandos de shell (también: `shell`, `Bash`) +- `agent` - Invocar otros agentes personalizados + +> 📖 **Documentación oficial**: [Configuración de agentes personalizados](https://docs.github.com/copilot/reference/custom-agents-configuration) +> +> ⚠️ **Solo VS Code**: La propiedad `model` (para seleccionar modelos de IA) funciona en VS Code pero no está soportada en GitHub Copilot CLI. Puedes incluirla de forma segura para archivos de agente multiplataforma. GitHub Copilot CLI la ignorará. + +### Más plantillas de agentes + +> 💡 **Nota para principiantes**: Los ejemplos a continuación son plantillas. **Reemplaza las tecnologías específicas por las que use tu proyecto.** Lo importante es la *estructura* del agente, no las tecnologías específicas mencionadas. + +Este proyecto incluye ejemplos funcionales en la carpeta [.github/agents/](../../../.github/agents): +- [hello-world.agent.md](../../../.github/agents/hello-world.agent.md) - Ejemplo mínimo, comienza aquí +- [python-reviewer.agent.md](../../../.github/agents/python-reviewer.agent.md) - Revisor de calidad de código Python +- [pytest-helper.agent.md](../../../.github/agents/pytest-helper.agent.md) - Especialista en pruebas Pytest + +Para agentes de la comunidad, consulta [github/awesome-copilot](https://github.com/github/awesome-copilot). + +
+ +--- + +# Práctica + +Configuración de escritorio acogedora con monitor mostrando código, lámpara, taza de café y auriculares listos para la práctica + +Crea tus propios agentes y míralos en acción. + +--- + +## ▶️ Inténtalo tú mismo + +```bash + +# Crea el directorio agents (si no existe) +mkdir -p .github/agents + +# Crea un agente revisor de código +cat > .github/agents/reviewer.agent.md << 'EOF' +--- +name: reviewer +description: Senior code reviewer focused on security and best practices +--- + +# Agente revisor de código + +You are a senior code reviewer focused on code quality. + +**Review priorities:** +1. Security vulnerabilities +2. Performance issues +3. Maintainability concerns +4. Best practice violations + +**Output format:** +Provide issues as a numbered list with severity tags: +[CRITICAL], [HIGH], [MEDIUM], [LOW] +EOF + +# Crea un agente de documentación +cat > .github/agents/documentor.agent.md << 'EOF' +--- +name: documentor +description: Technical writer for clear and complete documentation +--- + +# Agente de documentación + +You are a technical writer who creates clear documentation. + +**Documentation standards:** +- Start with a one-sentence summary +- Include usage examples +- Document parameters and return values +- Note any gotchas or limitations +EOF + +# Úsalos ahora +copilot --agent reviewer +> Review @samples/book-app-project/books.py + +# O cambia de agente +copilot +> /agent +# Selecciona "documentor" +> Document @samples/book-app-project/books.py +``` + +--- + +## 📝 Tarea + +### Desafío principal: Diseñar un equipo de agentes especializados + +El ejemplo práctico creó los agentes `reviewer` y `documentor`. Ahora practica crear y usar agentes para una tarea diferente: mejorar la validación de datos en la aplicación de libros: + +1. Crea 3 archivos de agente (`.agent.md`) adaptados a la aplicación de libros, uno por agente, ubicados en `.github/agents/` +2. Tus agentes: + - **data-validator**: verifica `data.json` en busca de datos faltantes o mal formados (autores vacíos, year=0, campos faltantes) + - **error-handler**: revisa el código Python en busca de manejo de errores inconsistente y sugiere un enfoque unificado + - **doc-writer**: genera o actualiza docstrings y contenido del README +3. Usa cada agente en la aplicación de libros: + - `data-validator` → auditar `@samples/book-app-project/data.json` + - `error-handler` → revisar `@samples/book-app-project/books.py` y `@samples/book-app-project/utils.py` + - `doc-writer` → agregar docstrings a `@samples/book-app-project/books.py` +4. Colabora: usa `error-handler` para identificar lagunas en el manejo de errores, luego `doc-writer` para documentar el enfoque mejorado + +**Criterios de éxito**: Tienes 3 agentes funcionales que producen resultados consistentes y de alta calidad y puedes cambiar entre ellos con `/agent`. + +
+💡 Pistas (haz clic para expandir) + +**Plantillas iniciales**: crea un archivo por agente en `.github/agents/`: + +`data-validator.agent.md`: +```markdown +--- +description: Analyzes JSON data files for missing or malformed entries +--- + +You analyze JSON data files for missing or malformed entries. + +**Focus areas:** +- Empty or missing author fields +- Invalid years (year=0, future years, negative years) +- Missing required fields (title, author, year, read) +- Duplicate entries +``` + +`error-handler.agent.md`: +```markdown +--- +description: Reviews Python code for error handling consistency +--- + +You review Python code for error handling consistency. + +**Standards:** +- No bare except clauses +- Use custom exceptions where appropriate +- All file operations use context managers +- Consistent return types for success/failure +``` + +`doc-writer.agent.md`: +```markdown +--- +description: Technical writer for clear Python documentation +--- + +You are a technical writer who creates clear Python documentation. + +**Standards:** +- Google-style docstrings +- Include parameter types and return values +- Add usage examples for public methods +- Note any exceptions raised +``` + +**Probando tus agentes:** + +> 💡 **Nota:** Deberías ya tener `samples/book-app-project/data.json` en tu copia local de este repo. Si falta, descarga la versión original del repositorio fuente: +> [data.json](https://github.com/github/copilot-cli-for-beginners/blob/main/samples/book-app-project/data.json) + +```bash +copilot +> /agent +# Seleccione "data-validator" de la lista +> @samples/book-app-project/data.json Check for books with empty author fields or invalid years +``` + +**Consejo:** El campo `description` en el frontmatter YAML es obligatorio para que los agentes funcionen. + +
+ +### Desafío adicional: Biblioteca de instrucciones + +Has creado agentes que invocas bajo demanda. Ahora prueba el otro lado: **archivos de instrucciones** que Copilot lee automáticamente en cada sesión, sin necesitar `/agent`. + +Crea una carpeta `.github/instructions/` con al menos 3 archivos de instrucciones: +- `python-style.instructions.md` para aplicar PEP 8 y convenciones de anotaciones de tipo +- `test-standards.instructions.md` para aplicar convenciones de pytest en archivos de pruebas +- `data-quality.instructions.md` para validar entradas de datos JSON + +Prueba cada archivo de instrucciones en el código de la aplicación de libros. + +--- + +
+🔧 Errores comunes y solución de problemas (haz clic para expandir) + +### Errores comunes + +| Error | Qué ocurre | Solución | +|---------|--------------|-----| +| Falta `description` en el frontmatter del agente | El agente no se cargará o no será detectable | Incluye siempre `description:` en el frontmatter YAML | +| Ubicación incorrecta de archivos de agentes | El agente no se encontrará cuando intentes usarlo | Colócalo en `~/.copilot/agents/` (personal) o `.github/agents/` (proyecto) | +| Usar `.md` en lugar de `.agent.md` | El archivo puede no ser reconocido como agente | Nombra archivos como `python-reviewer.agent.md` | +| Prompts de agente demasiado largos | Pueden alcanzar el límite de 30,000 caracteres | Mantén las definiciones de agentes enfocadas; usa skills para instrucciones detalladas | + +### Solución de problemas + +**Agente no encontrado** - Comprueba que el archivo del agente exista en una de estas ubicaciones: +- `~/.copilot/agents/` +- `.github/agents/` + +Lista de agentes disponibles: + +```bash +copilot +> /agent +# Muestra todos los agentes disponibles +``` + +**Agente que no sigue las instrucciones** - Sé explícito en tus prompts y añade más detalle en las definiciones de los agentes: +- Frameworks/librerías específicas con versiones +- Convenciones del equipo +- Patrones de código de ejemplo + +**Instrucciones personalizadas que no se cargan** - Ejecuta `/init` en tu proyecto para configurar instrucciones específicas del proyecto: + +```bash +copilot +> /init +``` + +O comprueba si están deshabilitadas: +```bash +# No use --no-custom-instructions si quiere que se carguen +copilot # Esto carga las instrucciones personalizadas por defecto +``` + +
+ +--- + +# Resumen + + +## 🔑 Puntos clave + +1. **Agentes integrados**: `/plan` y `/review` se invocan directamente; Explore y Task funcionan automáticamente +2. **Agentes personalizados** son especialistas definidos en archivos `.agent.md` +3. **Buenos agentes** tienen especialización clara, estándares y formatos de salida +4. **Colaboración multiagente** resuelve problemas complejos combinando conocimientos especializados +5. **Archivos de instrucciones** (`.instructions.md`) codifican los estándares del equipo para su aplicación automática +6. **Resultados consistentes** provienen de instrucciones de agentes bien definidas + +> 📋 **Referencia rápida**: Consulta la [Referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para una lista completa de comandos y atajos. + +--- + +## ➡️ Qué sigue + +Los agentes cambian *cómo Copilot aborda y realiza acciones dirigidas* en tu código. A continuación, aprenderás sobre **skills** - que cambian *qué pasos* sigue. ¿Te preguntas cómo difieren los agentes y las skills? El Capítulo 05 lo aborda directamente. + +En **[Capítulo 05: Skills System](../05-skills/README.md)**, aprenderás: + +- Cómo las skills se activan automáticamente desde tus prompts (no se necesita comando con barra) +- Instalar skills de la comunidad +- Crear skills personalizados con archivos SKILL.md +- La diferencia entre agentes, skills y MCP +- Cuándo usar cada uno + +--- + +**[← Volver al Capítulo 03](../03-development-workflows/README.md)** | **[Continuar al Capítulo 05 →](../05-skills/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/05-skills/README.md b/translations/es/05-skills/README.md new file mode 100644 index 00000000..fd2aafc6 --- /dev/null +++ b/translations/es/05-skills/README.md @@ -0,0 +1,943 @@ + + +![Capítulo 05: Sistema de skills](../../../05-skills/assets/chapter-header.png) + +> **¿Y si Copilot pudiera aplicar automáticamente las mejores prácticas de tu equipo sin que tengas que explicarlas cada vez?** + +En este capítulo, aprenderás sobre Skills de agente: carpetas de instrucciones que Copilot carga automáticamente cuando son relevantes para tu tarea. Mientras que los agentes cambian *cómo* Copilot piensa, las skills enseñan a Copilot *maneras específicas de completar tareas*. Crearás una skill de auditoría de seguridad que Copilot aplicará siempre que preguntes sobre seguridad, construirás criterios de revisión estándar del equipo que aseguren una calidad de código consistente, y aprenderás cómo funcionan las skills en Copilot CLI, VS Code y el agente en la nube de GitHub Copilot. + + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, podrás: + +- Entender cómo funcionan las Skills de agente y cuándo usarlas +- Crear skills personalizadas con archivos SKILL.md +- Usar skills de la comunidad desde repositorios compartidos +- Saber cuándo usar skills vs agents vs MCP + +> ⏱️ **Tiempo estimado**: ~55 minutos (20 min lectura + 35 min práctico) + +--- + +## 🧩 Analogía del mundo real: Herramientas eléctricas + +Un taladro de uso general es útil, pero los accesorios especializados lo hacen potente. +Herramientas eléctricas - Las skills extienden las capacidades de Copilot + + +Las skills funcionan igual. Al igual que cambiar brocas para diferentes trabajos, puedes añadir skills a Copilot para distintas tareas: + +| Adjunto de skill | Propósito | +|------------|---------| +| `commit` | Generar mensajes de commit coherentes | +| `security-audit` | Buscar vulnerabilidades OWASP | +| `generate-tests` | Crear tests completos con pytest | +| `code-checklist` | Aplicar estándares de calidad de código del equipo | + + + +*Las skills son adjuntos especializados que amplían lo que Copilot puede hacer* + +--- + +# Cómo funcionan las skills + +Iconos de skills luminosos estilo RPG conectados por trazos de luz sobre un fondo estrellado representando las skills de Copilot + +Aprende qué son las skills, por qué importan, y cómo se diferencian de agents y MCP. + +--- + +## *¿Nuevo en las skills?* ¡Comienza aquí! + +1. **Consulta qué skills ya están disponibles:** + ```bash + copilot + > /skills list + ``` + Esto muestra todas las skills que Copilot puede encontrar, incluidas las **skills integradas** que vienen con la propia CLI, además de skills de tu proyecto y carpetas personales. + + > 💡 **Skills integradas**: La Copilot CLI incluye skills preinstaladas. Por ejemplo, la skill `customizing-copilot-cloud-agents-environment` proporciona una guía para personalizar el entorno del agente en la nube de Copilot. No necesitas crear ni instalar nada para usarlas. Ejecuta `/skills list` para ver lo que hay disponible. + +2. **Mira un archivo skill real:** Revisa nuestro [code-checklist SKILL.md](../../../.github/skills/code-checklist/SKILL.md) para ver el patrón. Es solo frontmatter YAML más instrucciones en markdown. + +3. **Entiende el concepto central:** Las skills son instrucciones específicas de tarea que Copilot carga *automáticamente* cuando tu prompt coincide con la descripción de la skill. No necesitas activarlas, solo pregunta de forma natural. + + +## Comprendiendo las skills + +Las Skills de agente son carpetas que contienen instrucciones, scripts y recursos que Copilot **carga automáticamente cuando son relevantes** para tu tarea. Copilot lee tu prompt, verifica si alguna skill coincide, y aplica las instrucciones relevantes automáticamente. + +```bash +copilot + +> Check books.py against our quality checklist +# Copilot detecta que esto coincide con tu habilidad "code-checklist" +# y aplica automáticamente su lista de comprobación de calidad para Python + +> Generate tests for the BookCollection class +# Copilot carga tu habilidad "pytest-gen" +# y aplica tu estructura de pruebas preferida + +> What are the code quality issues in this file? +# Copilot carga tu habilidad "code-checklist" +# y verifica según los estándares de tu equipo +``` + +> 💡 **Idea clave**: Las skills se **activan automáticamente** cuando tu prompt coincide con la descripción de la skill. Simplemente pregunta de forma natural y Copilot aplica las skills relevantes entre bastidores. También puedes invocar skills directamente, como aprenderás a continuación. + +> 🧰 **Plantillas listas para usar**: Revisa la carpeta [.github/skills](../../../.github/skills) para encontrar skills simples que puedes copiar y pegar para probar. + +### Invocación directa con comando slash + +Aunque el auto-disparo es la forma principal en que funcionan las skills, también puedes **invocarlas directamente** usando su nombre como un comando slash: + +```bash +> /generate-tests Create tests for the user authentication module + +> /code-checklist Check books.py for code quality issues + +> /security-audit Check the API endpoints for vulnerabilities +``` + +Esto te da control explícito cuando quieres asegurarte de que se use una skill específica. + +#### Combinar múltiples skills en un solo mensaje + +Puedes invocar **más de una skill en un solo mensaje**, y el comando slash de la skill puede aparecer en cualquier parte de tu prompt — no solo al principio. Esto es útil cuando quieres que se realicen dos comprobaciones diferentes de una sola vez: + +```bash +> Check @samples/book-app-project/book_app.py with /code-checklist and also run /generate-tests for it + +> Review the auth module /security-audit then /code-checklist the result +``` + +Copilot aplicará cada skill nombrada en la misma respuesta, ahorrándote tener que enviar varios mensajes separados. + +> 💡 **Consejo**: Coloca los comandos slash de las skills donde se sientan más naturales en tu frase. Puedes ponerlos al inicio, en medio o al final de tu mensaje. + +> 📝 **Invocación: Skills vs Agents**: No confundas la invocación de una skill con la invocación de un agente: +> - **Skills**: `/skill-name `, e.g., `/code-checklist Check this file` +> - **Agents**: `/agent` (selecciona de la lista) o `copilot --agent ` (línea de comandos) +> +> Si tienes tanto una skill como un agent con el mismo nombre (p. ej., "code-reviewer"), escribir `/code-reviewer` invoca la **skill**, no el agent. + +### ¿Cómo sé si se usó una skill? + +Puedes preguntarle a Copilot directamente: + +```bash +> What skills did you use for that response? + +> What skills do you have available for security reviews? +``` + +### Skills vs Agents vs MCP + +Las skills son solo una pieza del modelo de extensibilidad de GitHub Copilot. Aquí se explica cómo se comparan con los agents y los servidores MCP. + +> *No te preocupes aún por MCP. Lo cubriremos en [Capítulo 06](../../../06-mcp-servers). Se incluye aquí para que puedas ver cómo encajan las skills en el panorama general.* + +Diagrama comparativo que muestra las diferencias entre Agents, Skills y servidores MCP y cómo se combinan en tu flujo de trabajo + +| Característica | Qué hace | Cuándo usarlo | +|---------|--------------|-------------| +| **Agents** | Cambian cómo piensa la IA | Necesitas experiencia especializada en muchas tareas | +| **Skills** | Proporcionan instrucciones específicas de tarea | Tareas específicas y repetibles con pasos detallados | +| **MCP** | Conecta servicios externos | Necesitas datos en tiempo real de APIs | + +Usa agents para experiencia amplia, skills para instrucciones específicas de tarea, y MCP para datos externos. Un agent puede usar una o más skills durante una conversación. Por ejemplo, cuando le pides a un agent que revise tu código, podría aplicar automáticamente tanto la skill `security-audit` como la `code-checklist`. + +> 📚 **Aprende más**: Consulta la documentación oficial [Acerca de Agent Skills](https://docs.github.com/copilot/concepts/agents/about-agent-skills) para la referencia completa sobre formatos de skills y mejores prácticas. + +--- + +## De prompts manuales a experiencia automática + +Antes de profundizar en cómo crear skills, veamos *por qué* vale la pena aprenderlas. Una vez que veas las ganancias en consistencia, el "cómo" tendrá más sentido. + +### Antes de las skills: revisiones inconsistentes + +En cada revisión de código, podrías olvidar algo: + +```bash +copilot + +> Review this code for issues +# Revisión genérica: podría pasar por alto las preocupaciones específicas de su equipo +``` + +O escribes un prompt largo cada vez: + +```bash +> Review this code checking for bare except clauses, missing type hints, +> mutable default arguments, missing context managers for file I/O, +> functions over 50 lines, print statements in production code... +``` + +Tiempo: **30+ segundos** para escribir. Consistencia: **varía según la memoria**. + +### Después de las skills: mejores prácticas automáticas + +Con una skill `code-checklist` instalada, solo pregunta de forma natural: + +```bash +copilot + +> Check the book collection code for quality issues +``` + +**Qué ocurre tras bambalinas**: +1. Copilot detecta "calidad de código" y "problemas" en tu prompt +2. Verifica las descripciones de las skills, encuentra que tu skill `code-checklist` coincide +3. Carga automáticamente la lista de verificación de calidad de tu equipo +4. Aplica todas las comprobaciones sin que tú las enumeres + +Cómo se activan automáticamente las skills - flujo de 4 pasos que muestra cómo Copilot empareja automáticamente tu prompt con la skill correcta + +*Simplemente pregunta de forma natural. Copilot empareja tu prompt con la skill adecuada y la aplica automáticamente.* + +**Salida**: +``` +## Code Checklist: books.py + +### Code Quality +- [PASS] All functions have type hints +- [PASS] No bare except clauses +- [PASS] No mutable default arguments +- [PASS] Context managers used for file I/O +- [PASS] Functions are under 50 lines +- [PASS] Variable and function names follow PEP 8 + +### Input Validation +- [FAIL] User input is not validated - add_book() accepts any year value +- [FAIL] Edge cases not fully handled - empty strings accepted for title/author +- [PASS] Error messages are clear and helpful + +### Testing +- [FAIL] No corresponding pytest tests found + +### Summary +3 items need attention before merge +``` + +**La diferencia**: Los estándares de tu equipo se aplican automáticamente, cada vez, sin tener que escribirlos. + +--- + +
+🎬 Véalo en acción! + +![Demostración de activación de skill](../../../05-skills/assets/skill-trigger-demo.gif) + +*La salida de la demo varía. Tu modelo, herramientas y respuestas diferirán de lo que se muestra aquí.* + +
+ +--- + +## Consistencia a escala: Skill de revisión de PR del equipo + +Imagina que tu equipo tiene una lista de verificación de PR de 10 puntos. Sin una skill, cada desarrollador debe recordar los 10 puntos, y siempre alguien olvida alguno de ellos. Con una `pr-review` skill, el equipo entero obtiene revisiones consistentes: + +```bash +copilot + +> Can you review this PR? +``` + +Copilot carga automáticamente la skill `pr-review` de tu equipo y verifica los 10 puntos: + +``` +PR Review: feature/user-auth + +## Security ✅ +- No hardcoded secrets +- Input validation present +- No bare except clauses + +## Code Quality ⚠️ +- [WARN] print statement on line 45 - remove before merge +- [WARN] TODO on line 78 missing issue reference +- [WARN] Missing type hints on public functions + +## Testing ✅ +- New tests added +- Edge cases covered + +## Documentation ❌ +- [FAIL] Breaking change not documented in CHANGELOG +- [FAIL] API changes need OpenAPI spec update +``` + +**El poder**: Cada miembro del equipo aplica los mismos estándares automáticamente. Las nuevas incorporaciones no necesitan memorizar la lista porque la skill se encarga. + +--- + +# Creando skills personalizadas + +Mano humana y mano robótica construyendo un muro de bloques brillantes tipo LEGO que representan la creación y gestión de skills + +Construye tus propias skills a partir de archivos SKILL.md. + +--- + +## Ubicaciones de las skills + +Las skills se almacenan en `.github/skills/` (específico del proyecto) o en `~/.copilot/skills/` (nivel de usuario). + +### Cómo Copilot encuentra las skills + +Copilot escanea automáticamente estas ubicaciones en busca de skills: + +| Ubicación | Ámbito | +|----------|-------| +| `.github/skills/` | Específico del proyecto (compartido con el equipo vía git) | +| `~/.copilot/skills/` | Específico del usuario (tus skills personales) | + +### Estructura de una skill + +Cada skill vive en su propia carpeta con un archivo `SKILL.md`. Opcionalmente puedes incluir scripts, ejemplos u otros recursos: + +``` +.github/skills/ +└── my-skill/ + ├── SKILL.md # Required: Skill definition and instructions + ├── examples/ # Optional: Example files Copilot can reference + │ └── sample.py + └── scripts/ # Optional: Scripts the skill can use + └── validate.sh +``` + +> 💡 **Consejo**: El nombre del directorio debe coincidir con el `name` en el frontmatter de tu SKILL.md (minúsculas y con guiones). + +### Formato SKILL.md + +Las skills usan un formato markdown sencillo con frontmatter YAML: + +```markdown +--- +name: code-checklist +description: Comprehensive code quality checklist with security, performance, and maintainability checks +license: MIT +--- + +# Code Checklist + +When checking code, look for: + +## Security +- SQL injection vulnerabilities +- XSS vulnerabilities +- Authentication/authorization issues +- Sensitive data exposure + +## Performance +- N+1 query problems (running one query per item instead of one query for all items) +- Unnecessary loops or computations +- Memory leaks +- Blocking operations + +## Maintainability +- Function length (flag functions > 50 lines) +- Code duplication +- Missing error handling +- Unclear naming + +## Output Format +Provide issues as a numbered list with severity: +- [CRITICAL] - Must fix before merge +- [HIGH] - Should fix before merge +- [MEDIUM] - Should address soon +- [LOW] - Nice to have +``` + +**Propiedades YAML:** + +| Propiedad | Requerido | Descripción | +|----------|----------|-------------| +| `name` | **Sí** | Identificador único (minúsculas, guiones en lugar de espacios) | +| `description` | **Sí** | Qué hace la skill y cuándo Copilot debería usarla | +| `license` | No | Licencia que se aplica a esta skill | +| `argument-hint` | No | Ayuda corta mostrada a los usuarios describiendo qué argumento espera la skill (p. ej., "ruta de archivo o fragmento de código") | + +> 💡 **¿Qué es `argument-hint`?** Cuando los usuarios invocan una skill directamente (por ejemplo, `/security-audit`), el texto de `argument-hint` aparece como un marcador de posición que muestra qué escribir a continuación — como una mini ayuda. Por ejemplo, configurar `argument-hint: "ruta del archivo a revisar"` le indica al usuario que proporcione una ruta de archivo después del nombre de la skill. + +> 📖 **Documentación oficial**: [Acerca de Agent Skills](https://docs.github.com/copilot/concepts/agents/about-agent-skills) + +### Creando tu primera skill + +Construyamos una skill de auditoría de seguridad que verifique vulnerabilidades del OWASP Top 10: + +```bash +# Crear directorio de la skill +mkdir -p .github/skills/security-audit + +# Crear el archivo SKILL.md +cat > .github/skills/security-audit/SKILL.md << 'EOF' +--- +name: security-audit +description: Security-focused code review checking OWASP (Open Web Application Security Project) Top 10 vulnerabilities +--- + +# Auditoría de seguridad + +Perform a security audit checking for: + +## Vulnerabilidades de inyección +- SQL injection (string concatenation in queries) +- Command injection (unsanitized shell commands) +- LDAP injection +- XPath injection + +## Problemas de autenticación +- Hardcoded credentials +- Weak password requirements +- Missing rate limiting +- Session management flaws + +## Datos sensibles +- Plaintext passwords +- API keys in code +- Logging sensitive information +- Missing encryption + +## Control de acceso +- Missing authorization checks +- Insecure direct object references +- Path traversal vulnerabilities + +## Salida +For each issue found, provide: +1. File and line number +2. Vulnerability type +3. Severity (CRITICAL/HIGH/MEDIUM/LOW) +4. Recommended fix +EOF + +# Prueba tu skill (las skills se cargan automáticamente según tu prompt) +copilot + +> @samples/book-app-project/ Check this code for security vulnerabilities +# Copilot detecta coincidencias de "security vulnerabilities" con tu skill +# y aplica automáticamente su lista de verificación OWASP +``` + +**Salida esperada** (tus resultados variarán): + +``` +Security Audit: book-app-project + +[HIGH] Hardcoded file path (book_app.py, line 12) + File path is hardcoded rather than configurable + Fix: Use environment variable or config file + +[MEDIUM] No input validation (book_app.py, line 34) + User input passed directly to function without sanitization + Fix: Add input validation before processing + +✅ No SQL injection found +✅ No hardcoded credentials found +``` + +--- + +## Escribir buenas descripciones de skill + +¡El campo `description` en tu SKILL.md es crucial! Es como Copilot decide si cargar tu skill: + +```markdown +--- +name: security-audit +description: Use for security reviews, vulnerability scanning, + checking for SQL injection, XSS, authentication issues, + OWASP Top 10 vulnerabilities, and security best practices +--- +``` + +> 💡 **Consejo**: Incluye palabras clave que coincidan con cómo preguntas de forma natural. Si dices "security review", incluye "security review" en la descripción. + +### Combinando skills con agents + +Skills y agents trabajan juntos. El agent proporciona la experiencia, la skill proporciona instrucciones específicas: + +```bash +# Comienza con un agente revisor de código +copilot --agent code-reviewer + +> Check the book app for quality issues +# la experiencia del agente revisor de código se combina +# con la lista de verificación de tu habilidad code-checklist +``` + +--- + +# Gestionar y compartir skills + +Descubre skills instaladas, encuentra skills de la comunidad y comparte las tuyas. + +Gestionar y compartir skills - mostrando el ciclo descubrir, usar, crear y compartir para skills de la CLI + +--- + +## Gestionar skills con el comando `copilot skill` y `/skills` + +La Copilot CLI te ofrece dos formas de gestionar skills. Puedes hacerlo directamente desde el terminal antes de iniciar Copilot o desde dentro de una sesión de Copilot. + +### Opción 1: `copilot skill` (comando de terminal) + +El subcomando `copilot skill` te permite gestionar skills directamente desde tu terminal, sin abrir una sesión interactiva de Copilot. Esto es útil para scripting, comprobaciones rápidas o añadir skills antes de empezar a trabajar. + +```bash +# Ver todas las habilidades instaladas +copilot skill list + +# Agregar una habilidad desde un archivo local, URL o directorio +copilot skill add .github/skills/my-skill/SKILL.md +copilot skill add https://example.com/skills/security-audit/SKILL.md + +# Eliminar una habilidad por nombre +copilot skill remove security-audit +``` + +### Opción 2: `/skills` (dentro de una sesión de Copilot) + +Una vez dentro de una sesión interactiva de Copilot, usa `/skills` (o su atajo `/skill`) para gestionar skills sin salir: + +| Comando | Qué hace | + +|---------|--------------| +| `/skills list` | Mostrar todas las skills instaladas | +| `/skills info ` | Obtener detalles sobre una skill específica | +| `/skills add ` | Habilitar una skill (desde un repositorio o marketplace) | +| `/skills remove ` | Deshabilitar o desinstalar una skill | +| `/skills reload` | Recargar skills después de editar archivos SKILL.md | + +> 💡 **`/skill` shortcut**: You can type `/skill` instead of `/skills` — they're interchangeable. For example, `/skill list` works the same as `/skills list`. + +> 💡 **Recuerda**: No necesitas "activar" las skills para cada petición. Una vez instaladas, las skills se **activan automáticamente** cuando tu prompt coincide con su descripción. Estos comandos sirven para gestionar qué skills están disponibles, no para usarlas. + +### Example: View Your Skills + +```bash +# Desde la terminal (no se necesita sesión interactiva): +copilot skill list + +Project skills: +- security-audit: Security-focused code review checking OWASP Top 10 +- generate-tests: Generate comprehensive unit tests with edge cases +- code-checklist: Team code quality checklist (disabled) +... + +# O desde dentro de una sesión de Copilot: +copilot + +> /skills list + +Project skills: +- security-audit: Security-focused code review checking OWASP Top 10 +- generate-tests: Generate comprehensive unit tests with edge cases +- code-checklist: Team code quality checklist (disabled) +... + +> /skills info security-audit + +Skill: security-audit +Source: Project +Location: .github/skills/security-audit/SKILL.md +Description: Security-focused code review checking OWASP Top 10 vulnerabilities +``` + +> 💡 **Skills deshabilitadas**: Las skills marcadas como `(disabled)` están instaladas pero no están activas actualmente. No se activarán por prompts hasta que se vuelvan a habilitar. Esto puede suceder si el archivo `SKILL.md` de una skill tiene un problema de configuración, o si la skill fue deshabilitada explícitamente. Puedes habilitar/deshabilitar skills ejecutando `/skills`. + +--- + +
+¡Míralo en acción! + +![Demostración de listado de skills](../../../05-skills/assets/list-skills-demo.gif) + +*La salida de la demo puede variar. Tu modelo, herramientas y respuestas serán diferentes de lo que se muestra aquí.* + +
+ +--- + +### When to Use `/skills reload` + +Después de crear o editar el archivo SKILL.md de una skill, ejecuta `/skills reload` para aplicar los cambios sin reiniciar Copilot: + +```bash +# Edita tu archivo de habilidad +# Luego en Copilot: +> /skills reload +Skills reloaded successfully. +``` + +> 💡 **Dato útil**: Las skills siguen siendo efectivas incluso después de usar `/compact` para resumir el historial de conversación. No es necesario recargar después de compactar. + +--- + +## Finding and Using Community Skills + +### Using Plugins to Install Skills + +> 💡 **¿Qué son los plugins?** Los plugins son paquetes instalables que pueden agrupar skills, agentes y configuraciones de servidores MCP. Piénsalos como extensiones tipo "tienda de apps" para Copilot CLI. + +El comando `/plugin` te permite explorar e instalar estos paquetes: + +```bash +copilot + +> /plugin list +# Muestra los complementos instalados + +> /plugin marketplace +# Explorar complementos disponibles + +> /plugin install +# Instalar un complemento desde el mercado +``` + +Para mantener tu catálogo local de plugins actualizado, actualízalo con: + +```bash +copilot plugin marketplace update +``` + +Los plugins pueden agrupar múltiples capacidades. Un solo plugin podría incluir skills, agentes y configuraciones de servidores MCP relacionadas que funcionen conjuntamente. + +### Community Skill Repositories + +También hay skills ya hechas disponibles en repositorios comunitarios: + +- **[Awesome Copilot](https://github.com/github/awesome-copilot)** - Recursos oficiales de GitHub Copilot que incluyen documentación de skills y ejemplos + +### Installing a Community Skill with GitHub CLI + +La forma más fácil de instalar una skill desde un repositorio de GitHub es usando el comando `gh skill install` (requiere [GitHub CLI v2.90.0+](https://github.blog/changelog/2026-04-16-manage-agent-skills-with-github-cli/)): + +```bash +# Explorar y seleccionar de forma interactiva una skill de awesome-copilot +gh skill install github/awesome-copilot + +# O instalar directamente una skill específica +gh skill install github/awesome-copilot ai-ready + +# Instalar para uso personal en todos los proyectos (ámbito de usuario) +gh skill install github/awesome-copilot ai-ready --scope user +``` + +> ⚠️ **Revisa antes de instalar**: Siempre lee el `SKILL.md` de una skill antes de instalarla. Las skills controlan lo que hace Copilot, y una skill maliciosa podría indicarle ejecutar comandos dañinos o modificar el código de formas inesperadas. + +--- + +# Practice + +Configuración de escritorio acogedora con monitor mostrando código, lámpara, taza de café y auriculares listos para practicar + +Aplica lo que has aprendido construyendo y probando tus propias skills. + +--- + +## ▶️ Try It Yourself + +### Build More Skills + +Aquí hay dos skills más que muestran diferentes patrones. Sigue el mismo flujo `mkdir` + `cat` de "Crear tu primera skill" arriba o copia y pega las skills en la ubicación correcta. Hay más ejemplos disponibles en [.github/skills](../../../.github/skills). + +### pytest Test Generation Skill + +Una skill que garantiza una estructura consistente de pytest en tu base de código: + +```bash +mkdir -p .github/skills/pytest-gen + +cat > .github/skills/pytest-gen/SKILL.md << 'EOF' +--- +name: pytest-gen +description: Generate comprehensive pytest tests with fixtures and edge cases +--- + +# pytest Generación de pruebas + +Generate pytest tests that include: + +## Estructura de las pruebas +- Use pytest conventions (test_ prefix) +- One assertion per test when possible +- Clear test names describing expected behavior +- Use fixtures for setup/teardown + +## Cobertura +- Happy path scenarios +- Edge cases: None, empty strings, empty lists +- Boundary values +- Error scenarios with pytest.raises() + +## Fixtures +- Use @pytest.fixture for reusable test data +- Use tmpdir/tmp_path for file operations +- Mock external dependencies with pytest-mock + +## Salida +Provide complete, runnable test file with proper imports. +EOF +``` + +### Team PR Review Skill + +Una skill que aplica estándares consistentes de revisión de PR en tu equipo: + +```bash +mkdir -p .github/skills/pr-review + +cat > .github/skills/pr-review/SKILL.md << 'EOF' +--- +name: pr-review +description: Team-standard PR review checklist +--- + +# Revisión de PR + +Review code changes against team standards: + +## Lista de verificación de seguridad +- [ ] No hardcoded secrets or API keys +- [ ] Input validation on all user data +- [ ] No bare except clauses +- [ ] No sensitive data in logs + +## Calidad del código +- [ ] Functions under 50 lines +- [ ] No print statements in production code +- [ ] Type hints on public functions +- [ ] Context managers for file I/O +- [ ] No TODOs without issue references + +## Pruebas +- [ ] New code has tests +- [ ] Edge cases covered +- [ ] No skipped tests without explanation + +## Documentación +- [ ] API changes documented +- [ ] Breaking changes noted +- [ ] README updated if needed + +## Formato de salida +Provide results as: +- ✅ PASS: Items that look good +- ⚠️ WARN: Items that could be improved +- ❌ FAIL: Items that must be fixed before merge +EOF +``` + +### Go Further + +1. **Skill Creation Challenge**: Create a `quick-review` skill that does a 3-point checklist: + - Cláusulas except vacías + - Faltan anotaciones de tipo + - Nombres de variables poco claros + + Pruébalo pidiendo: "Haz una revisión rápida de books.py" + +2. **Skill Comparison**: Time yourself writing a detailed security review prompt manually. Then just ask "Busca problemas de seguridad en este archivo" and let your security-audit skill load automatically. How much time did the skill save? + +3. **Team Skill Challenge**: Think about your team's code review checklist. Could you encode it as a skill? Write down 3 things the skill should always check. + +**Self-Check**: You understand skills when you can explain why the `description` field matters (it's how Copilot decides whether to load your skill). + +--- + +## 📝 Assignment + +### Main Challenge: Build a Book Summary Skill + +The examples above created `pytest-gen` and `pr-review` skills. Now practice creating a completely different kind of skill: one for generating formatted output from data. + +1. List your current skills: Run Copilot and pass it `/skills list`. You can also use `ls .github/skills/` to see project skills or `ls ~/.copilot/skills/` for personal skills. +2. Create a `book-summary` skill at `.github/skills/book-summary/SKILL.md` that generates a formatted markdown summary of the book collection +3. Your skill should have: + - Clear name and description (description is crucial for matching!) + - Specific formatting rules (e.g., markdown table with title, author, year, read status) + - Output conventions (e.g., use ✅/❌ for read status, sort by year) +4. Test the skill: `@samples/book-app-project/data.json Summarize the books in this collection` +5. Verify the skill auto-triggers by checking `/skills list` +6. Try invoking it directly with `/book-summary Summarize the books in this collection` + +**Success criteria**: You have a working `book-summary` skill that Copilot automatically applies when you ask about the book collection. + +
+💡 Pistas (haz clic para expandir) + +**Starter template**: Create `.github/skills/book-summary/SKILL.md`: + +```markdown +--- +name: book-summary +description: Generate a formatted markdown summary of a book collection +--- + +# Book Summary Generator + +Generate a summary of the book collection following these rules: + +1. Output a markdown table with columns: Title, Author, Year, Status +2. Use ✅ for read books and ❌ for unread books +3. Sort by year (oldest first) +4. Include a total count at the bottom +5. Flag any data issues (missing authors, invalid years) + +Example: +| Title | Author | Year | Status | +|-------|--------|------|--------| +| 1984 | George Orwell | 1949 | ✅ | +| Dune | Frank Herbert | 1965 | ❌ | + +**Total: 2 books (1 read, 1 unread)** +``` + +**Test it:** +```bash +copilot +> @samples/book-app-project/data.json Summarize the books in this collection +# La habilidad debería activarse automáticamente según la coincidencia de la descripción +``` + +**If it doesn't trigger:** Try `/skills reload` then ask again. + +
+ +### Bonus Challenge: Commit Message Skill + +1. Create a `commit-message` skill that generates conventional commit messages with a consistent format +2. Test it by staging a change and asking: "Genera un mensaje de commit para mis cambios preparados" +3. Document your skill and share it on GitHub with the `copilot-skill` topic + +--- + +
+🔧 Errores comunes y solución de problemas (haz clic para expandir) + +### Common Mistakes + +| Error | Qué sucede | Solución | +|---------|--------------|-----| +| Nombrar el archivo con otro nombre distinto a `SKILL.md` | La skill no será reconocida | El archivo debe llamarse exactamente `SKILL.md` | +| Campo `description` vago | La skill nunca se carga automáticamente | La descripción es el mecanismo PRINCIPAL de descubrimiento. Usa palabras clave específicas | +| Falta `name` o `description` en el frontmatter | La skill no carga | Agrega ambos campos en el frontmatter YAML | +| Ubicación de carpeta incorrecta | Skill no encontrada | Usa `.github/skills/skill-name/` (proyecto) o `~/.copilot/skills/skill-name/` (personal) | + +### Troubleshooting + +**Skill no usada** - Si Copilot no está usando tu skill cuando esperas: + +1. **Revisa la descripción**: ¿Coincide con cómo lo estás pidiendo? + ```markdown + # Bad: Too vague + description: Reviews code + + # Good: Includes trigger words + description: Use for code reviews, checking code quality, + finding bugs, security issues, and best practice violations + ``` + +2. **Verifica la ubicación del archivo**: + ```bash + # Habilidades del proyecto + ls .github/skills/ + + # Habilidades del usuario + ls ~/.copilot/skills/ + ``` + +3. **Revisa el formato de SKILL.md**: El frontmatter es obligatorio: + ```markdown + --- + name: skill-name + description: What the skill does and when to use it + --- + + # Instructions here + ``` + +**Skill no aparece** - Verifica la estructura de carpetas: +``` +.github/skills/ +└── my-skill/ # Folder name + └── SKILL.md # Must be exactly SKILL.md (case-sensitive) +``` + +Ejecuta `/skills reload` después de crear o editar skills para asegurarte de que se apliquen los cambios. + +**Probar si una skill se carga** - Pregunta a Copilot directamente: +```bash +> What skills do you have available for checking code quality? +# Copilot describirá las habilidades relevantes que encontró +``` + +**¿Cómo sé si mi skill está realmente funcionando?** + +1. **Revisa el formato de salida**: Si tu skill especifica un formato de salida (como etiquetas `[CRITICAL]`), búscalo en la respuesta +2. **Pregunta directamente**: Después de obtener una respuesta, pregunta "¿Usaste alguna skill para eso?" +3. **Compara con/sin**: Prueba el mismo prompt con `--no-custom-instructions` para ver la diferencia: + ```bash + # Con habilidades + copilot --allow-all -p "Review @file.py for security issues" + + # Sin habilidades (comparación de referencia) + copilot --allow-all -p "Review @file.py for security issues" --no-custom-instructions + ``` +4. **Revisa comprobaciones específicas**: Si tu skill incluye comprobaciones específicas (como "funciones de más de 50 líneas"), comprueba si aparecen en la salida + +
+ +--- + +# Summary + +## 🔑 Conclusiones clave + +1. **Las skills son automáticas**: Copilot las carga cuando tu prompt coincide con la descripción de la skill +2. **Invocación directa**: También puedes invocar skills directamente con `/skill-name` como un comando slash +3. **Formato SKILL.md**: Frontmatter YAML (name, description, optional license, argument-hint) más instrucciones en Markdown +4. **La ubicación importa**: `.github/skills/` para compartir en proyecto/equipo, `~/.copilot/skills/` para uso personal +5. **La descripción es clave**: Escribe descripciones que coincidan con la forma en que preguntas de forma natural +6. **Dos formas de gestionar skills**: Usa `copilot skill` desde la terminal o `/skills` (atajo: `/skill`) dentro de una sesión + +> 📋 **Referencia rápida**: Consulta la [referencia de comandos del CLI de GitHub Copilot](https://docs.github.com/en/copilot/reference/cli-command-reference) para una lista completa de comandos y atajos. + +--- + +## ➡️ ¿Qué sigue? + +Las skills amplían lo que Copilot puede hacer con instrucciones cargadas automáticamente. ¿Pero qué pasa con la conexión a servicios externos? Ahí es donde entra MCP. + +En **[Capítulo 06: Servidores MCP](../06-mcp-servers/README.md)**, aprenderás: + +- Qué es MCP (Model Context Protocol) +- Conexión con GitHub, sistema de archivos y servicios de documentación +- Configurar servidores MCP +- Flujos de trabajo con múltiples servidores + +--- + +**[← Volver al Capítulo 04](../04-agents-custom-instructions/README.md)** | **[Continuar al Capítulo 06 →](../06-mcp-servers/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/06-mcp-servers/README.md b/translations/es/06-mcp-servers/README.md new file mode 100644 index 00000000..0b3f1174 --- /dev/null +++ b/translations/es/06-mcp-servers/README.md @@ -0,0 +1,995 @@ + + +![Capítulo 06: Servidores MCP](../../../06-mcp-servers/assets/chapter-header.png) + +> **¿Y si Copilot pudiera leer tus issues de GitHub, consultar tu base de datos y crear PRs... todo desde la terminal?** + +Hasta ahora, Copilot solo puede trabajar con lo que le das directamente: archivos que referencias con `@`, el historial de la conversación y sus propios datos de entrenamiento. Pero, ¿y si pudiera conectarse por su cuenta para revisar tu repositorio de GitHub, explorar los archivos de tu proyecto o buscar la documentación más reciente de una librería? + +Eso es lo que hace MCP (Model Context Protocol). Es una forma de conectar Copilot a servicios externos para que tenga acceso a datos en vivo y del mundo real. Cada servicio al que Copilot se conecta se llama "MCP server". En este capítulo, configurarás algunas de estas conexiones y verás cómo hacen a Copilot mucho más útil. + +> 💡 **¿Ya conoces MCP?** [Salta al inicio rápido](#-use-the-built-in-github-mcp) para comprobar que funciona y empezar a configurar servidores. + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, podrás: + +- Entender qué es MCP y por qué importa +- Administrar servidores MCP usando los comandos `/mcp` +- Configurar servidores MCP para GitHub, el sistema de archivos y documentación +- Usar flujos de trabajo potenciados por MCP con el proyecto de la app del libro +- Saber cuándo y cómo crear un servidor MCP personalizado (opcional) + +> ⏱️ **Tiempo estimado**: ~50 minutos (15 min de lectura + 35 min prácticos) + +--- + +## 🧩 Analogía del mundo real: Extensiones del navegador + +Los servidores MCP son como extensiones del navegador + +Piensa en los servidores MCP como extensiones del navegador. Tu navegador por sí solo puede mostrar páginas web, pero las extensiones lo conectan a servicios adicionales: + +| Extensión del navegador | ¿A qué se conecta? | Equivalente en MCP | +|-------------------|---------------------|----------------| +| Gestor de contraseñas | Tu almacén de contraseñas | **GitHub MCP** → tus repos, issues, PRs | +| Grammarly | Servicio de análisis de escritura | **Context7 MCP** → documentación de bibliotecas | +| Administrador de archivos | Almacenamiento en la nube | **Filesystem MCP** → archivos locales del proyecto | + +Sin extensiones, tu navegador sigue siendo útil, pero con ellas se convierte en una potencia. Los servidores MCP hacen lo mismo por Copilot. Lo conectan a fuentes de datos reales y en vivo para que pueda leer tus issues de GitHub, explorar tu sistema de archivos, obtener documentación actualizada y más. + +***Los servidores MCP conectan a Copilot con el mundo exterior: GitHub, repositorios, documentación y más*** + +> 💡 **Idea clave**: Sin MCP, Copilot solo puede ver los archivos que compartes explícitamente con `@`. Con MCP, puede explorar proactivamente tu proyecto, revisar tu repositorio de GitHub y buscar documentación, todo de forma automática. + +--- + +Cable de alimentación conectándose con una chispa eléctrica brillante rodeada de iconos tecnológicos flotantes que representan conexiones de servidores MCP + +# Inicio rápido: MCP en 30 segundos + +## Comienza con el servidor MCP de GitHub incluido +Veamos MCP en acción ahora mismo, antes de configurar nada. +El servidor MCP de GitHub está incluido por defecto. Prueba esto: + +```bash +copilot +> List the recent commits in this repository +``` + +Si Copilot devuelve datos reales de commits, acabas de ver MCP en acción. Ese es el servidor MCP de GitHub conectándose a GitHub en tu nombre. Pero GitHub es solo *un* servidor. Este capítulo te muestra cómo añadir más (acceso al sistema de archivos, documentación actualizada y otros) para que Copilot pueda hacer aún más. + +--- + +## El comando `/mcp show` + +Usa `/mcp show` para ver qué servidores MCP están configurados y si están habilitados: + +```bash +copilot + +> /mcp show + +MCP Servers: +✓ github (enabled) - GitHub integration +✓ filesystem (enabled) - File system access +``` + +> 💡 **¿Solo ves el servidor de GitHub?** ¡Eso es normal! Si no has añadido servidores MCP adicionales todavía, GitHub será el único listado. Añadirás más en la siguiente sección. + +> 📚 **¿Quieres ver todos los comandos de gestión de MCP?** Puedes administrar servidores con los comandos slash `/mcp` dentro del chat, o con `copilot mcp` directamente desde tu terminal. Consulta la [referencia completa de comandos](#-additional-mcp-commands) al final de este capítulo. + +
+🎬 ¡Míralo en acción! + +![Demostración del estado MCP](../../../06-mcp-servers/assets/mcp-status-demo.gif) + +*La salida de la demo varía. Tu modelo, herramientas y respuestas diferirán de lo que se muestra aquí.* + +
+ +--- + +## ¿Qué cambia con MCP? + +Esta es la diferencia que MCP aporta en la práctica: + +**Sin MCP:** +```bash +> What's in GitHub issue #42? + +"I don't have access to GitHub. You'll need to copy and paste the issue content." +``` + +**Con MCP:** +```bash +> What's in GitHub issue #42 of this repository? + +Issue #42: El inicio de sesión falla con caracteres especiales +Status: Open +Labels: bug, priority-high +Description: Users report that passwords containing... +``` + +MCP hace que Copilot conozca tu entorno de desarrollo real. + +> 📚 **Documentación oficial**: [Acerca de MCP](https://docs.github.com/copilot/concepts/context/mcp) para una explicación más detallada de cómo MCP funciona con GitHub Copilot. + +--- + +# Configuración de servidores MCP + +Manos ajustando perillas y deslizadores en una mesa de mezclas de audio profesional que representan la configuración de servidores MCP + +Ahora que has visto MCP en acción, vamos a configurar servidores adicionales. Puedes añadir servidores de dos formas: **desde el registro integrado** (lo más fácil: configuración guiada directamente en la CLI) o **editando el archivo de configuración** manualmente (más flexible). Empieza por la opción del registro si no estás seguro de cuál elegir. + +--- + +## Instalar servidores MCP desde el registro + +La CLI tiene un registro integrado de servidores MCP que te permite descubrir e instalar servidores populares con una configuración guiada — no se requiere editar JSON. + +```bash +copilot + +> /mcp search +``` + +Copilot abre un selector interactivo mostrando los servidores disponibles. Selecciona uno, y la CLI te guía por la configuración requerida (claves API, rutas, etc.) y lo añade a tu configuración automáticamente. + +> 💡 **¿Por qué usar el registro?** Es la forma más fácil de empezar — no necesitas conocer el nombre del paquete npm, los argumentos del comando ni la estructura JSON. La CLI se encarga de todo eso por ti. + +--- + +## Archivo de configuración de MCP + +Los servidores MCP pueden configurarse a nivel de usuario en `~/.copilot/mcp-config.json`, lo que aplica a todos los proyectos; a nivel de proyecto en `.mcp.json`, o en el archivo de configuración del workspace `.github/mcp.json`. `.github/mcp.json` se carga automáticamente junto a `.mcp.json`. Si usaste `/mcp search`, la CLI creó o actualizó tu `~/.copilot/mcp-config.json` a nivel de usuario, pero entender el formato JSON es útil cuando quieres personalizar o compartir la configuración MCP a nivel de proyecto. + +> ⚠️ **Nota**: `.vscode/mcp.json` ya no es compatible como fuente de configuración MCP. Si tienes un `.vscode/mcp.json` existente, migra su contenido a `.mcp.json` en la raíz de tu proyecto. La CLI mostrará una sugerencia de migración si detecta un archivo de configuración antiguo. + +```json +{ + "mcpServers": { + "server-name": { + "type": "local", + "command": "npx", + "args": ["@package/server-name"], + "tools": ["*"] + } + } +} +``` + +*La mayoría de los servidores MCP se distribuyen como paquetes npm y se ejecutan mediante el comando `npx`.* + +
+💡 ¿Nuevo en JSON? Haz clic aquí para aprender lo que significa cada campo + +| Campo | Qué significa | +|-------|---------------| +| `"mcpServers"` | Contenedor para todas tus configuraciones de servidores MCP | +| `"server-name"` | Un nombre que eliges (p. ej., "github", "filesystem") | +| `"type": "local"` | El servidor se ejecuta en tu máquina | +| `"command": "npx"` | El programa a ejecutar (npx ejecuta paquetes npm) | +| `"args": [...]` | Argumentos pasados al comando | +| `"tools": ["*"]` | Permitir todas las herramientas de este servidor | + +**Reglas importantes de JSON:** +- Usa comillas dobles `"` para las cadenas (no comillas simples) +- No uses comas finales después del último elemento +- El archivo debe ser JSON válido (usa un [validador de JSON](https://jsonlint.com/) si tienes dudas) + +
+ +--- + +## Añadiendo servidores MCP + +El servidor MCP de GitHub está integrado y no requiere configuración. A continuación hay servidores adicionales que puedes añadir. **Elige lo que te interese o trabaja en ellos en orden.** + +| Quiero... | Ir a | +|---|---| +| Dejar que Copilot explore los archivos de mi proyecto | [Servidor de sistema de archivos](#servidor-de-sistema-de-archivos) | +| Obtener documentación de librerías actualizada | [Servidor Context7](#servidor-context7-documentación) | +| Explorar extras opcionales (servidores personalizados, web_fetch) | [Más allá de lo básico](#más-allá-de-lo-básico) | + +
+Servidor de sistema de archivos - Permitir que Copilot explore los archivos de tu proyecto + + +### Servidor de sistema de archivos + +```json +{ + "mcpServers": { + "filesystem": { + "type": "local", + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "."], + "tools": ["*"] + } + } +} +``` + +> 💡 **La ruta `.`**: `.` significa "directorio actual". Copilot puede acceder a archivos relativos al lugar desde donde lo iniciaste. En un Codespace, esto es la raíz de tu espacio de trabajo. También puedes usar una ruta absoluta como `/workspaces/copilot-cli-for-beginners` si lo prefieres. + +Añade esto a tu `~/.copilot/mcp-config.json` y reinicia Copilot. + +
+ +
+Servidor Context7 - Obtener documentación de librerías actualizada + + +### Servidor Context7 (Documentación) + +Context7 da a Copilot acceso a documentación actualizada para frameworks y librerías populares. En lugar de depender de datos de entrenamiento que podrían estar desactualizados, Copilot recupera la documentación actual real. + +```json +{ + "mcpServers": { + "context7": { + "type": "local", + "command": "npx", + "args": ["-y", "@upstash/context7-mcp"], + "tools": ["*"] + } + } +} +``` + +- ✅ **No se requiere clave API** +- ✅ **No se necesita cuenta** +- ✅ **Tu código permanece local** + +Añade esto a tu `~/.copilot/mcp-config.json` y reinicia Copilot. + +
+ +
+Más allá de lo básico - Servidores personalizados y acceso web (opcional) + + +Estos son extras opcionales para cuando te sientas cómodo con los servidores principales anteriores. + +### Servidor MCP de Microsoft Learn + +Todos los servidores MCP que has visto hasta ahora (filesystem, Context7) se ejecutan localmente en tu máquina. Pero los servidores MCP también pueden ejecutarse de forma remota, lo que significa que solo apuntas la CLI de Copilot a una URL y ella se encarga del resto. No hay `npx` ni `python`, no hay proceso local ni dependencias que instalar. + +El [Servidor MCP de Microsoft Learn](https://github.com/microsoftdocs/mcp) es un buen ejemplo. Proporciona a la CLI de Copilot acceso directo a la documentación oficial de Microsoft (Azure, Microsoft Foundry y otros temas de IA, .NET, Microsoft 365 y mucho más) para que pueda buscar en la documentación, recuperar páginas completas y encontrar ejemplos de código oficiales en lugar de depender de los datos de entrenamiento del modelo. + +- ✅ **No se requiere clave API** +- ✅ **No se necesita cuenta** +- ✅ **No se requiere instalación local** + +**Instalación rápida con `/plugin install`:** + +En lugar de editar tu archivo de configuración JSON manualmente, puedes instalarlo con un solo comando: + +```bash +copilot + +> /plugin install microsoftdocs/mcp +``` + +Esto añade el servidor y sus habilidades de agente asociadas automáticamente. Las habilidades instaladas incluyen: + +- **microsoft-docs**: Conceptos, tutoriales y búsquedas fácticas +- **microsoft-code-reference**: Búsquedas de API, ejemplos de código y resolución de problemas +- **microsoft-skill-creator**: Una meta-habilidad para generar habilidades personalizadas sobre tecnologías Microsoft + +**Uso:** +```bash +copilot + +> What's the recommended way to deploy a Python app to Azure App Service? Search Microsoft Learn. +``` + +📚 Más información: [Descripción general del Servidor MCP de Microsoft Learn](https://learn.microsoft.com/training/support/mcp-get-started) + +### Acceso web con `web_fetch` + +La CLI de Copilot incluye una herramienta integrada `web_fetch` que puede obtener contenido de cualquier URL. Esto es útil para traer README, documentación de API o notas de la versión sin salir de la terminal. No se necesita un servidor MCP. + +Puedes controlar qué URL son accesibles mediante `~/.copilot/config.json` (configuración general de Copilot), que es independiente de `~/.copilot/mcp-config.json` (definiciones de servidores MCP). + +```json +{ + "permissions": { + "allowedUrls": [ + "https://api.github.com/**", + "https://docs.github.com/**", + "https://*.npmjs.org/**" + ], + "blockedUrls": [ + "http://**" + ] + } +} +``` + +**Uso:** +```bash +copilot + +> Fetch and summarize the README from https://github.com/facebook/react +``` + +### Construir un servidor MCP personalizado + +¿Quieres conectar Copilot a tus propias APIs, bases de datos o herramientas internas? Puedes construir un servidor MCP personalizado en Python. Esto es completamente opcional ya que los servidores preconstruidos (GitHub, filesystem, Context7) cubren la mayoría de los casos de uso. + +📖 Consulta la [Guía de servidor MCP personalizado](mcp-custom-server.md) para un recorrido completo usando la aplicación del libro como ejemplo. + +📚 Para más información, consulta el [curso MCP para principiantes](https://github.com/microsoft/mcp-for-beginners). + +
+ + + +### Archivo de configuración completo + +Aquí hay un `mcp-config.json` completo con servidores filesystem y Context7: + +> 💡 **Nota:** MCP de GitHub está integrado. No necesitas añadirlo a tu archivo de configuración. + + +```json +{ + "mcpServers": { + "filesystem": { + "type": "local", + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-filesystem", "."], + "tools": ["*"] + }, + "context7": { + "type": "local", + "command": "npx", + "args": ["-y", "@upstash/context7-mcp"], + "tools": ["*"] + } + } +} +``` + +Guárdalo como `~/.copilot/mcp-config.json` para acceso global o `.mcp.json` en la raíz del proyecto para configuración específica del proyecto. + +--- + +# Usando servidores MCP + +Ahora que tienes los servidores MCP configurados, veamos qué pueden hacer. + +Uso de servidores MCP - Diagrama hub-and-spoke que muestra una CLI de desarrollador conectada a GitHub, Filesystem, Context7 y servidores personalizados/Web Fetch + +--- + +## Ejemplos de uso de servidores + +**Elige un servidor para explorar o recórrelos en orden.** + +| Quiero probar... | Ir a | +|---|---| +| Repositorios de GitHub, issues y PRs | [Servidor de GitHub](#servidor-de-github-integrado) | +| Navegar archivos del proyecto | [Uso del servidor Filesystem](#filesystem-server-usage) | +| Búsqueda de documentación de la biblioteca | [Uso del servidor Context7](#context7-server-usage) | +| Servidor personalizado, Microsoft Learn MCP y uso de web_fetch | [Más allá de lo básico](#más-allá-de-lo-básico) | + +
+Servidor de GitHub (integrado) - Accede a repos, issues, PRs y más + + +### Servidor de GitHub (integrado) + +El servidor MCP de GitHub está **integrado**. Si iniciaste sesión en Copilot (como hiciste durante la configuración inicial), ya funciona. ¡No se necesita configuración! + +> 💡 **¿No funciona?** Ejecuta `/login` para volver a autenticarte con GitHub. + +
+Autenticación en contenedores de desarrollo + +- **GitHub Codespaces** (recomendado): La autenticación es automática. La CLI `gh` hereda tu token de Codespace. No se requiere acción. +- **Contenedor de desarrollo local (Docker)**: Ejecuta `gh auth login` después de que el contenedor inicie, luego reinicia Copilot. + +**Solución de problemas de autenticación:** +```bash +# Comprueba si estás autenticado +gh auth status + +# Si no, inicia sesión +gh auth login + +# Verifica que GitHub MCP esté conectado +copilot +> /mcp show +``` + +
+ +| Función | Ejemplo | +|---------|----------| +| **Información del repositorio** | Ver commits, ramas, contribuyentes | +| **Issues** | Listar, crear, buscar y comentar issues | +| **Pull requests** | Ver PRs, diffs, crear PRs, comprobar estado | +| **Búsqueda de código** | Buscar código en repositorios | +| **Actions** | Consultar ejecuciones de workflows y su estado | + +```bash +copilot + +# Ver la actividad reciente en este repositorio +> List the last 5 commits in this repository + +Recent commits: +1. abc1234 - Update chapter 05 skills examples (2 days ago) +2. def5678 - Add book app test fixtures (3 days ago) +3. ghi9012 - Fix typo in chapter 03 README (4 days ago) +... + +# Explorar la estructura del repositorio +> What branches exist in this repository? + +Branches: +- main (default) +- chapter6 (current) + +# Buscar patrones de código en todo el repositorio +> Search this repository for files that import pytest + +Found 1 file: +- samples/book-app-project/tests/test_books.py +``` + +> 💡 **¿Trabajas en tu propio fork?** Si hiciste fork de este repositorio del curso, también puedes probar operaciones de escritura como crear issues y pull requests. Practicaremos eso en los ejercicios abajo. + +> ⚠️ **¿No ves resultados?** El MCP de GitHub opera sobre el remoto del repositorio (en github.com), no solo sobre archivos locales. Asegúrate de que tu repo tenga un remoto: ejecuta `git remote -v` para comprobar. + +
+ +
+Servidor Filesystem - Navegar y analizar archivos del proyecto + + +### Servidor Filesystem + +Una vez configurado, el MCP de Filesystem proporciona herramientas que Copilot puede usar automáticamente: + +```bash +copilot + +> How many Python files are in the book-app-project directory? + +Found 3 Python files in samples/book-app-project/: +- book_app.py +- books.py +- utils.py + +> What's the total size of the data.json file? + +samples/book-app-project/data.json: 2.4 KB + +> Find all functions that don't have type hints in the book app + +Found 2 functions without type hints: +- samples/book-app-project/utils.py:10 - get_user_choice() +- samples/book-app-project/utils.py:14 - get_book_details() +``` + +
+ +
+Servidor Context7 - Consultar documentación de librerías + + +### Servidor Context7 + +```bash +copilot + +> What are the best practices for using pytest fixtures? + +From pytest Documentation: + +Fixtures - Use fixtures to provide a fixed baseline for tests: + + import pytest + + @pytest.fixture + def sample_books(): + return [ + {"title": "1984", "author": "George Orwell", "year": 1949}, + {"title": "Dune", "author": "Frank Herbert", "year": 1965}, + ] + + def test_find_by_author(sample_books): + # fixture se pasa automáticamente como argumento + results = [b for b in sample_books if "Orwell" in b["author"]] + assert len(results) == 1 + +Best practices: +- Use fixtures instead of setup/teardown methods +- Use tmp_path fixture for temporary files +- Use monkeypatch for modifying environment +- Scope fixtures appropriately (function, class, module, session) + +> How can I apply this to the book app's test file? + +# Copilot ahora conoce los patrones oficiales de pytest +# y puede aplicarlos a samples/book-app-project/tests/test_books.py +``` + +
+ +
+Más allá de lo básico - Servidor personalizado y uso de web_fetch + + +### Más allá de lo básico + +**Servidor MCP personalizado**: Si construiste el servidor de búsqueda de libros a partir de la [Guía de servidor MCP personalizado](mcp-custom-server.md), puedes consultar tu colección de libros directamente: + +```bash +copilot + +> Look up information about "1984" using the book lookup server. Search for books by George Orwell +``` + +**Microsoft Learn MCP**: Si instalaste el [servidor Microsoft Learn MCP](#servidor-mcp-de-microsoft-learn), puedes consultar la documentación oficial de Microsoft directamente: + +```bash +copilot + +> How do I configure managed identity for an Azure Function? Search Microsoft Learn. +``` + +**Web Fetch**: Usa la herramienta integrada `web_fetch` para obtener contenido desde cualquier URL: + +```bash +copilot + +> Fetch and summarize the README from https://github.com/facebook/react +``` + +
+ +--- + +## Flujos de trabajo con múltiples servidores + +Estos flujos de trabajo muestran por qué los desarrolladores dicen «Nunca quiero volver a trabajar sin esto». Cada ejemplo combina múltiples servidores MCP en una sola sesión. + +Flujo de Issue a PR usando MCP - Muestra el flujo completo desde obtener un issue de GitHub hasta crear un pull request + +*Flujo MCP completo: el MCP de GitHub recupera datos del repositorio, el MCP de Filesystem encuentra el código, el MCP de Context7 proporciona mejores prácticas y Copilot se encarga del análisis* + +Cada ejemplo a continuación es autocontenido. **Elige uno que te interese o léelos todos.** + +| Quiero ver... | Ir a | +|---|---| +| Varios servidores trabajando juntos | [Exploración multiserver](#multi-server-exploration) | +| Ir de issue a PR en una sesión | [Flujo de Issue a PR](#issue-to-pr-workflow) | +| Comprobación rápida de salud del proyecto | [Panel de estado](#panel-de-estado-de-la-app-de-libros) | + +
+Exploración con múltiples servidores - Combina Filesystem, GitHub y Context7 en una sesión + + +#### Explorando la app de libros con múltiples servidores MCP + +```bash +copilot + +# Paso 1: Usa el MCP del sistema de archivos para explorar la aplicación de libros +> List all Python files in samples/book-app-project/ and summarize +> what each file does + +Found 3 Python files: +- book_app.py: CLI entry point with command routing (list, add, remove, find) +- books.py: BookCollection class with data persistence via JSON +- utils.py: Helper functions for user input and display + +# Paso 2: Usa el MCP de GitHub para comprobar los cambios recientes +> What were the last 3 commits that touched files in samples/book-app-project/? + +Recent commits affecting book app: +1. abc1234 - Add test fixtures for BookCollection (2 days ago) +2. def5678 - Add find_by_author method (5 days ago) +3. ghi9012 - Initial book app setup (1 week ago) + +# Paso 3: Usa el MCP Context7 para las mejores prácticas +> What are Python best practices for JSON data persistence? + +From Python Documentation: +- Use context managers (with statements) for file I/O +- Handle JSONDecodeError for corrupted files +- Use dataclasses for structured data +- Consider atomic writes to prevent data corruption + +# Paso 4: Sintetiza una recomendación +> Based on the book app code and these best practices, +> what improvements would you suggest? + +Suggestions: +1. Add input validation in add_book() for empty strings and invalid years +2. Consider atomic writes in save_books() to prevent data corruption +3. Add type hints to utils.py functions (get_user_choice, get_book_details) +``` + +
+🎬 ¡Ve el flujo MCP en acción! + +![Demostración del flujo MCP](../../../06-mcp-servers/assets/mcp-workflow-demo.gif) + +*La salida de la demo puede variar. Tu modelo, herramientas y respuestas diferirán de lo mostrado aquí.* + +
+ +**El resultado**: Exploración del código → revisión del historial → consulta de mejores prácticas → plan de mejora. **Todo desde una sesión de terminal, usando tres servidores MCP juntos.** + +
+ +
+Flujo Issue-a-PR - Ve de un issue de GitHub a un pull request sin salir del terminal + + +#### Flujo Issue-a-PR (en tu propio repo) + +Esto funciona mejor en tu propio fork o repositorio donde tengas permisos de escritura: + +> 💡 **No te preocupes si no puedes probar esto ahora mismo.** Si estás en un clon de solo lectura, practicarás esto en la tarea. Por ahora, simplemente lee para entender el flujo. + +```bash +copilot + +> Get the details of GitHub issue #1 + +Issue #1: Agregar validación de entrada para el año del libro +Status: Open +Description: The add_book function accepts any year value... + +> @samples/book-app-project/books.py Fix the issue described in issue #1 + +[Copilot implements year validation in add_book()] + +> Run the tests to make sure the fix works + +All 8 tests passed ✓ + +> Create a pull request titled "Add year validation to book app" + +✓ Created PR #2: Agregar validación del año a la aplicación de libros +``` + +**Sin copiar-pegar. Sin cambiar de contexto. Una sesión de terminal.** + +
+ +
+Panel de estado - Obtén una comprobación rápida de la salud del proyecto usando múltiples servidores + + +#### Panel de estado de la app de libros + +```bash +copilot + +> Give me a health report for the book app project: +> 1. List all functions across the Python files in samples/book-app-project/ +> 2. Check which functions have type hints and which don't +> 3. Show what tests exist in samples/book-app-project/tests/ +> 4. Check the recent commit history for this directory + +Book App Health Report +====================== + +📊 Functions Found: +- books.py: 8 methods in BookCollection (all have type hints ✓) +- book_app.py: 6 functions (4 have type hints, 2 missing) +- utils.py: 3 functions (1 has type hints, 2 missing) + +🧪 Test Coverage: +- test_books.py: 8 test functions covering BookCollection +- Missing: no tests for book_app.py CLI functions +- Missing: no tests for utils.py helper functions + +📝 Recent Activity: +- 3 commits in the last week +- Most recent: added test fixtures + +Recommendations: +- Add type hints to utils.py functions +- Add tests for book_app.py CLI handlers +- All files well-sized (<100 lines) - good structure! +``` + +**El resultado**: múltiples fuentes de datos agregadas en segundos. Manualmente, esto significaría ejecutar grep, contar líneas, comprobar git log y revisar archivos de prueba. Fácilmente más de 15 minutos de trabajo. + +
+ +--- + +# Práctica + +Configuración de escritorio acogedora con monitor mostrando código, lámpara, taza de café y auriculares listos para la práctica + +**🎉 ¡Ahora conoces lo esencial!** Entiendes MCP, has visto cómo configurar servidores y has visto flujos de trabajo reales en acción. Ahora es momento de intentarlo tú mismo. + +--- + +## ▶️ Pruébalo tú mismo + +¡Ahora te toca a ti! Completa estos ejercicios para practicar el uso de servidores MCP con el proyecto de la app de libros. + +### Ejercicio 1: Comprueba el estado de tu MCP + +Comienza viendo qué servidores MCP están disponibles: + +```bash +copilot + +> /mcp show +``` + +Deberías ver el servidor de GitHub listado como habilitado. Si no, ejecuta `/login` para autenticarte. + +--- + +### Ejercicio 2: Explora la app de libros con el MCP de Filesystem + +Si has configurado el servidor Filesystem, úsalo para explorar la app de libros: + +```bash +copilot + +> How many Python files are in samples/book-app-project/? +> What functions are defined in each file? +``` + +**Resultado esperado**: Copilot lista `book_app.py`, `books.py` y `utils.py` con sus funciones. + +> 💡 **¿Aún no tienes configurado el MCP de Filesystem?** Crea el archivo de configuración a partir de la sección [Configuración completa](#archivo-de-configuración-completo) arriba. Luego reinicia Copilot. + +--- + +### Ejercicio 3: Consultar el historial del repositorio con el MCP de GitHub + +Usa el MCP de GitHub integrado para explorar este repositorio del curso: + +```bash +copilot + +> List the last 5 commits in this repository + +> What branches exist in this repository? +``` + +**Resultado esperado**: Copilot muestra mensajes de commits recientes y nombres de ramas del remoto de GitHub. + +> ⚠️ **¿En un Codespace?** Esto funciona automáticamente. La autenticación se hereda. Si estás en un clon local, asegúrate de que `gh auth status` muestre que has iniciado sesión. + +--- + +### Ejercicio 4: Combinar múltiples servidores MCP + +Ahora combina Filesystem y GitHub MCP en una sola sesión: + +```bash +copilot + +> Read samples/book-app-project/data.json and tell me what books are +> in the collection. Then check the recent commits to see when this +> file was last modified. +``` + +**Resultado esperado**: Copilot lee el archivo JSON (MCP de Filesystem), lista los 5 libros incluyendo "The Hobbit", "1984", "Dune", "To Kill a Mockingbird" y "Mysterious Book", luego consulta GitHub para el historial de commits. + +**Autoevaluación**: Entiendes MCP cuando puedas explicar por qué "Check my repo's commit history" es mejor que ejecutar manualmente `git log` y pegar la salida en tu prompt. + +--- + +## 📝 Tarea + +### Desafío principal: Exploración MCP de la app de libros + +Practica usando servidores MCP juntos en el proyecto de la app de libros. Completa estos pasos en una sola sesión de Copilot: + +1. **Verifica que MCP funciona**: Ejecuta `/mcp show` y confirma que al menos el servidor de GitHub esté habilitado +2. **Configura el MCP de Filesystem** (si no está hecho): Crea `~/.copilot/mcp-config.json` con la configuración del servidor Filesystem +3. **Explora el código**: Pide a Copilot que use el servidor Filesystem para: + - Listar todas las funciones en `samples/book-app-project/books.py` + - Comprobar qué funciones en `samples/book-app-project/utils.py` carecen de anotaciones de tipo + - Leer `samples/book-app-project/data.json` e identificar problemas de calidad de datos (pista: mira la última entrada) +4. **Comprobar la actividad del repositorio**: Pide a Copilot que use el MCP de GitHub para: + - Listar commits recientes que modificaron archivos en `samples/book-app-project/` + - Comprobar si hay issues o pull requests abiertos +5. **Combinar servidores**: En un solo prompt, pide a Copilot que: + - Leer el archivo de tests en `samples/book-app-project/tests/test_books.py` + - Comparar las funciones testeadas contra todas las funciones en `books.py` + - Resumir qué cobertura de tests falta + +**Criterios de éxito**: Puedes combinar sin problemas datos de Filesystem y GitHub MCP en una sola sesión de Copilot, y puedes explicar qué aportó cada servidor MCP a la respuesta. + +
+💡 Pistas (haz clic para expandir) + +**Paso 1: Verificar MCP** +```bash +copilot +> /mcp show +# Debería mostrar "github" como habilitado +# Si no, ejecute: /login +``` + +**Paso 2: Crear el archivo de configuración** + +Usa el JSON de la sección [Configuración completa](#archivo-de-configuración-completo) arriba y guárdalo como `~/.copilot/mcp-config.json`. + +**Paso 3: Problema de calidad de datos a buscar** + +El último libro en `data.json` es: +```json +{ + "title": "Mysterious Book", + "author": "", + "year": 0, + "read": false +} +``` +Un autor vacío y año 0. ¡Ese es el problema de calidad de datos! + +**Paso 5: Comparación de cobertura de tests** + +Los tests en `test_books.py` cubren: `add_book`, `mark_as_read`, `remove_book`, `get_unread_books` y `find_book_by_title`. Funciones como `load_books`, `save_books` y `list_books` no tienen tests directos. Las funciones de CLI en `book_app.py` y los helpers en `utils.py` no tienen tests en absoluto. + +**Si MCP no funciona:** Reinicia Copilot después de editar el archivo de configuración. + +
+ +### Desafío extra: Construye un servidor MCP personalizado + +¿Listo para profundizar? Sigue la [Guía de servidor MCP personalizado](mcp-custom-server.md) para construir tu propio servidor MCP en Python que se conecte a cualquier API. + +--- + +
+🔧 Errores comunes y solución de problemas (haz clic para expandir) + +### Errores comunes + +| Error | Qué ocurre | Solución | +|---------|--------------|-----| +| No saber que el MCP de GitHub está integrado | Intentar instalar/configurarlo manualmente | El MCP de GitHub está incluido por defecto. Simplemente prueba: "List the recent commits in this repo" | +| Buscar la configuración en la ubicación equivocada | No se puede encontrar o editar la configuración de MCP | La configuración a nivel de usuario está en `~/.copilot/mcp-config.json`, la de proyecto es `.mcp.json` en la raíz del proyecto | +| JSON inválido en el archivo de configuración | Los servidores MCP no se cargan | Usa `/mcp show` para comprobar la configuración; valida la sintaxis JSON | +| Olvidar autenticar los servidores MCP | Errores "Authentication failed" | Algunos MCP requieren autenticación separada. Comprueba los requisitos de cada servidor | + +### Solución de problemas + +**"MCP server not found"** - Comprueba que: +1. El paquete npm existe: `npm view @modelcontextprotocol/server-github` +2. Tu configuración es JSON válido +3. El nombre del servidor coincide con tu config + +Usa `/mcp show` para ver la configuración actual. + + +**"GitHub authentication failed"** - El MCP integrado de GitHub utiliza tus credenciales de `/login`. Intenta: + +```bash +copilot +> /login +``` + +Esto volverá a autenticarte con GitHub. Si los problemas persisten, verifica que tu cuenta de GitHub tenga los permisos necesarios para el repositorio al que intentas acceder. + +**"MCP server failed to start"** - Revisa los registros del servidor: +```bash +# Ejecute manualmente el comando del servidor para ver errores +npx -y @modelcontextprotocol/server-github +``` + +**MCP tools not available** - Asegúrate de que el servidor esté habilitado: +```bash +copilot + +> /mcp show +# Comprobar si el servidor está en la lista y habilitado +``` + +Si un servidor está deshabilitado, consulta los [comandos `/mcp` adicionales](#-additional-mcp-commands) más abajo para saber cómo volver a habilitarlo. + +
+ +--- + +
+📚 Comandos MCP adicionales (haz clic para expandir) + + +Puedes gestionar servidores MCP de dos maneras: usando **comandos slash dentro de una sesión de chat**, o usando el **comando `copilot mcp` directamente en tu terminal** (no se necesita sesión de chat). + +### Opción 1: Comandos slash (dentro de una sesión de chat) + +Estos funcionan cuando ya estás dentro de `copilot`: + +| Comando | Qué hace | +|---------|--------------| +| `/mcp show` | Muestra todos los servidores MCP configurados y su estado | +| `/mcp list` | Muestra los servidores MCP actualmente adjuntos y su estado; se puede ejecutar mientras Copilot está en funcionamiento | +| `/mcp add` | Configuración interactiva para agregar un nuevo servidor | +| `/mcp edit ` | Edita la configuración de un servidor existente | +| `/mcp enable ` | Habilita un servidor deshabilitado (permanece entre sesiones) | +| `/mcp disable ` | Deshabilita un servidor (permanece entre sesiones) | +| `/mcp delete ` | Elimina un servidor permanentemente | +| `/mcp auth ` | Volver a autenticarse con un servidor MCP que usa OAuth (por ejemplo, después de cambiar de cuenta) | + +### Opción 2: comando `copilot mcp` (desde tu terminal) + +También puedes gestionar servidores MCP directamente desde tu terminal sin iniciar primero una sesión de chat: + +```bash +# Listar todos los servidores MCP configurados +copilot mcp list + +# Habilitar un servidor +copilot mcp enable filesystem + +# Deshabilitar un servidor +copilot mcp disable context7 +``` + +> 💡 **¿Cuándo usar cuál?** Usa los comandos slash `/mcp` cuando ya estés en una sesión de chat. Usa `copilot mcp` desde el terminal cuando quieras comprobar o cambiar rápidamente la configuración de tus servidores antes de iniciar una sesión. + +Para la mayor parte de este curso, `/mcp show` es todo lo que necesitas. Los otros comandos resultan útiles a medida que gestionas más servidores con el tiempo. + +
+ +--- + +# Resumen + +## 🔑 Puntos clave + +1. **MCP** conecta Copilot con servicios externos (GitHub, sistema de archivos, documentación) +2. **El MCP de GitHub está integrado** - no se necesita configuración, solo `/login` +3. **Filesystem y Context7** se configuran mediante `~/.copilot/mcp-config.json` +4. **Flujos de trabajo con múltiples servidores** combinan datos de múltiples fuentes en una sola sesión +5. **Gestiona servidores de dos maneras**: usa los comandos slash `/mcp` dentro del chat, o `copilot mcp` desde el terminal +6. **Servidores personalizados** te permiten conectar cualquier API (opcional, cubierto en la guía del apéndice) + +> 📋 **Referencia rápida**: Consulta la [referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para obtener una lista completa de comandos y atajos. + +--- + +## ➡️ ¿Qué sigue? + +Ahora tienes todos los componentes: modos, contexto, flujos de trabajo, agentes, habilidades y MCP. Es hora de juntarlos todos. + +En **[Capítulo 07: Integrándolo todo](../07-putting-it-together/README.md)**, aprenderás: + +- Combinar agentes, habilidades y MCP en flujos de trabajo unificados +- Desarrollo completo de características desde la idea hasta el PR fusionado +- Automatización con hooks +- Mejores prácticas para entornos de equipo + +--- + +**[← Volver al Capítulo 05](../05-skills/README.md)** | **[Continuar al Capítulo 07 →](../07-putting-it-together/README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/06-mcp-servers/mcp-custom-server.md b/translations/es/06-mcp-servers/mcp-custom-server.md new file mode 100644 index 00000000..d803db53 --- /dev/null +++ b/translations/es/06-mcp-servers/mcp-custom-server.md @@ -0,0 +1,194 @@ + + +# Construyendo un servidor MCP personalizado + +> ⚠️ **Este contenido es completamente opcional.** Puedes ser muy productivo con Copilot CLI usando solo los servidores MCP preconstruidos (GitHub, filesystem, Context7). Esta guía es para desarrolladores que quieran conectar Copilot a APIs internas personalizadas. Consulta el [Curso MCP para principiantes](https://github.com/microsoft/mcp-for-beginners) para más detalles. +> +> **Requisitos:** +> - Cómodo con Python +> - Comprensión de los patrones `async`/`await` +> - `pip` disponible en tu sistema (incluido en este contenedor de desarrollo) +> +> **[← Volver al Capítulo 06: Servidores MCP](README.md)** + +--- + +¿Quieres conectar Copilot a tus propias APIs? Aquí tienes cómo construir un servidor MCP simple en Python que busca información de libros, vinculado al proyecto de la aplicación de libros que has estado usando a lo largo de este curso. + +## Configuración del proyecto + +```bash +mkdir book-lookup-mcp-server +cd book-lookup-mcp-server +pip install mcp +``` + +> 💡 **¿Qué es el paquete `mcp`?** Es el SDK oficial de Python para construir servidores MCP. Maneja los detalles del protocolo para que puedas concentrarte en tus herramientas. + +## Implementación del servidor + +Crea un archivo llamado `server.py`: + +```python +# server.py +import json +from mcp.server.fastmcp import FastMCP + +# Crear el servidor MCP +mcp = FastMCP("book-lookup") + +# Base de datos de libros de ejemplo (en un servidor real, esto podría consultar una API o una base de datos) +BOOKS_DB = { + "978-0-547-92822-7": { + "title": "The Hobbit", + "author": "J.R.R. Tolkien", + "year": 1937, + "genre": "Fantasy", + }, + "978-0-451-52493-5": { + "title": "1984", + "author": "George Orwell", + "year": 1949, + "genre": "Dystopian Fiction", + }, + "978-0-441-17271-9": { + "title": "Dune", + "author": "Frank Herbert", + "year": 1965, + "genre": "Science Fiction", + }, +} + + +@mcp.tool() +def lookup_book(isbn: str) -> str: + """Look up a book by its ISBN and return title, author, year, and genre.""" + book = BOOKS_DB.get(isbn) + if book: + return json.dumps(book, indent=2) + return f"No book found with ISBN: {isbn}" + + +@mcp.tool() +def search_books(query: str) -> str: + """Search for books by title or author. Returns all matching results.""" + query_lower = query.lower() + results = [ + {**book, "isbn": isbn} + for isbn, book in BOOKS_DB.items() + if query_lower in book["title"].lower() + or query_lower in book["author"].lower() + ] + if results: + return json.dumps(results, indent=2) + return f"No books found matching: {query}" + + +@mcp.tool() +def list_all_books() -> str: + """List all books in the database with their ISBNs.""" + books_list = [ + {"isbn": isbn, "title": book["title"], "author": book["author"]} + for isbn, book in BOOKS_DB.items() + ] + return json.dumps(books_list, indent=2) + + +if __name__ == "__main__": + mcp.run() +``` + +**Qué está pasando aquí:** + +| Parte | Qué hace | +|------|-------------| +| `FastMCP("book-lookup")` | Crea un servidor llamado "book-lookup" | +| `@mcp.tool()` | Registra una función como una herramienta que Copilot puede invocar | +| Anotaciones de tipo + docstrings | Indican a Copilot qué hace cada herramienta y qué parámetros necesita | +| `mcp.run()` | Inicia el servidor y escucha solicitudes | + +> 💡 **¿Por qué los decoradores?** El decorador `@mcp.tool()` es todo lo que necesitas. El SDK de MCP lee automáticamente el nombre de tu función, las anotaciones de tipo y la docstring para generar el esquema de la herramienta. ¡No se necesita un esquema JSON manual! + +## Configuración + +Agrega a tu `~/.copilot/mcp-config.json`: + +```json +{ + "mcpServers": { + "book-lookup": { + "type": "local", + "command": "python3", + "args": ["./book-lookup-mcp-server/server.py"], + "tools": ["*"] + } + } +} +``` + +## Uso + +```bash +copilot + +> Look up the book with ISBN 978-0-547-92822-7 + +{ + "title": "The Hobbit", + "author": "J.R.R. Tolkien", + "year": 1937, + "genre": "Fantasy" +} + +> Search for books by Orwell + +[ + { + "title": "1984", + "author": "George Orwell", + "year": 1949, + "genre": "Dystopian Fiction", + "isbn": "978-0-451-52493-5" + } +] + +> List all available books + +[Shows all books in the database with ISBNs] +``` + +## Próximos pasos + +Una vez que hayas creado un servidor básico, puedes: + +1. **Agregar más herramientas** - Cada función `@mcp.tool()` se convierte en una herramienta que Copilot puede invocar +2. **Conectar API reales** - Reemplaza la base de datos simulada `BOOKS_DB` con llamadas a API reales o consultas de base de datos +3. **Agregar autenticación** - Gestiona claves de API y tokens de forma segura +4. **Compartir tu servidor** - Publícalo en PyPI para que otros puedan instalarlo con `pip` + +## Recursos + +- [SDK de MCP para Python](https://github.com/modelcontextprotocol/python-sdk) +- [SDK de MCP para TypeScript](https://github.com/modelcontextprotocol/typescript-sdk) +- [Ejemplos de servidores MCP](https://github.com/modelcontextprotocol/servers) +- [Curso MCP para principiantes](https://github.com/microsoft/mcp-for-beginners) + +--- + +**[← Volver al Capítulo 06: Servidores MCP](README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/07-putting-it-together/README.md b/translations/es/07-putting-it-together/README.md new file mode 100644 index 00000000..b6f3bd9c --- /dev/null +++ b/translations/es/07-putting-it-together/README.md @@ -0,0 +1,531 @@ + + +![Chapter 07: Putting It All Together](../../../07-putting-it-together/assets/chapter-header.png) + +> **Everything you learned combines here. Go from idea to merged PR in a single session.** + +En este capítulo, reunirás todo lo que aprendiste en flujos de trabajo completos. Construirás funcionalidades usando colaboración multi-agente, configurarás hooks de pre-commit que detecten problemas de seguridad antes de que se registren, integrarás Copilot en pipelines de CI/CD y pasarás de la idea de una característica a una PR fusionada en una sola sesión de terminal. Aquí es donde GitHub Copilot CLI se convierte en un verdadero multiplicador de fuerza. + +> 💡 **Nota**: Este capítulo muestra cómo combinar todo lo que aprendiste. **No necesitas agentes, habilidades ni MCP para ser productivo (aunque pueden ser de gran ayuda).** El flujo de trabajo central — describir, planear, implementar, probar, revisar, enviar — funciona solo con las funciones integradas de los Capítulos 00-03. + +## 🎯 Objetivos de aprendizaje + +Al final de este capítulo, serás capaz de: + +- Combinar agentes, habilidades y MCP (Model Context Protocol) en flujos de trabajo unificados +- Construir características completas usando enfoques multi-herramienta +- Configurar automatización básica con hooks +- Aplicar mejores prácticas para desarrollo profesional + +> ⏱️ **Tiempo estimado**: ~75 minutos (15 min lectura + 60 min práctico) + +--- + +## 🧩 Analogía del mundo real: La orquesta + +Analogía de la orquesta - Flujo de trabajo unificado + +Una orquesta sinfónica tiene muchas secciones: +- **Cuerdas** proporcionan la base (como tus flujos de trabajo centrales) +- **Metales** agregan potencia (como agentes con experiencia especializada) +- **Vientos** añaden color (como las habilidades que amplían capacidades) +- **Percusión** mantiene el ritmo (como MCP conectando a sistemas externos) + +Individualmente, cada sección suena limitada. Juntas, bien conducidas, crean algo magnífico. + +**¡Esto es lo que enseña este capítulo!**
+*Como un director con una orquesta, orquestas agentes, habilidades y MCP en flujos de trabajo unificados* + +Comencemos recorriendo un escenario que modifica código, genera pruebas, lo revisa y crea una PR — todo en una sesión. + +--- + +## De la idea a PR fusionada en una sola sesión + +En lugar de cambiar entre tu editor, terminal, ejecutor de tests y la interfaz de GitHub y perder contexto en cada cambio, puedes combinar todas tus herramientas en una sola sesión de terminal. Desglosaremos este patrón en la sección [Patrón de integración](#the-integration-pattern-for-power-users) a continuación. + +```bash +# Inicia Copilot en modo interactivo +copilot + +> I need to add a "list unread" command to the book app that shows only +> books where read is False. What files need to change? + +# Copilot crea un plan de alto nivel... + +# CAMBIA AL AGENTE PYTHON-REVIEWER +> /agent +# Selecciona "python-reviewer" + +> @samples/book-app-project/books.py Design a get_unread_books method. +> What is the best approach? + +# El agente python-reviewer produce: +# - Firma del método y tipo de retorno +# - Implementación del filtrado usando comprensión de listas +# - Manejo de casos límite para colecciones vacías + +# CAMBIA AL AGENTE PYTEST-HELPER +> /agent +# Selecciona "pytest-helper" + +> @samples/book-app-project/tests/test_books.py Design test cases for +> filtering unread books. + +# El agente pytest-helper produce: +# - Casos de prueba para colecciones vacías +# - Casos de prueba con libros leídos/no leídos mezclados +# - Casos de prueba con todos los libros leídos + +# IMPLEMENTAR +> Add a get_unread_books method to BookCollection in books.py +> Add a "list unread" command option in book_app.py +> Update the help text in the show_help function + +# PROBAR +> Generate comprehensive tests for the new feature + +# Se generan múltiples pruebas similares a las siguientes: +# - Ruta feliz (3 pruebas) — filtra correctamente, excluye los leídos, incluye los no leídos +# - Casos límite (4 pruebas) — colección vacía, todos leídos, ninguno leído, libro único +# - Parametrizados (5 casos) — variando las proporciones leídos/no leídos mediante @pytest.mark.parametrize +# - Integración (4 pruebas) — interacción con mark_as_read, remove_book, add_book y la integridad de los datos + +# Revisa los cambios +> /review + +# Si la revisión pasa, usa /pr para operar sobre la pull request de la rama actual +> /pr [view|create|fix|auto] + +# O pide de forma natural si quieres que Copilot lo redacte desde la terminal +> Create a pull request titled "Feature: Add list unread books command" +``` + +**Enfoque tradicional**: Cambiar entre editor, terminal, ejecutor de tests, documentación e interfaz de GitHub. Cada cambio provoca pérdida de contexto y fricción. + +**La idea clave**: Dirigiste especialistas como un arquitecto. Ellos manejaron los detalles. Tú manejaste la visión. + +> 💡 **Para profundizar**: Para planes grandes de múltiples pasos como este, prueba `/fleet` para permitir que Copilot ejecute subtareas independientes en paralelo. Consulta la [documentación oficial](https://docs.github.com/copilot/concepts/agents/copilot-cli/fleet) para más detalles. + +--- + +# Flujos de trabajo adicionales + +Personas ensamblando un rompecabezas gigante y colorido con engranajes, representando cómo agentes, habilidades y MCP se combinan en flujos de trabajo unificados + +Para usuarios avanzados que completaron los Capítulos 04-06, estos flujos de trabajo muestran cómo agentes, habilidades y MCP multiplican tu efectividad. + +## El patrón de integración + +Aquí está el modelo mental para combinar todo: + +El patrón de integración - Un flujo de trabajo de 4 fases: Reunir contexto (MCP), Analizar y planear (Agentes), Ejecutar (Habilidades + Manual), Completar (MCP) + +--- + +## Flujo de trabajo 1: Investigación y corrección de errores + +Corrección de bugs en el mundo real con integración completa de herramientas: + +```bash +copilot + +# FASE 1: Entender el error desde GitHub (MCP proporciona esto) +> Get the details of issue #1 + +# Aprender: "find_by_author no funciona con nombres parciales" + +# FASE 2: Investigar las mejores prácticas (investigación profunda en la web y en fuentes de GitHub) +> /research Best practices for Python case-insensitive string matching + +# FASE 3: Encontrar el código relacionado +> @samples/book-app-project/books.py Show me the find_by_author method + +# FASE 4: Obtener análisis de expertos +> /agent +# Seleccionar "python-reviewer" + +> Analyze this method for issues with partial name matching + +# El agente identifica: el método usa igualdad exacta en lugar de coincidencia por subcadena + +# FASE 5: Corregir con la orientación del agente +> Implement the fix using lowercase comparison and 'in' operator + +# FASE 6: Generar pruebas +> /agent +# Seleccionar "pytest-helper" + +> Generate pytest tests for find_by_author with partial matches +> Include test cases: partial name, case variations, no matches + +# FASE 7: Realizar commit y pull request +> Generate a commit message for this fix + +> Create a pull request linking to issue #1 +``` + +--- + +## Flujo de trabajo 2: Automatización de revisión de código (Opcional) + +> 💡 **Esta sección es opcional.** Los hooks de pre-commit son útiles para equipos pero no son necesarios para ser productivo. Omite esto si recién estás comenzando. +> +> ⚠️ **Nota de rendimiento**: Este hook llama a `copilot -p` para cada archivo staged, lo que toma varios segundos por archivo. Para commits grandes, considera limitarlo a archivos críticos o ejecutar revisiones manualmente con `/review` en su lugar. + +Un **git hook** es un script que Git ejecuta automáticamente en ciertos puntos, por ejemplo, justo antes de un commit. Puedes usar esto para ejecutar chequeos automatizados en tu código. Aquí tienes cómo configurar una revisión automatizada de Copilot en tus commits: + +```bash +# Crear un hook de pre-commit +cat > .git/hooks/pre-commit << 'EOF' +#!/bin/bash + +# Obtener archivos preparados (solo archivos Python) +STAGED=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.py$') + +if [ -n "$STAGED" ]; then + echo "Running Copilot review on staged files..." + + for file in $STAGED; do + echo "Reviewing $file..." + + # Usar un tiempo de espera para evitar que cuelgue (60 segundos por archivo) + # --allow-all aprueba automáticamente lecturas/escrituras de archivos para que el hook pueda ejecutarse sin supervisión. + # Úselo solo en scripts automatizados. En sesiones interactivas, deje que Copilot solicite permiso. + REVIEW=$(timeout 60 copilot --allow-all -p "Quick security review of @$file - critical issues only" 2>/dev/null) + + # Comprobar si se produjo un tiempo de espera + if [ $? -eq 124 ]; then + echo "Warning: Review timed out for $file (skipping)" + continue + fi + + if echo "$REVIEW" | grep -qi "CRITICAL"; then + echo "Critical issues found in $file:" + echo "$REVIEW" + exit 1 + fi + done + + echo "Review passed" +fi +EOF + +chmod +x .git/hooks/pre-commit +``` + +> ⚠️ **Usuarios de macOS**: El comando `timeout` no está incluido por defecto en macOS. Instálalo con `brew install coreutils` o reemplaza `timeout 60` con una invocación simple sin límite de tiempo. + +> 📚 **Documentación oficial**: [Usar hooks](https://docs.github.com/copilot/how-tos/copilot-cli/use-hooks) y [Referencia de configuración de hooks](https://docs.github.com/copilot/reference/hooks-configuration) para la API completa de hooks. +> +> 💡 **Alternativa integrada**: Copilot CLI también tiene un sistema de hooks integrado (`copilot hooks`) que puede ejecutarse automáticamente en eventos como pre-commit. El git hook manual anterior te da control total, mientras que el sistema integrado es más sencillo de configurar. Consulta la documentación arriba para decidir qué enfoque se adapta a tu flujo de trabajo. + +Ahora cada commit recibe una revisión rápida de seguridad: + +```bash +git add samples/book-app-project/books.py +git commit -m "Update book collection methods" + +# Salida: +# Ejecutando revisión de Copilot en los archivos preparados... +# Revisando samples/book-app-project/books.py... +# Se encontraron problemas críticos en samples/book-app-project/books.py: +# - Línea 15: vulnerabilidad de inyección de ruta de archivo en load_from_file +# +# Corrige el problema y vuelve a intentarlo. +``` + +--- + +## Flujo de trabajo 3: Incorporación a una nueva base de código + +Al unirte a un proyecto nuevo, combina contexto, agentes y MCP para subirte rápidamente: + +```bash +# Iniciar Copilot en modo interactivo +copilot + +# FASE 1: Obtener la visión general con contexto +> @samples/book-app-project/ Explain the high-level architecture of this codebase + +# FASE 2: Comprender un flujo específico +> @samples/book-app-project/book_app.py Walk me through what happens +> when a user runs "python book_app.py add" + +# FASE 3: Obtener análisis experto con un agente +> /agent +# Seleccionar "python-reviewer" + +> @samples/book-app-project/books.py Are there any design issues, +> missing error handling, or improvements you would recommend? + +# FASE 4: Encontrar algo en lo que trabajar (MCP proporciona acceso a GitHub) +> List open issues labeled "good first issue" + +# FASE 5: Comenzar a contribuir +> Pick the simplest open issue and outline a plan to fix it +``` + +Este flujo de trabajo combina el contexto `@`, agentes y MCP en una sola sesión de incorporación, exactamente el patrón de integración visto anteriormente en este capítulo. + +--- + +# Mejores prácticas y automatización + +Patrones y hábitos que hacen tus flujos de trabajo más efectivos. + +--- + +## Mejores prácticas + +### 1. Comienza con el contexto antes del análisis + +Siempre reúne contexto antes de pedir un análisis: + +```bash +# Bueno +> Get the details of issue #42 +> /agent +# Seleccionar python-reviewer +> Analyze this issue + +# Menos eficaz +> /agent +# Seleccionar python-reviewer +> Fix login bug +# El agente no tiene contexto del problema +``` + +### 2. Conoce la diferencia: Agentes, habilidades e instrucciones personalizadas + +Cada herramienta tiene su punto óptimo: + +```bash +# Agentes: personas especializadas que activas explícitamente +> /agent +# Selecciona python-reviewer +> Review this authentication code for security issues + +# Habilidades: Capacidades modulares que se activan automáticamente cuando tu entrada +# coincide con la descripción de la habilidad (debes crearlas primero — ver Capítulo 05) +> Generate comprehensive tests for this code +# Si tienes una habilidad de pruebas configurada, se activa automáticamente + +# Instrucciones personalizadas (.github/copilot-instructions.md): Siempre activas +# orientación que se aplica a cada sesión sin cambiar ni activar +``` + +> 💡 **Punto clave**: Los agentes y las habilidades pueden tanto analizar COMO generar código. La diferencia real es **cómo se activan** — los agentes son explícitos (`/agent`), las habilidades son automáticas (coincidencia de prompt), y las instrucciones personalizadas están siempre activas. + +### 3. Mantén las sesiones enfocadas + +Usa `/rename` para etiquetar tu sesión (facilita encontrarla en el historial) y `/exit` para terminarla limpiamente: + +```bash +# Bueno: Una característica por sesión +> /rename list-unread-feature +# Trabajar en la lista de no leídos +> /exit + +copilot +> /rename export-csv-feature +# Trabajar en la exportación a CSV +> /exit + +# Menos efectivo: Todo en una sesión larga +``` + +### 4. Haz los flujos de trabajo reutilizables con Copilot + +En lugar de solo documentar flujos de trabajo en una wiki, inclúyelos directamente en tu repo para que Copilot pueda usarlos: + +- **Instrucciones personalizadas** (`.github/copilot-instructions.md`): Orientación siempre activada para estándares de codificación, reglas de arquitectura y pasos de build/test/despliegue. Cada sesión las sigue automáticamente. +- **Archivos de prompt** (`.github/prompts/`): Prompts reutilizables y parametrizados que tu equipo puede compartir — como plantillas para revisiones de código, generación de componentes o descripciones de PR. +- **Agentes personalizados** (`.github/agents/`): Codifica personajes especializados (p. ej., un revisor de seguridad o un redactor de documentación) que cualquiera del equipo puede activar con `/agent`. +- **Habilidades personalizadas** (`.github/skills/`): Empaqueta instrucciones paso a paso que se activan automáticamente cuando son relevantes. + +> 💡 **La recompensa**: Los nuevos miembros del equipo obtienen tus flujos de trabajo gratis — están integrados en el repo, no encerrados en la cabeza de alguien. + +--- + +## Extra: Patrones de producción + +Estos patrones son opcionales pero valiosos para entornos profesionales. + +### Generador de descripciones de PR + +```bash +# Generar descripciones completas de PR +BRANCH=$(git branch --show-current) +COMMITS=$(git log main..$BRANCH --oneline) + +copilot -p "Generate a PR description for: +Branch: $BRANCH +Commits: +$COMMITS + +Include: Summary, Changes Made, Testing Done, Screenshots Needed" +``` + +### Integración CI/CD + +Para equipos con pipelines de CI/CD existentes, puedes automatizar las revisiones de Copilot en cada pull request usando GitHub Actions. Esto incluye publicar comentarios de revisión automáticamente y filtrar issues críticos. + +> 📖 **Más información**: Consulta [CI/CD Integration](../appendices/ci-cd-integration.md) para flujos de trabajo completos de GitHub Actions, opciones de configuración y consejos de resolución de problemas. + +--- + +# Práctica + +Configuración de escritorio cálida con monitor mostrando código, lámpara, taza de café y auriculares listos para práctica práctica + +Pon en práctica el flujo de trabajo completo. + +--- + +## ▶️ Pruébalo tú mismo + +Después de completar las demos, prueba estas variaciones: + +1. **Desafío de extremo a extremo**: Elige una pequeña funcionalidad (por ejemplo, "listar libros no leídos" o "exportar a CSV"). Usa el flujo completo: + - Planifica con `/plan` + - Diseña con agentes (python-reviewer, pytest-helper) + - Implementa + - Genera tests + - Crea PR + +2. **Desafío de automatización**: Configura el hook de pre-commit del flujo de Automatización de revisión de código. Haz un commit con una vulnerabilidad intencional en la ruta de un archivo. ¿Se bloquea? + +3. **Tu flujo de trabajo de producción**: Diseña tu propio flujo de trabajo para una tarea común que hagas. Escríbelo como una lista de verificación. ¿Qué partes podrían automatizarse con habilidades, agentes o hooks? + +**Autoevaluación**: Has completado el curso cuando puedas explicar a un compañero cómo agentes, habilidades y MCP trabajan juntos — y cuándo usar cada uno. + +--- + +## 📝 Tarea + +### Desafío principal: Funcionalidad de extremo a extremo + +Los ejemplos prácticos recorrieron la construcción de una funcionalidad "listar libros no leídos". Ahora practica el flujo completo en una característica diferente: **buscar libros por rango de años**: + +1. Inicia Copilot y reúne contexto: `@samples/book-app-project/books.py` +2. Planifica con `/plan Add a "search by year" command that lets users find books published between two years` +3. Implementa un método `find_by_year_range(start_year, end_year)` en `BookCollection` +4. Añade una función `handle_search_year()` en `book_app.py` que solicite al usuario los años de inicio y fin +5. Genera tests: `@samples/book-app-project/books.py @samples/book-app-project/tests/test_books.py Generate tests for find_by_year_range() including edge cases like invalid years, reversed range, and no results.` +6. Revisa con `/review` +7. Actualiza el README: `@samples/book-app-project/README.md Add documentation for the new "search by year" command.` +8. Genera un mensaje de commit + +Documenta tu flujo de trabajo mientras avanzas. + +**Criterios de éxito**: Has completado la funcionalidad desde la idea hasta el commit usando Copilot CLI, incluyendo planificación, implementación, tests, documentación y revisión. + +> 💡 **Bonus**: Si tienes agentes configurados desde el Capítulo 04, intenta crear y usar agentes personalizados. Por ejemplo, un agente manejador de errores para la revisión de implementación y un agente redactor de documentación para la actualización del README. + +
+💡 Pistas (haz clic para expandir) + +**Sigue el patrón del ejemplo ["De la idea a PR fusionada"](#de-la-idea-a-pr-fusionada-en-una-sola-sesión)** al inicio de este capítulo. Los pasos clave son: + +1. Reúne contexto con `@samples/book-app-project/books.py` +2. Planifica con `/plan Add a "search by year" command` +3. Implementa el método y el manejador de comando +4. Genera tests con casos límite (entrada inválida, resultados vacíos, rango invertido) +5. Revisa con `/review` +6. Actualiza el README con `@samples/book-app-project/README.md` +7. Genera el mensaje de commit con `-p` + +**Casos límite a considerar:** +- ¿Qué pasa si el usuario ingresa "2000" y "1990" (rango invertido)? +- ¿Qué pasa si no hay libros que coincidan con el rango? +- ¿Qué pasa si el usuario ingresa caracteres no numéricos? + +**Lo importante es practicar el flujo completo** desde idea → contexto → plan → implementar → probar → documentar → commit. + +
+ +--- + +
+🔧 Errores comunes (haz clic para expandir) + +| Error | Qué ocurre | Solución | +|---------|--------------|-----| +| Saltar directamente a la implementación | Se pierden problemas de diseño que son costosos de arreglar después | Usa `/plan` primero para pensar en el enfoque | +| Usar una sola herramienta cuando varias ayudarían | Resultados más lentos y menos exhaustivos | Combina: Agente para análisis → Habilidad para ejecución → MCP para integración | +| No revisar antes de commitear | Problemas de seguridad o bugs se cuelan | Siempre ejecuta `/review` o usa un [hook de pre-commit](#codeblock1) | +| Olvidar compartir flujos de trabajo con el equipo | Cada persona reinventa la rueda | Documenta patrones en agentes, habilidades e instrucciones compartidas | + +
+ +--- + +# Resumen + +## 🔑 Puntos clave + +1. **Integración > Aislamiento**: Combina herramientas para máximo impacto +2. **Contexto primero**: Siempre reúne el contexto necesario antes del análisis +3. **Agentes analizan, Habilidades ejecutan**: Usa la herramienta adecuada para la tarea +4. **Automatiza la repetición**: Hooks y scripts multiplican tu efectividad +5. **Documenta flujos de trabajo**: Los patrones compartibles benefician a todo el equipo + + +> 📋 **Referencia rápida**: Consulta la [referencia de comandos de GitHub Copilot CLI](https://docs.github.com/en/copilot/reference/cli-command-reference) para obtener una lista completa de comandos y atajos. + +--- + +## 🎓 ¡Curso completado! + +¡Felicidades! Has aprendido: + +| Chapter | What You Learned | +|---------|-------------------| +| 00 | Instalación de Copilot CLI y inicio rápido | +| 01 | Tres modos de interacción | +| 02 | Gestión de contexto con la sintaxis @ | +| 03 | Flujos de trabajo de desarrollo | +| 04 | Agentes especializados | +| 05 | Habilidades extensibles | +| 06 | Conexiones externas con MCP | +| 07 | Flujos de trabajo de producción unificados | + +Ahora estás preparado para usar GitHub Copilot CLI como un verdadero multiplicador de productividad en tu flujo de trabajo de desarrollo. + +## ➡️ ¿Qué sigue? + +Tu aprendizaje no se detiene aquí: + +1. **Practica a diario**: Usa Copilot CLI para tareas reales +2. **Crea herramientas personalizadas**: Desarrolla agentes y habilidades para tus necesidades específicas +3. **Comparte conocimiento**: Ayuda a tu equipo a adoptar estos flujos de trabajo +4. **Mantente al día**: Sigue las actualizaciones de GitHub Copilot para nuevas funciones + +### Recursos + +- [Documentación de GitHub Copilot CLI](https://docs.github.com/copilot/concepts/agents/about-copilot-cli) +- [Registro de servidores MCP](https://github.com/modelcontextprotocol/servers) +- [Habilidades de la comunidad](https://github.com/topics/copilot-skill) + +--- + +**¡Buen trabajo! Ahora ve y construye algo increíble.** + +**[← Volver al Capítulo 06](../06-mcp-servers/README.md)** | **[Volver al inicio del curso →](../README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/AGENTS.md b/translations/es/AGENTS.md new file mode 100644 index 00000000..27d78837 --- /dev/null +++ b/translations/es/AGENTS.md @@ -0,0 +1,46 @@ +# AGENTS.md + +Curso apto para principiantes que enseña GitHub Copilot CLI. Contenido educativo, no software. + +## Estructura + +| Ruta | Propósito | +|------|---------| +| `00-07/` | Capítulos: analogía → conceptos → práctico → tarea → siguiente | +| `samples/book-app-project/` | **Ejemplo principal**: aplicación CLI en Python para colección de libros utilizada en todos los capítulos | +| `samples/book-app-project-cs/` | Versión en C# de la aplicación de colección de libros | +| `samples/book-app-project-js/` | Versión en JavaScript de la aplicación de colección de libros | +| `samples/book-app-buggy/` | **Errores intencionales** para ejercicios de depuración (Cap. 03) | +| `samples/agents/` | Ejemplos de plantillas de agentes (python-reviewer, pytest-helper, hello-world) | +| `samples/skills/` | Ejemplos de plantillas de skills (code-checklist, pytest-gen, commit-message, hello-world) | +| `samples/mcp-configs/` | Ejemplos de configuración de servidor MCP | +| `samples/buggy-code/` | **Extra opcional**: código con errores enfocado en seguridad (JS y Python) | +| `samples/src/` | **Extra opcional**: ejemplos JS/React heredados de una versión anterior del curso | +| `appendices/` | Material de referencia suplementario | + +## Qué hacer + +- Mantener las explicaciones aptas para principiantes; explicar la jerga de IA/ML cuando se use +- Asegurarse de que los ejemplos de bash estén listos para copiar y pegar +- Tono: amigable, alentador, práctico +- Usar rutas `samples/book-app-project/` en todos los ejemplos principales +- Usar el contexto de Python/pytest para ejemplos de código + +## Qué no hacer + +- Arreglar errores en `samples/book-app-buggy/` o `samples/buggy-code/` — son intencionales +- Añadir capítulos sin actualizar la tabla del curso en README.md +- Asumir que los lectores conocen la terminología de IA/ML + +## Construir + +```bash +npm install && npm run release +``` + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/CODE_OF_CONDUCT.md b/translations/es/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..7c603c10 --- /dev/null +++ b/translations/es/CODE_OF_CONDUCT.md @@ -0,0 +1,135 @@ +# Código de conducta de Contributor Covenant + +## Nuestro compromiso + +Nosotros, como miembros, contribuyentes y líderes, nos comprometemos a que la participación en nuestra +comunidad sea una experiencia libre de acoso para todas las personas, independientemente de la edad, el tamaño del cuerpo, +discapacidad visible o invisible, la etnia, las características sexuales, la +identidad y expresión de género, nivel de experiencia, educación, estatus socioeconómico, +nacionalidad, apariencia personal, raza, religión, o identidad +y orientación. + +Nos comprometemos a actuar e interactuar de maneras que contribuyan a una comunidad abierta, acogedora, +diversa, inclusiva y saludable. + +## Nuestros estándares + +Ejemplos de comportamientos que contribuyen a un ambiente positivo para nuestra +comunidad incluyen: + +* Demostrar empatía y amabilidad hacia otras personas +* Ser respetuoso con opiniones, puntos de vista y experiencias diferentes +* Dar y aceptar con gracia comentarios constructivos +* Aceptar la responsabilidad y disculparse con quienes se vean afectados por nuestros errores, + y aprender de la experiencia +* Centrarse en lo que es mejor no solo para nosotros como individuos, sino para la + comunidad en general + +Ejemplos de comportamientos inaceptables incluyen: + +* El uso de lenguaje o imágenes sexualizadas, y atención o + avances de cualquier tipo +* Hacer trolling, comentarios insultantes o despectivos, y ataques personales o políticos +* Acoso público o privado +* Publicar la información privada de otras personas, como una dirección física o de correo electrónico, + sin su permiso explícito +* Otra conducta que razonablemente podría considerarse inapropiada en un + entorno profesional + +## Responsabilidades de aplicación + +Los líderes comunitarios son responsables de clarificar y hacer cumplir nuestros estándares de +comportamiento aceptable y tomarán medidas correctivas apropiadas y justas en +respuesta a cualquier comportamiento que consideren inapropiado, amenazante, ofensivo, +o perjudicial. + +Los líderes comunitarios tienen el derecho y la responsabilidad de eliminar, editar o rechazar +comentarios, commits, código, ediciones de wiki, issues y otras contribuciones que +no se ajusten a este Código de Conducta, y +comunicarán las razones de moderación cuando sea apropiado. + +## Alcance + +Este Código de Conducta se aplica en todos los espacios de la comunidad y también se aplica cuando +una persona representa oficialmente a la comunidad en espacios públicos. +Ejemplos de representación de nuestra comunidad incluyen usar una dirección de correo electrónico oficial, +publicar a través de una cuenta oficial en redes sociales, o actuar como un +representante en un evento en línea o presencial. + +## Aplicación + +Los casos de comportamiento abusivo, acosador o de otra forma inaceptable pueden ser +reportados a los líderes comunitarios responsables de la aplicación en +GitHub. +Todas las quejas serán revisadas e investigadas de manera rápida e imparcial. + +Todos los líderes comunitarios están obligados a respetar la privacidad y la seguridad del +denunciante de cualquier incidente. + +## Directrices de aplicación + +Los líderes comunitarios seguirán estas Directrices de impacto comunitario para determinar +las consecuencias de cualquier acción que consideren una violación de este Código de Conducta: + +### 1. Corrección + +**Impacto en la comunidad**: Uso de lenguaje inapropiado u otro comportamiento considerado +poco profesional o no bienvenido en la comunidad. + +**Consecuencia**: Una advertencia privada por escrito de los líderes comunitarios, proporcionando +claridad sobre la naturaleza de la violación y una explicación de por qué el +comportamiento fue inapropiado. Se puede solicitar una disculpa pública. + +### 2. Advertencia + +**Impacto en la comunidad**: Una violación por medio de un solo incidente o una serie +de acciones. + +**Consecuencia**: Una advertencia con consecuencias en caso de comportamiento continuado. No +interacción con las personas involucradas, incluida la interacción no solicitada con +quienes aplican el Código de Conducta, por un periodo de tiempo especificado. Esto +incluye evitar interacciones en los espacios de la comunidad así como en canales externos +como las redes sociales. El incumplimiento de estos términos puede llevar a una sanción temporal o +prohibición permanente. + +### 3. Prohibición temporal + +**Impacto en la comunidad**: Una violación grave de las normas comunitarias, incluyendo +comportamiento inapropiado sostenido. + +**Consecuencia**: Una prohibición temporal de cualquier tipo de interacción o comunicación pública +con la comunidad por un período de tiempo especificado. No se permite interacción pública o +privada con las personas involucradas, incluida la interacción no solicitada +con quienes aplican el Código de Conducta durante este período. +Violar estos términos puede llevar a una prohibición permanente. + +### 4. Prohibición permanente + +**Impacto en la comunidad**: Demostrar un patrón de violaciones de las normas comunitarias, incluyendo +normas, incluyendo comportamiento inapropiado sostenido, acoso a un +individuo, o agresión hacia o menosprecio de clases de individuos. + +**Consecuencia**: Una prohibición permanente de cualquier tipo de interacción pública dentro +de la comunidad. + +## Atribución + +Este Código de Conducta está adaptado de [Contributor Covenant][homepage], +versión 2.0, disponible en +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Las Directrices de impacto comunitario se inspiraron en [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +Para respuestas a preguntas comunes sobre este código de conducta, consulte las preguntas frecuentes en +https://www.contributor-covenant.org/faq. Las traducciones están disponibles en +https://www.contributor-covenant.org/translations. + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/CONTRIBUTING.md b/translations/es/CONTRIBUTING.md new file mode 100644 index 00000000..f84ea3b6 --- /dev/null +++ b/translations/es/CONTRIBUTING.md @@ -0,0 +1,17 @@ +## Contribuir + +[fork]: https://github.com/github/REPO/fork +[pr]: https://github.com/github/REPO/compare + +¡Hola! Nos entusiasma que quieras contribuir a este proyecto. Tu ayuda es esencial para que siga siendo excelente. + +Las contribuciones a este proyecto se [publican](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) públicamente bajo la [licencia de código abierto del proyecto](../../LICENSE). + +Ten en cuenta que este proyecto se publica con un [Código de conducta para colaboradores](CODE_OF_CONDUCT.md). Al participar en este proyecto aceptas cumplir sus términos. + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/GLOSSARY.md b/translations/es/GLOSSARY.md new file mode 100644 index 00000000..c25f9f15 --- /dev/null +++ b/translations/es/GLOSSARY.md @@ -0,0 +1,176 @@ +# Glosario + +Referencia rápida de términos técnicos usados a lo largo de este curso. No te preocupes por memorizarlos ahora; consúltalos según sea necesario. + +--- + +## A + +### Agente + +Una personalidad de IA especializada con experiencia en un dominio (p. ej., frontend, seguridad). Definida en archivos `.agent.md` con frontmatter YAML que contiene como mínimo un campo `description`. + +### API + +Interfaz de Programación de Aplicaciones. Una forma para que los programas se comuniquen entre sí. + +--- + +## C + +### CI/CD + +Integración Continua/Despliegue Continuo. Pipelines automatizados de pruebas y despliegue. + +### CLI + +Interfaz de Línea de Comandos. Una forma basada en texto para interactuar con el software (¡como esta herramienta!). + +### Ventana de contexto + +La cantidad de texto que una IA puede considerar a la vez. Como un escritorio que solo puede sostener cierta cantidad. Cuando añades archivos, el historial de conversación y las indicaciones del sistema, todos ocupan espacio en esta ventana. + +### Gestor de contexto + +Una construcción de Python que usa la sentencia `with` y que maneja automáticamente la configuración y la limpieza (como abrir y cerrar archivos). Ejemplo: `with open("file.txt") as f:` asegura que el archivo se cierre incluso si ocurre un error. + +### Commit Convencional + +Un formato de mensaje de commit que sigue una estructura estandarizada: `type(scope): description`. Los tipos comunes incluyen `feat` (nueva característica), `fix` (corrección de bugs), `docs` (documentación), `refactor` y `test`. Ejemplo: `feat(auth): add password reset flow`. + +### Dataclass + +Un decorador de Python (`@dataclass`) que genera automáticamente `__init__`, `__repr__` y otros métodos para clases que principalmente almacenan datos. Usado en la app de libros para definir la clase `Book` con campos como `title`, `author`, `year` y `read`. + +--- + +## F + +### Frontmatter + +Metadatos en la parte superior de un archivo Markdown encerrados entre los delimitadores `---`. Se usan en archivos de agente y skill para definir propiedades como `description` y `name` en formato YAML. + +--- + +## G + +### Patrón glob + +Un patrón que usa comodines para hacer coincidir rutas de archivos (p. ej., `*.py` coincide con todos los archivos Python, `*.js` coincide con todos los archivos JavaScript). + +--- + +## J + +### JWT + +JSON Web Token. Una forma segura de transmitir información de autenticación entre sistemas. + +--- + +## M + +### MCP + +Model Context Protocol. Un estándar para conectar asistentes de IA a fuentes de datos externas. + +--- + +### Memoria (Copilot CLI) + +Una función que permite a Copilot CLI recordar hechos y preferencias *a través de todas las sesiones*, no solo dentro de una única sesión. A diferencia del historial de sesión (que guarda una conversación específica), la memoria persiste de forma global y se aplica automáticamente en sesiones futuras. Se gestiona con el comando slash `/memory` (`/memory on`, `/memory off`, `/memory show`). La memoria puede aplicarse a tu cuenta de usuario (visible en todos los repositorios) o a un repositorio específico (compartida con colaboradores). + +--- + +## N + +### npx + +Una herramienta de Node.js que ejecuta paquetes npm sin instalarlos globalmente. Se usa en las configuraciones del servidor MCP para iniciar servidores (p. ej., `npx @modelcontextprotocol/server-filesystem`). + +--- + +## O + +### OWASP + +Open Web Application Security Project. Una organización que publica buenas prácticas de seguridad y mantiene la lista "OWASP Top 10" de los riesgos de seguridad más críticos en aplicaciones web. + +--- + +## P + +### PEP 8 + +Python Enhancement Proposal 8. La guía de estilo oficial para el código Python, que cubre convenciones de nombres (snake_case para funciones, PascalCase para clases), indentación (4 espacios) y disposición del código. Seguir PEP 8 hace que el código Python sea coherente y legible. + +### Gancho de pre-commit + +Un script que se ejecuta automáticamente antes de cada `git commit`. Puede usarse para ejecutar revisiones de seguridad de Copilot o comprobaciones de calidad de código antes de que el código se confirme. + +### pytest + +Un popular framework de pruebas para Python conocido por su sintaxis simple, potentes fixtures y rico ecosistema de plugins. Utilizado a lo largo de este curso para probar la app de libros. Las pruebas se ejecutan con `python -m pytest tests/`. + +### Modo programático + +Ejecutar Copilot con la bandera `-p` para comandos únicos sin interacción. + +--- + +## R + +### Limitación de tasa + +Restricciones sobre cuántas solicitudes puedes hacer a una API dentro de un periodo de tiempo. Copilot puede limitar temporalmente las respuestas si excedes la cuota de uso de tu plan. + +--- + +## S + +### Sesión + +Una conversación con Copilot que mantiene el contexto y puede reanudarse más tarde. + +### Skill + +Una carpeta con instrucciones que Copilot carga automáticamente cuando son relevantes para tu prompt. Definidas en archivos `SKILL.md` con frontmatter YAML. + +### Comando slash + +Comandos que empiezan con `/` que controlan Copilot (p. ej., `/help`, `/clear`, `/model`). + +--- + +## T + +### Token + +Una unidad de texto que los modelos de IA procesan. Aproximadamente 4 caracteres o 0.75 palabras. Se usa para medir tanto la entrada (tus prompts y contexto) como la salida (respuestas de la IA). + +### Anotaciones de tipo + +Anotaciones de Python que indican los tipos esperados de los parámetros de las funciones y los valores de retorno (p. ej., `def add_book(title: str, year: int) -> Book:`). No imponen tipos en tiempo de ejecución pero ayudan con la claridad del código, el soporte del IDE y herramientas de análisis estático como mypy. + +--- + +## W + +### WCAG + +Web Content Accessibility Guidelines. Normas publicadas por el W3C para hacer el contenido web accesible a personas con discapacidades. WCAG 2.1 AA es un objetivo de conformidad común. + +--- + +## Y + +### YAML + +YAML Ain't Markup Language. Un formato de datos legible por humanos utilizado para configuración. En este curso, YAML aparece en el frontmatter de agentes y skills (el bloque delimitado por `---` en la parte superior de los archivos `.agent.md` y `SKILL.md`). + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/README.md b/translations/es/README.md new file mode 100644 index 00000000..f1679336 --- /dev/null +++ b/translations/es/README.md @@ -0,0 +1,122 @@ + + +![GitHub Copilot CLI para Principiantes](../../assets/copilot-banner.png) + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](../../LICENSE)  +[![Open project in GitHub Codespaces](https://img.shields.io/badge/Codespaces-Open-blue?style=flat-square&logo=github)](https://codespaces.new/github/copilot-cli-for-beginners?hide_repo_select=true&ref=main&quickstart=true)  +[![Official Copilot CLI documentation](https://img.shields.io/badge/GitHub-CLI_Documentation-00a3ee?style=flat-square&logo=github)](https://docs.github.com/en/copilot/how-tos/copilot-cli)  +[![Join AI Foundry Discord](https://img.shields.io/badge/Discord-AI_Community-blue?style=flat-square&logo=discord&color=5865f2&logoColor=fff)](https://aka.ms/foundry/discord) + +🎯 [Qué aprenderás](#qué-aprenderás)   ✅ [Requisitos previos](#requisitos-previos)   🤖 [Familia Copilot](#comprendiendo-la-familia-de-github-copilot)   📚 [Estructura del curso](#estructura-del-curso)   📋 [Referencia de comandos de GitHub Copilot CLI](#referencia-de-comandos-de-github-copilot-cli) + +# GitHub Copilot CLI para Principiantes + +> **✨ Aprende a potenciar tu flujo de trabajo de desarrollo con asistencia en la línea de comandos potenciada por IA.** + +GitHub Copilot CLI trae la asistencia de IA directamente a tu terminal. En lugar de cambiar a un navegador o editor de código, puedes hacer preguntas, generar aplicaciones completas, revisar código, generar pruebas y depurar problemas sin salir de tu línea de comandos. + +Piénsalo como tener un colega conocedor disponible las 24 horas que puede leer tu código, explicar patrones confusos y ayudarte a trabajar más rápido. + +> 📘 **¿Prefieres una experiencia web?** Puedes seguir este curso directamente aquí en GitHub, o verlo en [Awesome Copilot](https://awesome-copilot.github.com/learning-hub/cli-for-beginners/) para una experiencia de navegación más tradicional. + +Este curso está diseñado para: + +- **Desarrolladores de software** que desean usar IA desde la línea de comandos +- **Usuarios de terminal** que prefieren flujos de trabajo impulsados por teclado en lugar de integraciones con IDE +- **Equipos que buscan estandarizar** prácticas de desarrollo y revisión de código asistidas por IA + +## 🎯 Qué aprenderás + +Este curso práctico te lleva de cero a productivo con GitHub Copilot CLI. Trabajarás con una sola aplicación de colección de libros en Python a lo largo de todos los capítulos, mejorándola progresivamente usando flujos de trabajo asistidos por IA. Al final, usarás con confianza la IA para revisar código, generar pruebas, depurar problemas y automatizar flujos de trabajo: todo desde tu terminal. + +**No se requiere experiencia previa en IA.** Si sabes usar un terminal, puedes aprender esto. + +**Perfecto para:** Desarrolladores, estudiantes y cualquier persona con experiencia en desarrollo de software. + +## ✅ Requisitos previos + +Antes de comenzar, asegúrate de tener: + +- **Cuenta de GitHub**: [Crea una gratis](https://github.com/signup)
+- **Acceso a GitHub Copilot**: [Oferta gratuita](https://github.com/features/copilot/plans), [Suscripción mensual](https://github.com/features/copilot/plans), o [Gratis para estudiantes/profesores](https://education.github.com/pack)
+- **Conceptos básicos del terminal**: Cómodo con `cd`, `ls`, ejecutar comandos + +## 🤖 Comprendiendo la familia de GitHub Copilot + +GitHub Copilot ha evolucionado a una familia de herramientas potenciadas por IA. Aquí es donde vive cada una: + +| Producto | Dónde se ejecuta | Descripción | +|---------|---------------|----------| +| [**GitHub Copilot CLI**](https://docs.github.com/copilot/how-tos/copilot-cli/cli-getting-started)
(este curso) | Tu terminal | Asistente de codificación con IA nativo del terminal | +| [**GitHub Copilot**](https://docs.github.com/copilot) | VS Code, Visual Studio, JetBrains, etc. | Modo agente, chat, sugerencias en línea | +| [**Copilot on GitHub.com**](https://github.com/copilot) | GitHub | Chat inmersivo sobre tus repositorios, crear agentes y más | +| [**GitHub Copilot cloud agent**](https://docs.github.com/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks) | GitHub | Asignar issues a agentes, obtener PRs de vuelta | + +Este curso se centra en **GitHub Copilot CLI**, trayendo asistencia de IA directamente a tu terminal. + +## 📚 Estructura del curso + +![Ruta de aprendizaje de GitHub Copilot CLI](../../assets/learning-path.png) + +| Capítulo | Título | Lo que construirás | +|:-------:|-------|-------------------| +| 00 | 🚀 [Inicio rápido](./00-quick-start/README.md) | Instalación y verificación | +| 01 | 👋 [Primeros pasos](./01-setup-and-first-steps/README.md) | Demostraciones en vivo + tres modos de interacción | +| 02 | 🔍 [Contexto y conversaciones](./02-context-conversations/README.md) | Análisis de proyectos con múltiples archivos | +| 03 | ⚡ [Flujos de desarrollo](./03-development-workflows/README.md) | Revisión de código, depuración, generación de pruebas | +| 04 | 🤖 [Crear asistentes de IA especializados](./04-agents-custom-instructions/README.md) | Agentes personalizados para tu flujo de trabajo | +| 05 | 🛠️ [Automatizar tareas repetitivas](./05-skills/README.md) | Habilidades que se cargan automáticamente | +| 06 | 🔌 [Conectar con GitHub, bases de datos y APIs](./06-mcp-servers/README.md) | Integración del servidor MCP | +| 07 | 🎯 [Integrándolo todo](./07-putting-it-together/README.md) | Flujos de trabajo completos | + +## 📖 Cómo funciona este curso + +Cada capítulo sigue el mismo patrón: + +1. **Analogía del mundo real**: Entender el concepto a través de comparaciones familiares +2. **Conceptos centrales**: Aprender el conocimiento esencial +3. **Ejemplos prácticos**: Ejecutar comandos reales y ver los resultados +4. **Tarea**: Practicar lo que aprendiste +5. **Qué sigue**: Vista previa del capítulo siguiente + +**Los ejemplos de código son ejecutables.** Cada bloque de texto de copilot en este curso se puede copiar y ejecutar en tu terminal. + +## 📋 Referencia de comandos de GitHub Copilot CLI + +The **[GitHub Copilot CLI command reference](https://docs.github.com/en/copilot/reference/cli-command-reference)** helps you find commands and keyboard shortcuts to help you use Copilot CLI effectively. + +## 🙋 Obtener ayuda + +- 🐛 **¿Encontraste un error?** [Open an Issue](https://github.com/github/copilot-cli-for-beginners/issues) +- 📚 **Documentación oficial:** [GitHub Copilot CLI Documentation](https://docs.github.com/copilot/concepts/agents/about-copilot-cli) + +## Contribuciones + +> **Nota**: El código utilizado en el curso está diseñado para generar tipos específicos de salida durante revisiones, explicaciones y depuración, por lo que no podemos aceptar PRs que cambien el código existente. + +**Cómo contribuir:** + +1. Haz un fork de este repositorio y clónalo en tu máquina +2. Crea una rama para la mejora (`git checkout -b my-improvement`) +3. Realiza tus cambios +4. Envía un pull request + +## Licencia + +Este proyecto está licenciado bajo los términos de la licencia de código abierto MIT. Consulta el archivo [LICENSE](../../LICENSE) para ver los términos completos. + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/SECURITY.md b/translations/es/SECURITY.md new file mode 100644 index 00000000..f685e52d --- /dev/null +++ b/translations/es/SECURITY.md @@ -0,0 +1,38 @@ +Gracias por ayudar a que GitHub sea seguro para todos. + +# Seguridad + +GitHub se toma en serio la seguridad de nuestros productos y servicios de software, incluidos todos los repositorios de código abierto gestionados a través de nuestras organizaciones de GitHub, como [GitHub](https://github.com/GitHub). + +Aunque [los repositorios de código abierto están fuera del alcance de nuestro programa de recompensas por errores](https://bounty.github.com/index.html#scope) y por lo tanto no son elegibles para recompensas, nos aseguraremos de que su hallazgo sea transmitido a los mantenedores correspondientes para su remediación. + +## Reportar problemas de seguridad + +Si cree que ha encontrado una vulnerabilidad de seguridad en cualquier repositorio propiedad de GitHub, por favor repórtela mediante divulgación coordinada. + +**Por favor, no informe vulnerabilidades de seguridad a través de issues públicos de GitHub, discusiones o pull requests.** + +En su lugar, por favor envíe un correo electrónico a opensource-security[@]github.com. + +Incluya, por favor, tanta información de la lista siguiente como pueda para ayudarnos a comprender y resolver el problema: + + * El tipo de problema (por ejemplo, desbordamiento de búfer, inyección SQL o cross-site scripting) + * Rutas completas de los archivos fuente relacionados con la manifestación del problema + * La ubicación del código fuente afectado (tag/branch/commit o URL directa) + * Cualquier configuración especial necesaria para reproducir el problema + * Instrucciones paso a paso para reproducir el problema + * Código de prueba de concepto o exploit (si es posible) + * Impacto del problema, incluyendo cómo un atacante podría explotar la vulnerabilidad + +Esta información nos ayudará a atender su informe más rápidamente. + +## Política + +Consulte [la Política de Safe Harbor de GitHub](https://docs.github.com/en/site-policy/security-policies/github-bug-bounty-program-legal-safe-harbor#1-safe-harbor-terms) + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/SUPPORT.md b/translations/es/SUPPORT.md new file mode 100644 index 00000000..dc9fe4a6 --- /dev/null +++ b/translations/es/SUPPORT.md @@ -0,0 +1,18 @@ +# Soporte + +## Cómo presentar incidencias y obtener ayuda + +Este proyecto utiliza las incidencias de GitHub para registrar errores y solicitudes de funciones. Por favor, busque las incidencias existentes antes de presentar nuevas para evitar duplicados. Para problemas nuevos, presente su error o solicitud de función como una nueva incidencia. + +Para obtener ayuda o hacer preguntas sobre el uso de este proyecto, por favor abra una incidencia. + +## Política de soporte de GitHub + +El soporte para este proyecto se limita a los recursos listados arriba. + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/appendices/README.md b/translations/es/appendices/README.md new file mode 100644 index 00000000..d79e61ed --- /dev/null +++ b/translations/es/appendices/README.md @@ -0,0 +1,30 @@ + + +# Apéndices + +Estos apéndices cubren temas adicionales que amplían el contenido principal del curso. Son lecturas opcionales para cuando necesites estas capacidades específicas. + +| Apéndice | Descripción | Prerrequisito | +|----------|-------------|--------------| +| [Funciones adicionales de contexto](additional-context.md) | Trabajar con imágenes y permisos en múltiples directorios | Capítulo 02 | +| [Integración CI/CD](ci-cd-integration.md) | Flujos de trabajo de GitHub Actions para revisiones automatizadas | Capítulo 07 | + +--- + +**[← Volver a la página principal del curso](../README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/appendices/additional-context.md b/translations/es/appendices/additional-context.md new file mode 100644 index 00000000..ddea5a16 --- /dev/null +++ b/translations/es/appendices/additional-context.md @@ -0,0 +1,158 @@ + + +# Funciones Adicionales de Contexto + +> 📖 **Requisito previo**: Completa [Capítulo 02: Contexto y Conversaciones](../02-context-conversations/README.md) antes de leer este apéndice. + +Este apéndice cubre dos funciones adicionales de contexto: trabajar con imágenes y gestionar permisos en múltiples directorios. + +--- + +## Trabajar con imágenes + +Puedes incluir imágenes en tus conversaciones usando la sintaxis `@`. Copilot puede analizar capturas de pantalla, maquetas, diagramas y otro contenido visual. + +### Referencia básica de imagen + +```bash +copilot + +> @screenshot.png What's happening in this UI? + +# Copilot analiza la imagen y responde + +> @mockup.png @current-design.png Compare these two designs + +# También puedes arrastrar y soltar imágenes o pegar desde el portapapeles +``` + +### Formatos de imagen compatibles + +| Formato | Mejor para | +|--------|----------| +| PNG | Capturas de pantalla, maquetas de UI, diagramas | +| JPG/JPEG | Fotos, imágenes complejas | +| GIF | Diagramas simples (solo primer fotograma) | +| WebP | Capturas de pantalla web | + +### Casos prácticos de uso de imágenes + +**1. Depuración de interfaz de usuario** +```bash +> @bug-screenshot.png The button doesn't align properly. What CSS might cause this? +``` + +**2. Implementación de diseño** +```bash +> @figma-export.png Write the HTML and Tailwind CSS to match this design +``` + +**3. Análisis de errores** +```bash +> @error-screenshot.png What does this error mean and how do I fix it? +``` + +**4. Revisión de arquitectura** +```bash +> @whiteboard-diagram.png Convert this architecture diagram to a Mermaid diagram I can put in docs +``` + +**5. Comparación antes/después** +```bash +> @before.png @after.png What changed between these two versions of the UI? +``` + +### Combinar imágenes con código + +Las imágenes son aún más útiles cuando se combinan con el contexto del código: + +```bash +copilot + +> @screenshot-of-bug.png @src/components/Header.jsx +> The header looks wrong in the screenshot. What's causing it in the code? +``` + +### Consejos para imágenes + +- **Recorta las capturas de pantalla** para mostrar solo las porciones relevantes (ahorra tokens de contexto) +- **Usa alto contraste** para los elementos de la interfaz que quieras analizar +- **Anota si es necesario** - rodea o resalta las áreas problemáticas antes de subir +- **Una imagen por concepto** - funcionan múltiples imágenes, pero mantén el enfoque + +--- + +## Patrones de permisos + +Por defecto, Copilot puede acceder a archivos en tu directorio actual. Para archivos en otras ubicaciones, necesitas conceder acceso. + +### Agregar directorios + +```bash +# Agregar un directorio a la lista permitida +copilot --add-dir /path/to/other/project + +# Agregar varios directorios +copilot --add-dir ~/workspace --add-dir /tmp +``` + +### Permitir todas las rutas + +```bash +# Desactivar las restricciones de ruta por completo (usar con precaución) +copilot --allow-all-paths +``` + +### Dentro de una sesión + +```bash +copilot + +> /add-dir /path/to/other/project +# Ahora puedes hacer referencia a archivos de ese directorio + +> /list-dirs +# Ver todos los directorios permitidos + +> /yolo +# Alias rápido para /allow-all activado — aprueba automáticamente todas las solicitudes de permisos +``` + +### Para automatización + +```bash +# Permitir todos los permisos para scripts no interactivos +copilot -p "Review @src/" --allow-all + +# O usa el alias memorable +copilot -p "Review @src/" --yolo +``` + +### Cuando necesitas acceso a múltiples directorios + +Escenarios comunes en los que necesitarás estos permisos: + +1. **Trabajo en monorepositorio** - Comparar código entre paquetes +2. **Refactorización entre proyectos** - Actualizar bibliotecas compartidas +3. **Proyectos de documentación** - Referenciar múltiples bases de código +4. **Trabajo de migración** - Comparar implementaciones antiguas y nuevas + +--- + +**[← Volver al Capítulo 02](../02-context-conversations/README.md)** | **[Volver a los apéndices](README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file diff --git a/translations/es/appendices/ci-cd-integration.md b/translations/es/appendices/ci-cd-integration.md new file mode 100644 index 00000000..3a83757b --- /dev/null +++ b/translations/es/appendices/ci-cd-integration.md @@ -0,0 +1,217 @@ + + +# Integración CI/CD + +> 📖 **Requisito previo**: Completa [Capítulo 07: Poniéndolo todo junto](../07-putting-it-together/README.md) antes de leer este apéndice. +> +> ⚠️ **Este apéndice es para equipos con pipelines CI/CD existentes.** Si eres nuevo en GitHub Actions o en conceptos de CI/CD, comienza con el enfoque más sencillo del gancho pre-commit en la sección [Automatización de revisión de código](../07-putting-it-together/README.md#workflow-3-code-review-automation-optional) del Capítulo 07. + +Este apéndice muestra cómo integrar GitHub Copilot CLI en tus pipelines CI/CD para la revisión automática de código en pull requests. + +--- + +## Flujo de trabajo de GitHub Actions + +Este flujo de trabajo revisa automáticamente los archivos modificados cuando se abre o actualiza un pull request: + +```yaml +# .github/workflows/copilot-review.yml +name: Copilot Review + +on: + pull_request: + types: [opened, synchronize] + +jobs: + review: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Needed to compare with main branch + + - name: Install Copilot CLI + run: npm install -g @github/copilot + + - name: Review Changed Files + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Get list of changed JS/TS files + FILES=$(git diff --name-only origin/main...HEAD | grep -E '\.(js|ts|jsx|tsx)$' || true) + + if [ -z "$FILES" ]; then + echo "No JavaScript/TypeScript files changed" + exit 0 + fi + + echo "# Copilot Code Review" > review.md + echo "" >> review.md + + for file in $FILES; do + echo "Reviewing $file..." + echo "## $file" >> review.md + echo "" >> review.md + + # Use --silent to suppress progress output + copilot --allow-all -p "Quick security and quality review of @$file. List only critical issues." --silent >> review.md 2>/dev/null || echo "Review skipped" >> review.md + echo "" >> review.md + done + + - name: Post Review Comment + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const review = fs.readFileSync('review.md', 'utf8'); + + // Only post if there's meaningful content + if (review.includes('CRITICAL') || review.includes('HIGH')) { + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: review + }); + } else { + console.log('No critical issues found, skipping comment'); + } +``` + +--- + +## Opciones de configuración + +### Limitar el alcance de la revisión + +Puedes centrar la revisión en tipos específicos de problemas: + +```yaml +# Security-only review +copilot --allow-all -p "Security review of @$file. Check for: SQL injection, XSS, hardcoded secrets, authentication issues." --silent + +# Performance-only review +copilot --allow-all -p "Performance review of @$file. Check for: N+1 queries, memory leaks, blocking operations." --silent +``` + +### Manejo de PRs grandes + +Para PRs con muchos archivos, considera procesarlos en lotes o limitarlos: + +```yaml +# Limit to first 10 files +FILES=$(git diff --name-only origin/main...HEAD | grep -E '\.(js|ts)$' | head -10) + +# Or set a timeout per file +timeout 60 copilot --allow-all -p "Review @$file" --silent || echo "Review timed out" +``` + +### Configuración del equipo + +Para revisiones coherentes en todo el equipo, crea una configuración compartida: + +```json +// .copilot/config.json (committed to repo) +{ + "model": "claude-sonnet-4.5", + "permissions": { + "allowedPaths": ["src/**/*", "tests/**/*"], + "deniedPaths": [".env*", "secrets/**/*", "*.min.js"] + } +} +``` + +--- + +## Alternativa: Bot de revisión de PR + +Para flujos de trabajo de revisión más sofisticados, considera usar el agente en la nube de GitHub Copilot: + +```yaml +# .github/workflows/copilot-agent-review.yml +name: Request Copilot Review + +on: + pull_request: + types: [opened, ready_for_review] + +jobs: + request-review: + runs-on: ubuntu-latest + steps: + - name: Request Copilot Review + uses: actions/github-script@v7 + with: + script: | + await github.rest.pulls.requestReviewers({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + reviewers: ['copilot[bot]'] + }); +``` + +--- + +## Mejores prácticas para la integración CI/CD + +1. **Usa la bandera `--silent`** - Suprime la salida de progreso para obtener registros más limpios +2. **Establece tiempos de espera** - Evita que revisiones colgadas bloqueen tu pipeline +3. **Filtra tipos de archivos** - Revisa solo archivos relevantes (omitir código generado, dependencias) +4. **Ten en cuenta los límites de tasa** - Espacia las revisiones para PRs grandes +5. **Gestiona fallos de forma elegante** - No bloquees los merges por fallos en la revisión; registra y continúa + +--- + +## Resolución de problemas + +### "Authentication failed" en CI + +Asegúrate de que tu flujo de trabajo tenga los permisos correctos: + +```yaml +permissions: + contents: read + pull-requests: write + issues: write +``` + +### Revisiones que agotan el tiempo de espera + +Aumenta el tiempo de espera o reduce el alcance: + +```bash +timeout 120 copilot --allow-all -p "Quick review of @$file - critical issues only" --silent +``` + +### Límites de tokens en archivos grandes + +Omite archivos muy grandes: + +```bash +if [ $(wc -l < "$file") -lt 500 ]; then + copilot --allow-all -p "Review @$file" --silent +else + echo "Skipping $file (too large)" +fi +``` + +--- + +**[← Volver al Capítulo 07](../07-putting-it-together/README.md)** | **[Volver a los Apéndices](README.md)** + +--- + + +**Descargo de responsabilidad**: +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. + \ No newline at end of file