[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PEXTFVMJRB84DW2D3GQ7NV":3,"skill-same:01M6PEXTFVMJRB84DW2D3GQ7NV":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M6PEXTFVMJRB84DW2D3GQ7NV","push-omc",null,"r3dlex\u002Foh-my-githubcopilot","r3dlex","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F291373160?v=4","01M6PEFNGGBVB7SHAPWXFFX933","01M6PEFNMNKPP8K3C881MDS722",1,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omg\u002Fresources\u002Ftemplates\u002Fskills\u002Fpush-omc\u002FSKILL.md",[],[17,18,19],"push","omc","push omc","2026-11-10 10:12:30",false,"# \u002Fpush-omc — Export OMG Session into OMC (omg → omc)\n\n## Trigger\n- Slash command: `\u002Fpush-omc`\n- Keywords: \"push omc\", \"omc 푸시\", \"omc로 보내기\", \"sync to omc\", \"export to omc\"\n\n## Purpose\nPush the local OMG (`oh-my-githubcopilot`) session into OMC (`oh-my-claudecode`) so work done in GitHub Copilot can continue in Claude Code. Counterpart of `\u002Fresume-claude`. Together they form the v1.4.3 bidirectional bridge (OMG ↔ OMC).\n\n## Workflow\n\n### Step 1 — Detect\nCall `omg_detect_external_session` and find the entry where `source === \"omg\"` (the local session). If `has_checkpoint` is `false`, abort:\n\n> \"OMG 체크포인트가 없습니다. `omg_checkpoint`를 먼저 호출해 현재 상태를 저장해주세요.\"\n\n### Step 2 — Compare\nCall `omg_compare_checkpoints`. Look at `external[].omg_newer_than_external` to decide whether the push will progress real work or just collide.\n\nDisplay:\n```\n현재 OMG 체크포인트: {timestamp}\nOMC 상태:\n  - 마지막 OMC 체크포인트: {external[omc].timestamp or \"없음\"}\n  - OMG가 더 최신: {omg_newer_than_external ? \"예\" : \"아니요\"}\n```\n\nIf OMC is newer (`!omg_newer_than_external && external[omc].timestamp`), warn the user — without `force: true`, files newer on the OMC side will go to `conflicts[]`.\n\n### Step 3 — Confirm\nUse `vscode_askQuestions` to confirm export and gate `force` carefully:\n\n```\nheader: \"push-omc\"\nquestion: \"OMG 세션을 OMC로 푸시하시겠습니까?\"\noptions:\n  - label: \"표준 푸시 (충돌 시 건너뜀)\"\n    description: \".omc\u002F 파일이 더 최신이면 보존하고 conflicts[]에 보고\"\n    recommended: true\n  - label: \"강제 푸시 (--force, .previous.{ISO}.json 백업 생성)\"\n    description: \"OMC 측 변경을 덮어쓰고 회전 백업 3개를 유지\"\n  - label: \"취소\"\nallowFreeformInput: false\n```\n\nStrong-default the standard option. Force mode should be a deliberate user choice — once `.previous.{ISO}.json` rotation hits N=3, older snapshots are pruned.\n\n### Step 4 — Export\nCall `omg_export_external_session({target: \"omc\", force: \u003Cchosen>})`.\n\nPre-flight:\n- The exporter applies a project-identity guard. If the source checkpoint's `workspace_root` ≠ current workspace, it returns `{ success: false, reason: \"workspace_mismatch\" }` BEFORE any file mutation. Surface the error and stop.\n\nComposition (not a blind copy):\n- `.omg\u002Fprd.json` → `.omc\u002Fprd.json`\n- `.omg\u002Fproject-memory.json` → `.omc\u002Fproject-memory.json`\n- `active_modes[]` from `.omg\u002Fstate\u002Fsession-checkpoint.json` → DECOMPOSED into `.omc\u002Fstate\u002F{mode}-state.json` files (inverse of v1.4.0 omc-importer composition)\n- `.omc\u002Fstate\u002Fsession-checkpoint.json` is composed with `source_origin: \"bridged-from-omg\"`, `source_tool: \"copilot\"` (kept for back-compat), `source_session_id`, `workspace_root`, `imported_at`, `imported_summary`. chmod 0o600 best-effort.\n\nAtomicity (AC-22b): the `.omg\u002Fstate\u002Flast-export-token.json` write is the LAST side-effect. If any prior write fails, the token is NOT created — subsequent operations correctly treat the transaction as uncommitted.\n\n### Step 5 — Summarize\nDisplay the export result:\n\n```\n✅ OMC로 푸시 완료\n\n? Export 결과:\n- target: omc\n- session_id: {session_id}\n- exported_files: {exported_files count}개\n- conflicts: {conflicts count}개\n- source_origin: bridged-from-omg\n- workspace_root: {workspace_root}\n\n? 요약:\n{summary}\n```\n\nIf `success === false`:\n- `reason: \"workspace_mismatch\"` → \"워크스페이스가 일치하지 않습니다. expected={expected}, actual={actual}\". 사용자에게 올바른 워크스페이스를 열도록 안내.\n- 그 외 → 원본 에러 메시지 그대로 출력.\n\n### Step 6 — Continue\nAsk the user what to do next:\n```\nheader: \"push-omc-next-action\"\nquestion: \"OMC로 전환하시겠습니까, 아니면 OMG에서 작업을 계속하시겠습니까?\"\noptions:\n  - label: \"OMC로 전환 (Claude Code에서 \u002Fresume-omc 실행 안내)\"\n    recommended: true\n  - label: \"OMG에서 계속 작업\"\n  - label: \"충돌 파일 리뷰\"\n```\n\n## Round-trip Safety\n- The OMC importer (`\u002Fresume-claude` flow) reads the exported checkpoint's `source_origin` and the matching `.omg\u002Fstate\u002Flast-export-token.json`. If both indicate \"this checkpoint came from us\", the importer returns `loop_blocked: true` and does NOT mutate `.omg\u002F`. Set `force: true` on `omg_import_external_session` to bypass when verifying round-trip.\n- Token has no time-based TTL. It invalidates only when the OMC checkpoint's `source_origin` flips to `\"native\"` (OMC wrote a fresh non-bridged checkpoint) OR `source_session_id` no longer matches the token (a newer bridged write replaced it).\n\n## Backup Retention\n- `.omc\u002FX.previous.{ISO}.json` rotates with N=3. Older snapshots are pruned automatically.\n- For unbounded history, `git log -- .omc\u002F` or commit before pushing.\n\n## Error Handling\n- **workspace_mismatch**: surface `expected` vs `actual`, ask user to open the correct workspace.\n- **conflicts[].length > 0**: list affected files; offer to retry with `force: true`.\n- **success: false** with no recognized `reason`: log the raw error and abort — do not retry blindly.\n\n## Notes\n- OMG → OMC is a (mostly) lossless inversion: prd, project-memory, and state files round-trip; provenance fields are translated.\n- OMG → Claude Code direction is deferred to v1.5.x (would require synthesizing valid `tool_use`\u002F`tool_result` UUID chains compatible with Claude Code's resume-by-id contract).\n- Do not run OMC and OMG concurrently against the same workspace — the round-trip guard handles ordered hand-off, not simultaneous writes.\n",{},"main","55294682936bc69473eba70e93ffa88ede018e81","vscode-omg\u002Fresources\u002Ftemplates\u002Fskills\u002Fpush-omc",0,"https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot","https:\u002F\u002Fgithub.com\u002Fr3dlex","2026-10-31 18:57:35",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add r3dlex\u002Foh-my-githubcopilot --skill push-omc",{"tool":37,"command":38},"bunx","bunx skills add r3dlex\u002Foh-my-githubcopilot --skill push-omc",{"tool":40,"command":41},"pnpm","pnpm dlx skills add r3dlex\u002Foh-my-githubcopilot --skill push-omc","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omg\u002Fresources\u002Ftemplates\u002Fskills\u002Fpush-omc\u002FSKILL.md",true,[],[46,52,58,64,70,78],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":20},"01M6PF2CTFS0AEXQXF2NFYT8J2","wiki","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omp\u002Fresources\u002Ftemplates\u002F.copilot\u002Fskills\u002Fwiki\u002FSKILL.md",[],[48],{"skillNo":53,"name":54,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":20},"01M6PF2BFXJ97M6NKH7N42XZVZ","ultrawork","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omp\u002Fresources\u002Ftemplates\u002F.copilot\u002Fskills\u002Fultrawork\u002FSKILL.md",[],[54],{"skillNo":59,"name":60,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":20},"01M6PF2A38Y1CE5BVJ5HMTMBP6","trace","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omp\u002Fresources\u002Ftemplates\u002F.copilot\u002Fskills\u002Ftrace\u002FSKILL.md",[],[60],{"skillNo":65,"name":66,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":20},"01M6PF28P7S19AK5XJA41WS9V8","team","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omp\u002Fresources\u002Ftemplates\u002F.copilot\u002Fskills\u002Fteam\u002FSKILL.md",[],[66],{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":20},"01M6PF278EADT8W3EWDYA3C2H0","swe-bench","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omp\u002Fresources\u002Ftemplates\u002F.copilot\u002Fskills\u002Fswe-bench\u002FSKILL.md",[],[76,77],"SWE","swe bench",{"skillNo":79,"name":80,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":20},"01M6PF25XW1TMP5Z1N89ZVJQDY","swarm","https:\u002F\u002Fgithub.com\u002Fr3dlex\u002Foh-my-githubcopilot\u002Fblob\u002Fmain\u002Fvscode-omp\u002Fresources\u002Ftemplates\u002F.copilot\u002Fskills\u002Fswarm\u002FSKILL.md",[],[80]]