[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BXS3RF677BYZPD2E6HSR26":3,"skill-same:01M6BXS3RF677BYZPD2E6HSR26":68},{"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":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":67},"01M6BXS3RF677BYZPD2E6HSR26","upgrade-genkit",null,"Realign the genkit_flutter_edge_ai \u002F genkit_hybrid packages when flutter_edge_ai's core API changes or when `genkit` itself publishes a breaking version — discover changes, fix compilation, support new features, update fakes\u002Ftests, the codelab and the site, bump version. Monorepo-aware.","DenisovAV\u002Fflutter_edge_ai","DenisovAV","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9622910?v=4","01M6BXRH02KTWK364FYEH4AECE","Sasha Denisov","01M6BXRH45KJKJ712H82EV47AS",660,"MIT","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fupgrade-genkit\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"upgrade genkit","upgrade","genkit","new","tests","true","hybrid","features","when","fix","bump","monorepo","discover","bump version","api changes","update","support","packages","api","edge","core","2026-11-10 10:12:30",false,"---\nname: upgrade-genkit\ndescription: Realign the genkit_flutter_edge_ai \u002F genkit_hybrid packages when flutter_edge_ai's core API changes or when `genkit` itself publishes a breaking version — discover changes, fix compilation, support new features, update fakes\u002Ftests, the codelab and the site, bump version. Monorepo-aware.\nuser_invocable: true\n---\n\n# Upgrade Genkit packages to the current flutter_edge_ai API\n\nThe Genkit integration packages (`packages\u002Fgenkit_flutter_edge_ai`, `packages\u002Fgenkit_hybrid`)\nwrap flutter_edge_ai's public API. When that API changes, they must be realigned or\nthey break. In the **monorepo** they consume flutter_edge_ai as an in-workspace\npath dependency, so a core change can break them in the same commit — run this\nwhenever a PR changes the public `InferenceModel` \u002F `InferenceChat` \u002F\n`EmbeddingModel` \u002F `Message` \u002F `ModelResponse` \u002F enum surface.\n\nFollow these 5 phases sequentially. Ask the user before deciding which new\nfeatures to support (Phase 3).\n\n> Paths below are relative to the repo root. Core package =\n> `packages\u002Fflutter_edge_ai`; genkit package = `packages\u002Fgenkit_flutter_edge_ai`\n> (mirror for `genkit_hybrid`). `REPO_ROOT` = monorepo root,\n> `PKG_DIR=packages\u002Fgenkit_flutter_edge_ai`, `EXAMPLE_DIR=$PKG_DIR\u002Fexample`.\n\n## Phase 1: Reconnaissance\n\n1. Identify what changed in the core public API. In the monorepo flutter_edge_ai\n   is a path dep (not pub), so don't rely on `dart pub outdated` — instead read\n   the diff \u002F CHANGELOG of `packages\u002Fflutter_edge_ai`:\n   - `git log --oneline -- packages\u002Fflutter_edge_ai\u002Flib` (the public libraries at `lib\u002F*.dart` plus everything under `lib\u002Fsrc`)\n   - `packages\u002Fflutter_edge_ai\u002FCHANGELOG.md` (top entry)\n2. Summarize for the user:\n   - **Breaking changes** (removed\u002Frenamed APIs, changed signatures)\n   - **New APIs** (new parameters, methods, enums, classes)\n   - **Bug fixes** \u002F **Deprecations**\n3. `melos bootstrap` (or `dart pub get` in `PKG_DIR` + `EXAMPLE_DIR`).\n\n## Phase 2: Fix Compilation\n\n1. `cd packages\u002Fgenkit_flutter_edge_ai && dart analyze` (repeat for `genkit_hybrid`).\n2. Fix all compilation errors. Files that depend on flutter_edge_ai's API:\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_runtime.dart` — `FlutterEdgeAi.getActiveModel()`, `getActiveEmbedder()` signatures\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_model.dart` — `InferenceModel.openChat()` signature, `ModelResponse` pattern matching, `InferenceChat` methods\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_embedder.dart` — `EmbeddingModel.embedAll()`, `PreferredBackend` enum\n   - [ ] `lib\u002Fsrc\u002Fconverters\u002Frequest_converter.dart` — `Message` constructors (`.withImage`, `.withAudio`, `.toolCall`, `.toolResponse`)\n   - [ ] `lib\u002Fsrc\u002Fconverters\u002Fresponse_converter.dart` — `ModelResponse` subtypes (`TextResponse`, `FunctionCallResponse`, `ParallelFunctionCallResponse`, `ThinkingResponse`)\n   - [ ] `lib\u002Fsrc\u002Fconverters\u002Ftool_converter.dart` — `Tool` constructor\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_plugin.dart` — `ModelType`, `ModelFileType` enums\n   - [ ] `test\u002Fsrc\u002Ffake_runtime.dart` — `FakeInferenceModel`, `FakeInferenceChat`, `FakeEmbeddingModel` **must** match upstream abstract-class signatures (see genkit `AGENTS.md`)\n3. Repeat `dart analyze` until clean (0 issues).\n\n## Phase 3: Support New Features\n\nBased on Phase 1, decide with the user which new APIs to support. Typical integration points:\n\n### New parameter in `openChat()` \u002F `openSession()`\n1. Add field to `$FlutterEdgeAiModelOptions` in `lib\u002Fsrc\u002Fflutter_edge_ai_options.dart`\n2. Regenerate `lib\u002Fsrc\u002Fflutter_edge_ai_options.g.dart`: `dart pub global run build_runner build --delete-conflicting-outputs` in `PKG_DIR` (see the package `AGENTS.md`; `dart pub global activate build_runner` once). Never hand-edit it.\n3. Extract from config + pass in `lib\u002Fsrc\u002Fflutter_edge_ai_model.dart` (`_prepare` validates and converts; `_generate` passes it to `openChat`)\n4. Update `FakeInferenceModel.openChat()` in `test\u002Fsrc\u002Ffake_runtime.dart` (add param, store in `last*` field for assertions)\n\n### New enum value (e.g. `ModelFileType`)\n- Update comments in `lib\u002Fsrc\u002Fflutter_edge_ai_plugin.dart` (`FlutterEdgeAiModelConfig.fileType`)\n\n### New method on `InferenceChat` \u002F `InferenceModel`\n- Add override in `FakeInferenceChat` \u002F `FakeInferenceModel` in `test\u002Fsrc\u002Ffake_runtime.dart`\n\n### Changed model capabilities\n- Update `kFlutterEdgeAiModelSupports` in `lib\u002Fsrc\u002Fflutter_edge_ai_model.dart`; `list()` in `flutter_edge_ai_plugin.dart` only references it\n\n### Changed message handling\n- Update converters in `lib\u002Fsrc\u002Fconverters\u002F`; update `extractSystemInstruction()` if system-message handling changed\n\n**IMPORTANT:** `*.g.dart` here is generated by `schemantic_builder` (`\u002F\u002F GENERATED CODE - DO NOT MODIFY BY HAND`). Regenerate it after any schema change; a hand edit drifts from the shape the generator produces.\n\n## Phase 4: Tests and Review\n\n1. Update existing tests that verify changed behavior.\n2. Add tests for each new feature from Phase 3.\n3. `flutter test` (in `PKG_DIR`) — all must pass.\n4. Run `\u002Freview-pr` for comprehensive review; fix what it surfaces.\n\n## Phase 5: Finalize\n\n1. **Bump version** in `PKG_DIR\u002Fpubspec.yaml` (minor for breaking behavior, patch for fixes\u002Fnon-breaking additions).\n2. **Update `PKG_DIR\u002FCHANGELOG.md`** (new section at top: breaking `**Breaking**:` \u002F new features \u002F fixes).\n3. **Update `PKG_DIR\u002FREADME.md`** (options table, known limitations, quick-start if usage changed).\n4. Verify: `dart analyze && flutter test && dart pub publish --dry-run` (all clean).\n5. The release itself goes through the **`release` skill** (genkit packages release in lockstep with the monorepo) — do not publish standalone.\n\n## When `genkit` itself releases a breaking version\n\nThe phases above assume the change came from flutter_edge_ai. Genkit 1.0.0\n(2026-10-07) was the other trigger: it shipped with every Genkit Dart plugin\n(`genkit_google_genai`, `genkit_vertexai`, `genkit_firebase_ai`, …) requiring\n`genkit ^1.0.0`, so our packages could not be installed next to any current\ncloud plugin until they moved too.\n\n1. Read the upstream CHANGELOG back to the version we pin:\n   `dart pub cache add genkit --version \u003Cnew>`, then\n   `~\u002F.pub-cache\u002Fhosted\u002Fpub.dev\u002Fgenkit-\u003Cnew>\u002FCHANGELOG.md`. Split it into\n   compile breaks, which the analyzer finds, and behaviour changes, which it\n   does not. Check every behaviour change against our code, the apps and the\n   docs. The one 1.0 brought: a model error no longer throws out of\n   `ai.generate` \u002F `generateStream` but comes back with\n   `finishReason: FinishReason.failed` (0.17, #413). It also turns tests\n   with negative assertions (`isNot(contains(...))`, `lessThan(n)`) into\n   tests that pass on a failed generation, so make them assert\n   `FinishReason.stop` first. Schema instructions never reached the prompt by\n   default, not under 0.16 either; 1.0 adds the opt-in\n   `simulateConstrainedGeneration()` middleware (#519). New exports can\n   collide with `flutter_edge_ai`'s: 1.0's `ToolChoice` makes\n   `ToolChoice.none` an `ambiguous_import` in any file importing both, so\n   compile every snippet on the site against both imports.\n2. Bump `genkit` in both packages and in `genkit_flutter_edge_ai\u002Fexample`.\n   `schemantic` and `schemantic_builder` move with it (genkit 1.0 needs\n   schemantic ^1.0.0).\n3. Regenerate `lib\u002Fsrc\u002Fflutter_edge_ai_options.g.dart` with\n   `dart pub global run build_runner build --delete-conflicting-outputs` and\n   diff it: the option list must not change, only the generated shape.\n4. `flutter analyze`, fix, `flutter test` in both packages. Do not run\n   `dart format` over a whole package: many files predate the current\n   formatter and would be restyled. Format only the files you edited, and only\n   if they were formatted before.\n5. Update what the analyzer never sees, because it sits outside the workspace:\n   - the codelab `codelabs\u002Fhybrid-ai-flutter-genkit\u002F`: every step's pubspec\n     (`step_00_starter` carries the pins as comments) and README; the\n     generate calls (`lib\u002Fservices\u002F*_ai_service.dart` in steps 01–02,\n     `lib\u002Fscreens\u002Fchat_screen.dart` in 03–05 and `complete`); and\n     `lib\u002Fservices\u002Fai_engine.dart` in 03–05 and `complete`, which wraps a model\n     the way genkit_hybrid calls a branch. `genkit_google_genai` moves with\n     genkit, so bump it there. Check the steps with a temporary\n     `pubspec_overrides.yaml` copied from `tool\u002Fcheck_codelabs.sh` and delete\n     it afterwards, or run `CODELAB_USE_LOCAL_PACKAGES=1 tool\u002Fcheck_codelabs.sh`,\n     which writes and removes them itself but checks every codelab. Codelab CI\n     runs `flutter analyze` with infos fatal and checks formatting.\n   - the genkit example app (`example\u002Flib\u002Fapp_state.dart` calls `generate`).\n   - the codelab page `website\u002Fcodelabs\u002Fhybrid-ai-flutter-genkit\u002Findex.md`,\n     which repeats the step code, `website\u002Fcontent\u002Fdocs\u002Fgenkit.md`, both\n     package READMEs (their install snippets name `genkit:`) and dartdoc\n     samples: grep them for every removed or renamed symbol.\n6. Version: a new major of a required dependency is a minor bump for a 0.x\n   package, even when our own API is unchanged. Update AGENTS.md\n   \"Current Version\".\n7. Ship it as one PR with the version bumps, the site and the codelab (release\n   skill rule), and publish right after the merge: the site deploys on merge\n   and its pins name the new versions. Each package's README must change in\n   that PR, or the release docs guard blocks its publish after a squash merge.\n   After publishing, dispatch the Codelabs workflow on main (release skill,\n   step 10b): until then it resolves the old published packages and fails.\n","# Upgrade Genkit packages to the current flutter_edge_ai API\n\nThe Genkit integration packages (`packages\u002Fgenkit_flutter_edge_ai`, `packages\u002Fgenkit_hybrid`)\nwrap flutter_edge_ai's public API. When that API changes, they must be realigned or\nthey break. In the **monorepo** they consume flutter_edge_ai as an in-workspace\npath dependency, so a core change can break them in the same commit — run this\nwhenever a PR changes the public `InferenceModel` \u002F `InferenceChat` \u002F\n`EmbeddingModel` \u002F `Message` \u002F `ModelResponse` \u002F enum surface.\n\nFollow these 5 phases sequentially. Ask the user before deciding which new\nfeatures to support (Phase 3).\n\n> Paths below are relative to the repo root. Core package =\n> `packages\u002Fflutter_edge_ai`; genkit package = `packages\u002Fgenkit_flutter_edge_ai`\n> (mirror for `genkit_hybrid`). `REPO_ROOT` = monorepo root,\n> `PKG_DIR=packages\u002Fgenkit_flutter_edge_ai`, `EXAMPLE_DIR=$PKG_DIR\u002Fexample`.\n\n## Phase 1: Reconnaissance\n\n1. Identify what changed in the core public API. In the monorepo flutter_edge_ai\n   is a path dep (not pub), so don't rely on `dart pub outdated` — instead read\n   the diff \u002F CHANGELOG of `packages\u002Fflutter_edge_ai`:\n   - `git log --oneline -- packages\u002Fflutter_edge_ai\u002Flib` (the public libraries at `lib\u002F*.dart` plus everything under `lib\u002Fsrc`)\n   - `packages\u002Fflutter_edge_ai\u002FCHANGELOG.md` (top entry)\n2. Summarize for the user:\n   - **Breaking changes** (removed\u002Frenamed APIs, changed signatures)\n   - **New APIs** (new parameters, methods, enums, classes)\n   - **Bug fixes** \u002F **Deprecations**\n3. `melos bootstrap` (or `dart pub get` in `PKG_DIR` + `EXAMPLE_DIR`).\n\n## Phase 2: Fix Compilation\n\n1. `cd packages\u002Fgenkit_flutter_edge_ai && dart analyze` (repeat for `genkit_hybrid`).\n2. Fix all compilation errors. Files that depend on flutter_edge_ai's API:\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_runtime.dart` — `FlutterEdgeAi.getActiveModel()`, `getActiveEmbedder()` signatures\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_model.dart` — `InferenceModel.openChat()` signature, `ModelResponse` pattern matching, `InferenceChat` methods\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_embedder.dart` — `EmbeddingModel.embedAll()`, `PreferredBackend` enum\n   - [ ] `lib\u002Fsrc\u002Fconverters\u002Frequest_converter.dart` — `Message` constructors (`.withImage`, `.withAudio`, `.toolCall`, `.toolResponse`)\n   - [ ] `lib\u002Fsrc\u002Fconverters\u002Fresponse_converter.dart` — `ModelResponse` subtypes (`TextResponse`, `FunctionCallResponse`, `ParallelFunctionCallResponse`, `ThinkingResponse`)\n   - [ ] `lib\u002Fsrc\u002Fconverters\u002Ftool_converter.dart` — `Tool` constructor\n   - [ ] `lib\u002Fsrc\u002Fflutter_edge_ai_plugin.dart` — `ModelType`, `ModelFileType` enums\n   - [ ] `test\u002Fsrc\u002Ffake_runtime.dart` — `FakeInferenceModel`, `FakeInferenceChat`, `FakeEmbeddingModel` **must** match upstream abstract-class signatures (see genkit `AGENTS.md`)\n3. Repeat `dart analyze` until clean (0 issues).\n\n## Phase 3: Support New Features\n\nBased on Phase 1, decide with the user which new APIs to support. Typical integration points:\n\n### New parameter in `openChat()` \u002F `openSession()`\n1. Add field to `$FlutterEdgeAiModelOptions` in `lib\u002Fsrc\u002Fflutter_edge_ai_options.dart`\n2. Regenerate `lib\u002Fsrc\u002Fflutter_edge_ai_options.g.dart`: `dart pub global run build_runner build --delete-conflicting-outputs` in `PKG_DIR` (see the package `AGENTS.md`; `dart pub global activate build_runner` once). Never hand-edit it.\n3. Extract from config + pass in `lib\u002Fsrc\u002Fflutter_edge_ai_model.dart` (`_prepare` validates and converts; `_generate` passes it to `openChat`)\n4. Update `FakeInferenceModel.openChat()` in `test\u002Fsrc\u002Ffake_runtime.dart` (add param, store in `last*` field for assertions)\n\n### New enum value (e.g. `ModelFileType`)\n- Update comments in `lib\u002Fsrc\u002Fflutter_edge_ai_plugin.dart` (`FlutterEdgeAiModelConfig.fileType`)\n\n### New method on `InferenceChat` \u002F `InferenceModel`\n- Add override in `FakeInferenceChat` \u002F `FakeInferenceModel` in `test\u002Fsrc\u002Ffake_runtime.dart`\n\n### Changed model capabilities\n- Update `kFlutterEdgeAiModelSupports` in `lib\u002Fsrc\u002Fflutter_edge_ai_model.dart`; `list()` in `flutter_edge_ai_plugin.dart` only references it\n\n### Changed message handling\n- Update converters in `lib\u002Fsrc\u002Fconverters\u002F`; update `extractSystemInstruction()` if system-message handling changed\n\n**IMPORTANT:** `*.g.dart` here is generated by `schemantic_builder` (`\u002F\u002F GENERATED CODE - DO NOT MODIFY BY HAND`). Regenerate it after any schema change; a hand edit drifts from the shape the generator produces.\n\n## Phase 4: Tests and Review\n\n1. Update existing tests that verify changed behavior.\n2. Add tests for each new feature from Phase 3.\n3. `flutter test` (in `PKG_DIR`) — all must pass.\n4. Run `\u002Freview-pr` for comprehensive review; fix what it surfaces.\n\n## Phase 5: Finalize\n\n1. **Bump version** in `PKG_DIR\u002Fpubspec.yaml` (minor for breaking behavior, patch for fixes\u002Fnon-breaking additions).\n2. **Update `PKG_DIR\u002FCHANGELOG.md`** (new section at top: breaking `**Breaking**:` \u002F new features \u002F fixes).\n3. **Update `PKG_DIR\u002FREADME.md`** (options table, known limitations, quick-start if usage changed).\n4. Verify: `dart analyze && flutter test && dart pub publish --dry-run` (all clean).\n5. The release itself goes through the **`release` skill** (genkit packages release in lockstep with the monorepo) — do not publish standalone.\n\n## When `genkit` itself releases a breaking version\n\nThe phases above assume the change came from flutter_edge_ai. Genkit 1.0.0\n(2026-10-07) was the other trigger: it shipped with every Genkit Dart plugin\n(`genkit_google_genai`, `genkit_vertexai`, `genkit_firebase_ai`, …) requiring\n`genkit ^1.0.0`, so our packages could not be installed next to any current\ncloud plugin until they moved too.\n\n1. Read the upstream CHANGELOG back to the version we pin:\n   `dart pub cache add genkit --version \u003Cnew>`, then\n   `~\u002F.pub-cache\u002Fhosted\u002Fpub.dev\u002Fgenkit-\u003Cnew>\u002FCHANGELOG.md`. Split it into\n   compile breaks, which the analyzer finds, and behaviour changes, which it\n   does not. Check every behaviour change against our code, the apps and the\n   docs. The one 1.0 brought: a model error no longer throws out of\n   `ai.generate` \u002F `generateStream` but comes back with\n   `finishReason: FinishReason.failed` (0.17, #413). It also turns tests\n   with negative assertions (`isNot(contains(...))`, `lessThan(n)`) into\n   tests that pass on a failed generation, so make them assert\n   `FinishReason.stop` first. Schema instructions never reached the prompt by\n   default, not under 0.16 either; 1.0 adds the opt-in\n   `simulateConstrainedGeneration()` middleware (#519). New exports can\n   collide with `flutter_edge_ai`'s: 1.0's `ToolChoice` makes\n   `ToolChoice.none` an `ambiguous_import` in any file importing both, so\n   compile every snippet on the site against both imports.\n2. Bump `genkit` in both packages and in `genkit_flutter_edge_ai\u002Fexample`.\n   `schemantic` and `schemantic_builder` move with it (genkit 1.0 needs\n   schemantic ^1.0.0).\n3. Regenerate `lib\u002Fsrc\u002Fflutter_edge_ai_options.g.dart` with\n   `dart pub global run build_runner build --delete-conflicting-outputs` and\n   diff it: the option list must not change, only the generated shape.\n4. `flutter analyze`, fix, `flutter test` in both packages. Do not run\n   `dart format` over a whole package: many files predate the current\n   formatter and would be restyled. Format only the files you edited, and only\n   if they were formatted before.\n5. Update what the analyzer never sees, because it sits outside the workspace:\n   - the codelab `codelabs\u002Fhybrid-ai-flutter-genkit\u002F`: every step's pubspec\n     (`step_00_starter` carries the pins as comments) and README; the\n     generate calls (`lib\u002Fservices\u002F*_ai_service.dart` in steps 01–02,\n     `lib\u002Fscreens\u002Fchat_screen.dart` in 03–05 and `complete`); and\n     `lib\u002Fservices\u002Fai_engine.dart` in 03–05 and `complete`, which wraps a model\n     the way genkit_hybrid calls a branch. `genkit_google_genai` moves with\n     genkit, so bump it there. Check the steps with a temporary\n     `pubspec_overrides.yaml` copied from `tool\u002Fcheck_codelabs.sh` and delete\n     it afterwards, or run `CODELAB_USE_LOCAL_PACKAGES=1 tool\u002Fcheck_codelabs.sh`,\n     which writes and removes them itself but checks every codelab. Codelab CI\n     runs `flutter analyze` with infos fatal and checks formatting.\n   - the genkit example app (`example\u002Flib\u002Fapp_state.dart` calls `generate`).\n   - the codelab page `website\u002Fcodelabs\u002Fhybrid-ai-flutter-genkit\u002Findex.md`,\n     which repeats the step code, `website\u002Fcontent\u002Fdocs\u002Fgenkit.md`, both\n     package READMEs (their install snippets name `genkit:`) and dartdoc\n     samples: grep them for every removed or renamed symbol.\n6. Version: a new major of a required dependency is a minor bump for a 0.x\n   package, even when our own API is unchanged. Update AGENTS.md\n   \"Current Version\".\n7. Ship it as one PR with the version bumps, the site and the codelab (release\n   skill rule), and publish right after the merge: the site deploys on merge\n   and its pins name the new versions. Each package's README must change in\n   that PR, or the release docs guard blocks its publish after a squash merge.\n   After publishing, dispatch the Codelabs workflow on main (release skill,\n   step 10b): until then it resolves the old published packages and fails.\n",{"name":5,"description":7,"user_invocable":45},true,"main","413ec57cb3e991481b0a91eb658129bf385387ee",".claude\u002Fskills\u002Fupgrade-genkit",179,"https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai","https:\u002F\u002Fflutteredge.ai","https:\u002F\u002Fgithub.com\u002FDenisovAV","Sasha is Flutter, Dart, Firebase and AI GDE, Co-organizer of Flutter Berlin Community, Expert in On-Device AI","2026-11-12 18:40:39",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":45},[57,60,63],{"tool":58,"command":59},"npx","npx skills add DenisovAV\u002Fflutter_edge_ai --skill upgrade-genkit",{"tool":61,"command":62},"bunx","bunx skills add DenisovAV\u002Fflutter_edge_ai --skill upgrade-genkit",{"tool":64,"command":65},"pnpm","pnpm dlx skills add DenisovAV\u002Fflutter_edge_ai --skill upgrade-genkit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fupgrade-genkit\u002FSKILL.md",[],[69,84,96,112,130,143],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":80,"publishedAt":40},"01M6BXTT3TADZ7NN5RY79ZZKDR","send-email","Send an email.","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002Fpackages\u002Fflutter_edge_ai_agent\u002Fassets\u002Fskills\u002Fsend-email\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[81,82,83],"send","send email","email",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":40},"01M6BXTQPW2BAVZ2SRVTMFF9FA","query-wikipedia","Query summary from Wikipedia for a given topic.","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002Fpackages\u002Fflutter_edge_ai_agent\u002Fassets\u002Fskills\u002Fquery-wikipedia\u002FSKILL.md",[],[91,92,93,94,95],"wikipedia","query","query wikipedia","for","summary",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":107,"publishedAt":40},"01M6BXTN6C4R4FZ5T9GRNY5MFG","qr-code","Generates a QR code for the given url.","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002Fpackages\u002Fflutter_edge_ai_agent\u002Fassets\u002Fskills\u002Fqr-code\u002FSKILL.md",[102],{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[108,109,110,94,111],"qr","qr code","code","URL",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":40},"01M6BXTJXNJNW59BV5JM3V9YZD","kitchen-adventure","Act as a dungeon master for a text-based adventure set in a world where everyone is a sentient kitchen appliance. Trigger when user says \"start kitchen adventure\".","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002Fpackages\u002Fflutter_edge_ai_agent\u002Fassets\u002Fskills\u002Fkitchen-adventure\u002FSKILL.md",[],[119,27,120,94,121,122,123,124,125,126,127,128,129],"kitchen adventure","dungeon master","trigger","as","act","world","master","user","text","SET","start",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":40},"01M6BXTGEPGG025VBEQKPJZB8S","interactive-map","Show an interactive map view for the given location.","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002Fpackages\u002Fflutter_edge_ai_agent\u002Fassets\u002Fskills\u002Finteractive-map\u002FSKILL.md",[],[137,138,139,140,141,142,94],"interactive map","interactive","map","view","show","location",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":40},"01M6BXTED45RFKX4EYF9BSWC7H","get-current-time","Get the user's current local date, time, and day of the week.","https:\u002F\u002Fgithub.com\u002FDenisovAV\u002Fflutter_edge_ai\u002Fblob\u002Fmain\u002Fpackages\u002Fflutter_edge_ai_agent\u002Fassets\u002Fskills\u002Fget-current-time\u002FSKILL.md",[],[150,151,152,153,126,154],"current time","get current time","time","get","local"]