[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ACD3HS3J51XG81CD17RW0X":3,"skill-same:01M6ACD3HS3J51XG81CD17RW0X":81},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6ACD3HS3J51XG81CD17RW0X","beam-concepts",null,"Explains core Apache Beam programming model concepts including PCollections, PTransforms, Pipelines, and Runners. Use when learning Beam fundamentals or explaining pipeline concepts.","apache\u002Fbeam","apache","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47359?v=4","01M6AC83E6K4FDKK7HZ8WNMQKE","The Apache Software Foundation","01M6ACCXED4SMY85J25QX8K9SY",8718,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Fbeam-concepts\u002FSKILL.md",[],[19,20,21,22,9,23,24,25,26,27,28,29,30],"beam","beam concepts","concepts","core","runners","pipeline","learning","model","programming","use","pipelines","when","2026-11-10 10:12:30",false,"---\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#   http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n\nname: beam-concepts\ndescription: Explains core Apache Beam programming model concepts including PCollections, PTransforms, Pipelines, and Runners. Use when learning Beam fundamentals or explaining pipeline concepts.\n---\n\n# Apache Beam Core Concepts\n\n## The Beam Model\nEvolved from Google's MapReduce, FlumeJava, and Millwheel projects. Originally called the \"Dataflow Model.\"\n\n### Protos\n\nThe `\u002Fmodel` directory defines the official, language-agnostic Protocol Buffer (`.proto`) and gRPC service specifications that establish the **Beam Model** and the **Beam Portability Framework**.\n\n#### Why `\u002Fmodel` Exists (Portability & Decoupling)\n\nWithout a standardized model representation, supporting $N$ SDK languages across $M$ execution runners  would require $N \\times M$ separate translation layers. By defining all core pipeline concepts, data encodings, metrics, and worker RPC protocols as Protobuf messages and gRPC services, `\u002Fmodel` acts as the universal lingua franca:\n\n* **SDKs** compile user pipelines into standardized Runner API protobuf graphs.\n\n* **Runners** inspect, optimize, and distribute these graphs without needing SDK-specific language runtimes.\n\n* **Workers (SDK Harnesses)** execute user code (`DoFn`s) and communicate with runners over standardized Fn API gRPC channels.\n\n#### Core Directories & What They Do\n\n1. **`\u002Fmodel\u002Fpipeline` (Runner API & Core Model)**: Defines the SDK- and runner-independent representation of pipelines (`Pipeline`, `Components`, `PTransform`, `PCollection`, `Coder`), timestamps\u002Fconstants, Beam Schemas (`Row`, `Field`), and execution metrics (`MonitoringInfo`).\n2. **`\u002Fmodel\u002Ffn-execution` (Fn API & Provisioning)**: Defines bidirectional gRPC services between runners and worker SDK harnesses for bundle execution (`Control`), element streaming (`Data`), state\u002Ftimer access (`State`), log forwarding (`Logging`), and container initialization (`Provisioning`).\n3. **`\u002Fmodel\u002Fjob-management` (Job, Expansion, & Artifact APIs)**: Defines gRPC interfaces for submitting and monitoring jobs on remote servers (`JobService`), resolving cross-language transforms in remote SDKs (`ExpansionService`), and staging dependency artifacts or container images (`ArtifactService`).\n4. **`\u002Fmodel\u002Finteractive` (Interactive API)**: Defines metadata and stream headers for recording and replaying data in Interactive Beam notebooks.\n\n#### What Agents Need to Pay Special Attention To\n\n* **Conservative Proto Changes**: Proto changes are generally conservative and accepted only when there is a compelling reason and community consensus. Every addition introduces a new obligation that each SDK and runner must support; adding new Beam model elements (portable types, capabilities) increases the compatibility gap between SDK and runner capabilities.\n* **URNs Are the API Contract**: Transforms, coders, windowing strategies, environments, and metrics are bound together by standardized string URNs (e.g., `beam:transform:pardo:v1`, `beam:coder:bytes:v1`). When inspecting or creating transforms across languages, always verify URN mappings and registry handlers in both the SDK and Runner runtimes.\n* **Strict Backward & Wire Compatibility**:\n  * Never renumber, delete, or modify existing field IDs or URN strings in `.proto` files, as they are used across distributed RPC boundaries and persisted checkpoints.\n* **Build System & Naming Collisions**:\n  * Modifying files in `\u002Fmodel` requires re-generating language bindings (e.g., `.\u002Fgradlew :model:pipeline:generateProto`).\n  * Avoid protobuf field names that conflict with reserved keywords in target languages (e.g., `class` in Java or `output` in Python, as noted in `beam_fn_api.proto` comments).\n\n## Key Abstractions\n\n### Pipeline\nA Pipeline encapsulates the entire data processing task, including reading, transforming, and writing data.\n\n```java\n\u002F\u002F Java\nPipeline p = Pipeline.create(options);\np.apply(...)\n .apply(...)\n .apply(...);\np.run().waitUntilFinish();\n```\n\n```python\n# Python\nwith beam.Pipeline(options=options) as p:\n    (p | 'Read' >> beam.io.ReadFromText('input.txt')\n       | 'Transform' >> beam.Map(process)\n       | 'Write' >> beam.io.WriteToText('output'))\n```\n\n### PCollection\nA distributed dataset that can be bounded (batch) or unbounded (streaming).\n\n#### Properties\n- **Immutable** - Once created, cannot be modified\n- **Distributed** - Elements processed in parallel\n- **May be bounded or unbounded**\n- **Timestamped** - Each element has an event timestamp\n- **Windowed** - Elements assigned to windows\n\n### PTransform\nA data processing operation that transforms PCollections.\n\n```java\n\u002F\u002F Java\nPCollection\u003CString> output = input.apply(MyTransform.create());\n```\n\n```python\n# Python\noutput = input | 'Name' >> beam.ParDo(MyDoFn())\n```\n\n## Core Transforms\n\n### ParDo\nGeneral-purpose parallel processing.\n\n```java\n\u002F\u002F Java\ninput.apply(ParDo.of(new DoFn\u003CString, Integer>() {\n    @ProcessElement\n    public void processElement(@Element String element, OutputReceiver\u003CInteger> out) {\n        out.output(element.length());\n    }\n}));\n```\n\n```python\n# Python\nclass LengthFn(beam.DoFn):\n    def process(self, element):\n        yield len(element)\n\ninput | beam.ParDo(LengthFn())\n# Or simpler:\ninput | beam.Map(len)\n```\n\n### GroupByKey\nGroups elements by key.\n\n```java\nPCollection\u003CKV\u003CString, Integer>> input = ...;\nPCollection\u003CKV\u003CString, Iterable\u003CInteger>>> grouped = input.apply(GroupByKey.create());\n```\n\n### CoGroupByKey\nJoins multiple PCollections by key.\n\n### Combine\nCombines elements (sum, mean, etc.).\n\n```java\n\u002F\u002F Global combine\ninput.apply(Combine.globally(Sum.ofIntegers()));\n\n\u002F\u002F Per-key combine\ninput.apply(Combine.perKey(Sum.ofIntegers()));\n```\n\n### Flatten\nMerges multiple PCollections.\n\n```java\nPCollectionList\u003CString> collections = PCollectionList.of(pc1).and(pc2).and(pc3);\nPCollection\u003CString> merged = collections.apply(Flatten.pCollections());\n```\n\n### Partition\nSplits a PCollection into multiple PCollections.\n\n## Windowing\n\n### Types\n- **Fixed Windows** - Regular, non-overlapping intervals\n- **Sliding Windows** - Overlapping intervals\n- **Session Windows** - Gaps of inactivity define boundaries\n- **Global Window** - All elements in one window (default)\n\n```java\ninput.apply(Window.into(FixedWindows.of(Duration.standardMinutes(5))));\n```\n\n```python\ninput | beam.WindowInto(beam.window.FixedWindows(300))\n```\n\n## Triggers\nControl when results are emitted.\n\n```java\ninput.apply(Window.\u003CT>into(FixedWindows.of(Duration.standardMinutes(5)))\n    .triggering(AfterWatermark.pastEndOfWindow()\n        .withEarlyFirings(AfterProcessingTime.pastFirstElementInPane()\n            .plusDelayOf(Duration.standardMinutes(1))))\n    .withAllowedLateness(Duration.standardHours(1))\n    .accumulatingFiredPanes());\n```\n\n## Side Inputs\nAdditional inputs to ParDo.\n\n```java\nPCollectionView\u003CMap\u003CString, String>> sideInput =\n    lookupTable.apply(View.asMap());\n\nmainInput.apply(ParDo.of(new DoFn\u003CString, String>() {\n    @ProcessElement\n    public void processElement(ProcessContext c) {\n        Map\u003CString, String> lookup = c.sideInput(sideInput);\n        \u002F\u002F Use lookup...\n    }\n}).withSideInputs(sideInput));\n```\n\n## Pipeline Options\nConfigure pipeline execution.\n\n```java\npublic interface MyOptions extends PipelineOptions {\n    @Description(\"Input file\")\n    @Required\n    String getInput();\n    void setInput(String value);\n}\n\nMyOptions options = PipelineOptionsFactory.fromArgs(args).as(MyOptions.class);\n```\n\n## Schema\nStrongly-typed access to structured data.\n\n```java\n@DefaultSchema(AutoValueSchema.class)\n@AutoValue\npublic abstract class User {\n    public abstract String getName();\n    public abstract int getAge();\n}\n\nPCollection\u003CUser> users = ...;\nPCollection\u003CRow> rows = users.apply(Convert.toRows());\n```\n\n## Error Handling\n\n### Dead Letter Queue Pattern\n```java\nTupleTag\u003CString> successTag = new TupleTag\u003C>() {};\nTupleTag\u003CString> failureTag = new TupleTag\u003C>() {};\n\nPCollectionTuple results = input.apply(ParDo.of(new DoFn\u003CString, String>() {\n    @ProcessElement\n    public void processElement(ProcessContext c) {\n        try {\n            c.output(process(c.element()));\n        } catch (Exception e) {\n            c.output(failureTag, c.element());\n        }\n    }\n}).withOutputTags(successTag, TupleTagList.of(failureTag)));\n\nresults.get(successTag).apply(WriteToSuccess());\nresults.get(failureTag).apply(WriteToDeadLetter());\n```\n\n## Cross-Language Pipelines\nUse transforms from other SDKs.\n\n```python\n# Use Java Kafka connector from Python\nfrom apache_beam.io.kafka import ReadFromKafka\n\nresult = pipeline | ReadFromKafka(\n    consumer_config={'bootstrap.servers': 'localhost:9092'},\n    topics=['my-topic']\n)\n```\n\n## Best Practices\n1. **Prefer built-in transforms** over custom DoFns\n2. **Use schemas** for type-safe operations\n3. **Minimize side inputs** for performance\n4. **Handle late data** explicitly\n5. **Test with DirectRunner** before deploying\n6. **Use TestPipeline** for unit tests\n","# Apache Beam Core Concepts\n\n## The Beam Model\nEvolved from Google's MapReduce, FlumeJava, and Millwheel projects. Originally called the \"Dataflow Model.\"\n\n### Protos\n\nThe `\u002Fmodel` directory defines the official, language-agnostic Protocol Buffer (`.proto`) and gRPC service specifications that establish the **Beam Model** and the **Beam Portability Framework**.\n\n#### Why `\u002Fmodel` Exists (Portability & Decoupling)\n\nWithout a standardized model representation, supporting $N$ SDK languages across $M$ execution runners  would require $N \\times M$ separate translation layers. By defining all core pipeline concepts, data encodings, metrics, and worker RPC protocols as Protobuf messages and gRPC services, `\u002Fmodel` acts as the universal lingua franca:\n\n* **SDKs** compile user pipelines into standardized Runner API protobuf graphs.\n\n* **Runners** inspect, optimize, and distribute these graphs without needing SDK-specific language runtimes.\n\n* **Workers (SDK Harnesses)** execute user code (`DoFn`s) and communicate with runners over standardized Fn API gRPC channels.\n\n#### Core Directories & What They Do\n\n1. **`\u002Fmodel\u002Fpipeline` (Runner API & Core Model)**: Defines the SDK- and runner-independent representation of pipelines (`Pipeline`, `Components`, `PTransform`, `PCollection`, `Coder`), timestamps\u002Fconstants, Beam Schemas (`Row`, `Field`), and execution metrics (`MonitoringInfo`).\n2. **`\u002Fmodel\u002Ffn-execution` (Fn API & Provisioning)**: Defines bidirectional gRPC services between runners and worker SDK harnesses for bundle execution (`Control`), element streaming (`Data`), state\u002Ftimer access (`State`), log forwarding (`Logging`), and container initialization (`Provisioning`).\n3. **`\u002Fmodel\u002Fjob-management` (Job, Expansion, & Artifact APIs)**: Defines gRPC interfaces for submitting and monitoring jobs on remote servers (`JobService`), resolving cross-language transforms in remote SDKs (`ExpansionService`), and staging dependency artifacts or container images (`ArtifactService`).\n4. **`\u002Fmodel\u002Finteractive` (Interactive API)**: Defines metadata and stream headers for recording and replaying data in Interactive Beam notebooks.\n\n#### What Agents Need to Pay Special Attention To\n\n* **Conservative Proto Changes**: Proto changes are generally conservative and accepted only when there is a compelling reason and community consensus. Every addition introduces a new obligation that each SDK and runner must support; adding new Beam model elements (portable types, capabilities) increases the compatibility gap between SDK and runner capabilities.\n* **URNs Are the API Contract**: Transforms, coders, windowing strategies, environments, and metrics are bound together by standardized string URNs (e.g., `beam:transform:pardo:v1`, `beam:coder:bytes:v1`). When inspecting or creating transforms across languages, always verify URN mappings and registry handlers in both the SDK and Runner runtimes.\n* **Strict Backward & Wire Compatibility**:\n  * Never renumber, delete, or modify existing field IDs or URN strings in `.proto` files, as they are used across distributed RPC boundaries and persisted checkpoints.\n* **Build System & Naming Collisions**:\n  * Modifying files in `\u002Fmodel` requires re-generating language bindings (e.g., `.\u002Fgradlew :model:pipeline:generateProto`).\n  * Avoid protobuf field names that conflict with reserved keywords in target languages (e.g., `class` in Java or `output` in Python, as noted in `beam_fn_api.proto` comments).\n\n## Key Abstractions\n\n### Pipeline\nA Pipeline encapsulates the entire data processing task, including reading, transforming, and writing data.\n\n```java\n\u002F\u002F Java\nPipeline p = Pipeline.create(options);\np.apply(...)\n .apply(...)\n .apply(...);\np.run().waitUntilFinish();\n```\n\n```python\n# Python\nwith beam.Pipeline(options=options) as p:\n    (p | 'Read' >> beam.io.ReadFromText('input.txt')\n       | 'Transform' >> beam.Map(process)\n       | 'Write' >> beam.io.WriteToText('output'))\n```\n\n### PCollection\nA distributed dataset that can be bounded (batch) or unbounded (streaming).\n\n#### Properties\n- **Immutable** - Once created, cannot be modified\n- **Distributed** - Elements processed in parallel\n- **May be bounded or unbounded**\n- **Timestamped** - Each element has an event timestamp\n- **Windowed** - Elements assigned to windows\n\n### PTransform\nA data processing operation that transforms PCollections.\n\n```java\n\u002F\u002F Java\nPCollection\u003CString> output = input.apply(MyTransform.create());\n```\n\n```python\n# Python\noutput = input | 'Name' >> beam.ParDo(MyDoFn())\n```\n\n## Core Transforms\n\n### ParDo\nGeneral-purpose parallel processing.\n\n```java\n\u002F\u002F Java\ninput.apply(ParDo.of(new DoFn\u003CString, Integer>() {\n    @ProcessElement\n    public void processElement(@Element String element, OutputReceiver\u003CInteger> out) {\n        out.output(element.length());\n    }\n}));\n```\n\n```python\n# Python\nclass LengthFn(beam.DoFn):\n    def process(self, element):\n        yield len(element)\n\ninput | beam.ParDo(LengthFn())\n# Or simpler:\ninput | beam.Map(len)\n```\n\n### GroupByKey\nGroups elements by key.\n\n```java\nPCollection\u003CKV\u003CString, Integer>> input = ...;\nPCollection\u003CKV\u003CString, Iterable\u003CInteger>>> grouped = input.apply(GroupByKey.create());\n```\n\n### CoGroupByKey\nJoins multiple PCollections by key.\n\n### Combine\nCombines elements (sum, mean, etc.).\n\n```java\n\u002F\u002F Global combine\ninput.apply(Combine.globally(Sum.ofIntegers()));\n\n\u002F\u002F Per-key combine\ninput.apply(Combine.perKey(Sum.ofIntegers()));\n```\n\n### Flatten\nMerges multiple PCollections.\n\n```java\nPCollectionList\u003CString> collections = PCollectionList.of(pc1).and(pc2).and(pc3);\nPCollection\u003CString> merged = collections.apply(Flatten.pCollections());\n```\n\n### Partition\nSplits a PCollection into multiple PCollections.\n\n## Windowing\n\n### Types\n- **Fixed Windows** - Regular, non-overlapping intervals\n- **Sliding Windows** - Overlapping intervals\n- **Session Windows** - Gaps of inactivity define boundaries\n- **Global Window** - All elements in one window (default)\n\n```java\ninput.apply(Window.into(FixedWindows.of(Duration.standardMinutes(5))));\n```\n\n```python\ninput | beam.WindowInto(beam.window.FixedWindows(300))\n```\n\n## Triggers\nControl when results are emitted.\n\n```java\ninput.apply(Window.\u003CT>into(FixedWindows.of(Duration.standardMinutes(5)))\n    .triggering(AfterWatermark.pastEndOfWindow()\n        .withEarlyFirings(AfterProcessingTime.pastFirstElementInPane()\n            .plusDelayOf(Duration.standardMinutes(1))))\n    .withAllowedLateness(Duration.standardHours(1))\n    .accumulatingFiredPanes());\n```\n\n## Side Inputs\nAdditional inputs to ParDo.\n\n```java\nPCollectionView\u003CMap\u003CString, String>> sideInput =\n    lookupTable.apply(View.asMap());\n\nmainInput.apply(ParDo.of(new DoFn\u003CString, String>() {\n    @ProcessElement\n    public void processElement(ProcessContext c) {\n        Map\u003CString, String> lookup = c.sideInput(sideInput);\n        \u002F\u002F Use lookup...\n    }\n}).withSideInputs(sideInput));\n```\n\n## Pipeline Options\nConfigure pipeline execution.\n\n```java\npublic interface MyOptions extends PipelineOptions {\n    @Description(\"Input file\")\n    @Required\n    String getInput();\n    void setInput(String value);\n}\n\nMyOptions options = PipelineOptionsFactory.fromArgs(args).as(MyOptions.class);\n```\n\n## Schema\nStrongly-typed access to structured data.\n\n```java\n@DefaultSchema(AutoValueSchema.class)\n@AutoValue\npublic abstract class User {\n    public abstract String getName();\n    public abstract int getAge();\n}\n\nPCollection\u003CUser> users = ...;\nPCollection\u003CRow> rows = users.apply(Convert.toRows());\n```\n\n## Error Handling\n\n### Dead Letter Queue Pattern\n```java\nTupleTag\u003CString> successTag = new TupleTag\u003C>() {};\nTupleTag\u003CString> failureTag = new TupleTag\u003C>() {};\n\nPCollectionTuple results = input.apply(ParDo.of(new DoFn\u003CString, String>() {\n    @ProcessElement\n    public void processElement(ProcessContext c) {\n        try {\n            c.output(process(c.element()));\n        } catch (Exception e) {\n            c.output(failureTag, c.element());\n        }\n    }\n}).withOutputTags(successTag, TupleTagList.of(failureTag)));\n\nresults.get(successTag).apply(WriteToSuccess());\nresults.get(failureTag).apply(WriteToDeadLetter());\n```\n\n## Cross-Language Pipelines\nUse transforms from other SDKs.\n\n```python\n# Use Java Kafka connector from Python\nfrom apache_beam.io.kafka import ReadFromKafka\n\nresult = pipeline | ReadFromKafka(\n    consumer_config={'bootstrap.servers': 'localhost:9092'},\n    topics=['my-topic']\n)\n```\n\n## Best Practices\n1. **Prefer built-in transforms** over custom DoFns\n2. **Use schemas** for type-safe operations\n3. **Minimize side inputs** for performance\n4. **Handle late data** explicitly\n5. **Test with DirectRunner** before deploying\n6. **Use TestPipeline** for unit tests\n",{"name":5,"description":7},"master","aba9e790548a6870a46d2c085c817c2754f4a301",".agent\u002Fskills\u002Fbeam-concepts",4810,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam","https:\u002F\u002Fbeam.apache.org\u002F","https:\u002F\u002Fgithub.com\u002Fapache","https:\u002F\u002Fwww.apache.org\u002F","2026-11-14 06:08:33",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add apache\u002Fbeam --skill beam-concepts",{"tool":51,"command":52},"bunx","bunx skills add apache\u002Fbeam --skill beam-concepts",{"tool":54,"command":55},"pnpm","pnpm dlx skills add apache\u002Fbeam --skill beam-concepts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Fbeam-concepts\u002FSKILL.md",true,[59,65,69,73,77],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"references\u002Fend-to-end-walkthrough.md","REFERENCE","参考文档",11394,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fmvvm-toolkit\u002Freferences\u002Fend-to-end-walkthrough.md",{"path":66,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":67,"sourceHtmlUrl":68},"references\u002Frelaycommand-cookbook.md",6887,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fmvvm-toolkit\u002Freferences\u002Frelaycommand-cookbook.md",{"path":70,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002Fsource-generators.md",9534,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fmvvm-toolkit\u002Freferences\u002Fsource-generators.md",{"path":74,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Ftroubleshooting.md",7171,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fmvvm-toolkit\u002Freferences\u002Ftroubleshooting.md",{"path":78,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fvalidation.md",5840,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fmvvm-toolkit\u002Freferences\u002Fvalidation.md",[82,102,117,133,153,167],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":31},"01M6ACDYBTKYKDP9Z0BQKF7XMZ","yaml-development","Guides YAML SDK development in Apache Beam, including environment setup, testing, and key concepts. Use when working with Beam YAML code in sdks\u002Fpython\u002Fapache_beam\u002Fyaml\u002F.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Fyaml-development\u002FSKILL.md",[],[89,90,91,92,19,93,94,95,96,9,97,28,98,99,100,21,101,30],"development","yaml development","yaml","testing","python","sdk","setup","code","environment","guides","with","environment setup","sdks",{"skillNo":103,"name":23,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":31},"01M6ACDVK2M4QNJ2T0423H23SY","Guides understanding and working with Apache Beam runners (Direct, Dataflow, Flink, Spark, etc.). Use when configuring pipelines for different execution environments or debugging runner-specific issues.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Frunners\u002FSKILL.md",[],[23,19,108,109,110,9,111,112,113,28,29,114,98,99,115,116,30],"spark","debugging","issues","flink","execution","direct","runner","environments","for",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":128,"publishedAt":31},"01M6ACDRVH48A1WBYH9DEETW7F","python-development","Guides Python SDK development in Apache Beam, including environment setup, testing, building, and running pipelines. Use when working with Python code in sdks\u002Fpython\u002F.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Fpython-development\u002FSKILL.md",[123],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[93,129,89,92,19,94,95,96,9,130,97,28,29,98,99,100,131,101,30,132],"python development","python sdk","python code","running",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":144,"publishedAt":31},"01M6ACDPYBMSHSQNCFXVJ7VJW3","license-compliance","Ensures all new files include proper Apache 2.0 license headers. Use when creating any new file in the Apache Beam repository.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Flicense-compliance\u002FSKILL.md",[139],{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[145,146,147,19,9,148,149,28,150,151,30,152],"license","license compliance","compliance","file","repository","files","headers","new",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":31},"01M6ACDM2W664NC4FH95B3NC14","java-development","Guides Java SDK development in Apache Beam, including building, testing, running examples, and understanding the project structure. Use when working with Java code in sdks\u002Fjava\u002F, runners\u002F, or examples\u002Fjava\u002F.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Fjava-development\u002FSKILL.md",[159],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},[89,161,162,92,19,94,163,96,9,23,164,28,165,166,98,99,101,30,132],"java","java development","project structure","examples","structure","project",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":174,"publishedAt":31},"01M6ACDHGVH4F8ADMCFR7T34H8","io-connectors","Guides development and usage of I\u002FO connectors in Apache Beam. Use when working with I\u002FO connectors, creating new connectors, or debugging data source\u002Fsink issues.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fbeam\u002Fblob\u002Fmaster\u002F.agent\u002Fskills\u002Fio-connectors\u002FSKILL.md",[173],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},[175,176,177,19,109,89,110,9,178,28,98,99,179,180,30,152],"connectors","io connectors","io","data","usage","source"]