[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71E15THM10YF7NEM0F8Y14R":3,"skill-same:01M71E15THM10YF7NEM0F8Y14R":64},{"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":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M71E15THM10YF7NEM0F8Y14R","resolve-conflicts",null,"Resolve HQ Sync conflicts by choosing local, cloud, or discard.","indigoai-us\u002Fhq-core","indigoai-us","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F122242446?v=4","01M71DTQ5NGD10GT1Z7E6XKWC5","HQ","01M71DTQ6BKSYYBNC9RAKT3YDK",94,"MIT","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresolve-conflicts\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"conflicts","resolve conflicts","hq sync","read","write","edit","sync","local","cloud","Bash","2026-11-10 10:12:30",false,"---\nname: resolve-conflicts\ndescription: Resolve HQ Sync conflicts by choosing local, cloud, or discard.\nallowed-tools: Read, Write, Edit, Bash, AskUserQuestion\n---\n\n# \u002Fresolve-conflicts\n\nInteractive conflict resolution for HQ Sync. When two machines (or two users) edit the same file and sync detects divergence, both versions land on disk: the *original path* keeps the local version, and a `.conflict-\u003Ctimestamp>-\u003Cmachine>.\u003Cext>` file holds the cloud's version. This command walks the user through each pending conflict and applies their decision.\n\n**Note on auto-merge:** the `@indigoai-us\u002Fhq-cloud` sync-runner may now auto-merge clean, non-overlapping text-file conflicts on the **pull** path when a baseline is available — those pull conflicts never reach this index or this skill. What still lands here includes: pull conflicts the runner could *not* safely auto-merge (overlapping edits, binary\u002Foversized files, safety-only conflicts, or divergence with no baseline), and **push-side** conflicts (never auto-merged; with default `--direction both` \u002F `--on-conflict keep`, the cloud version is mirrored to a sidecar). Resolution here therefore stays two-way (local vs. cloud) for whatever lands in the queue; this skill does not implement or duplicate any three-way merge logic itself.\n\n## What you do\n\n### Step 1 — Locate and read the index\n\nRead `~\u002FHQ\u002F.hq-conflicts\u002Findex.json`. The exact HQ folder path comes from `~\u002F.hq\u002Fmenubar.json` `hqPath` (and falls back per the resolve-hq-folder discovery chain). If the file doesn't exist OR the `conflicts` array is empty, tell the user \"No conflicts pending — your local copy is in sync with the cloud\" and stop.\n\nThe index schema:\n\n```json\n{\n  \"version\": 1,\n  \"conflicts\": [\n    {\n      \"id\": \"...\",\n      \"originalPath\": \"core\u002Fknowledge\u002Fnotes.md\",\n      \"conflictPath\": \"core\u002Fknowledge\u002Fnotes.md.conflict-2026-04-27T22-05-14Z-abc123.md\",\n      \"detectedAt\": \"2026-04-27T22:05:14Z\",\n      \"side\": \"pull\" | \"push\",\n      \"machineId\": \"abc123\",\n      \"localHash\": \"...\",\n      \"remoteHash\": \"...\",\n      \"remoteVersionId\": \"...\",\n      \"lastKnownVersionId\": \"...\"\n    }\n  ]\n}\n```\n\n### Step 2 — Summarize the queue\n\nTell the user how many conflicts are pending, grouped by top-level folder. Example:\n\n```\n3 conflicts pending:\n  core\u002Fknowledge\u002F  (2 files)\n  personal\u002Fprojects\u002Ffoo\u002F  (1 file)\n\nWalking through them oldest-first.\n```\n\n### Step 3 — Walk each conflict (oldest detectedAt first)\n\nFor each entry:\n\n1. Read both files (Read on `originalPath` and `conflictPath`, both relative to HQ folder).\n2. Show the user a short preview: file path, sizes of both versions, and a unified diff (use `Bash` with `diff -u \u003Clocal> \u003Ccloud>` if both are reasonable size, otherwise just first 30 lines of each).\n3. Ask: which version to keep?\n   - **`l` \u002F `local`** — keep the local copy at `originalPath`. Delete the conflict file. (Cloud's version is discarded — it's still in S3 versioning history if recovery is ever needed.)\n   - **`c` \u002F `cloud`** — overwrite local with the cloud copy. Use Bash `mv \u003CconflictPath> \u003CoriginalPath>` to atomically replace.\n   - **`m` \u002F `merge`** — open both files for the user to manually merge. Use Bash `code -d \u003Clocal> \u003Ccloud>` (VS Code diff) or fall back to `open \u003Clocal> \u003Ccloud>`. Wait for the user to confirm they're done with the merge, then ask again (or accept that they've manually resolved → delete the conflict file).\n   - **`s` \u002F `skip`** — leave both files in place, move to next conflict. Index entry stays.\n   - **`q` \u002F `quit`** — stop walking, exit.\n\n4. After applying the resolution (except skip\u002Fquit\u002Fmerge-pending), remove the index entry. Re-write `~\u002FHQ\u002F.hq-conflicts\u002Findex.json` atomically (write to `.tmp`, then rename).\n\n### Step 4 — Final summary\n\nTell the user how many conflicts were resolved this session, how many were skipped, and what's left:\n\n```\nResolved 2 conflicts (1 kept local, 1 took cloud).\n1 conflict skipped — run `\u002Fresolve-conflicts` again to revisit.\n```\n\nIf there are still pending conflicts, suggest the user re-run sync afterwards so the resolved files propagate to the cloud cleanly.\n\n## Edge cases\n\n- **`conflictPath` doesn't exist on disk but is in the index**: the file was probably already deleted\u002Fresolved manually. Remove the index entry and continue.\n- **`originalPath` doesn't exist**: the user deleted the local file. Treat the conflict file as the only remaining copy — ask \"the original file is gone; keep the cloud version (move to original) or discard?\"\n- **Index file is corrupt JSON**: tell the user, don't attempt repair. Suggest checking `~\u002FHQ\u002F.hq-conflicts\u002Findex.json` manually or restoring from a backup.\n- **Binary files (image, PDF)**: don't attempt diff. Just show file sizes + offer to open both in their default app via `open`.\n- **No editor available for merge**: fall back to `open` (default app) for both files.\n\n## Don't\n\n- Don't try to do 3-way\u002Fdiff3 merges yourself — that logic lives in the sync-runner (`@indigoai-us\u002Fhq-cloud`) on the pull path, and is out of scope for this skill. Just show the two versions that made it into the queue and let the user pick.\n- Don't propagate or upload conflict files. They're local-only by design (`.hqignore` blocks them).\n- Don't touch the journal directly — let the next sync update the journal with the resolved file's new hash.\n- Don't skip the atomic write of the index. Always tmp-then-rename so a crash doesn't leave a corrupt index.\n\n## After resolution\n\nAfter the user has resolved conflicts, suggest they hit Sync in the HQ Desktop App. The runner will pick up the resolved file (now with a new local hash that differs from journal) and push it cleanly. If a *new* conflict happens in the meantime (someone else pushed again), they'll see a new entry in the index.\n\n## See also\n\n- `\u002Fhq-sync` — re-run sync after resolving\n- `\u002Fhq-heal` — broader session repair\n","# \u002Fresolve-conflicts\n\nInteractive conflict resolution for HQ Sync. When two machines (or two users) edit the same file and sync detects divergence, both versions land on disk: the *original path* keeps the local version, and a `.conflict-\u003Ctimestamp>-\u003Cmachine>.\u003Cext>` file holds the cloud's version. This command walks the user through each pending conflict and applies their decision.\n\n**Note on auto-merge:** the `@indigoai-us\u002Fhq-cloud` sync-runner may now auto-merge clean, non-overlapping text-file conflicts on the **pull** path when a baseline is available — those pull conflicts never reach this index or this skill. What still lands here includes: pull conflicts the runner could *not* safely auto-merge (overlapping edits, binary\u002Foversized files, safety-only conflicts, or divergence with no baseline), and **push-side** conflicts (never auto-merged; with default `--direction both` \u002F `--on-conflict keep`, the cloud version is mirrored to a sidecar). Resolution here therefore stays two-way (local vs. cloud) for whatever lands in the queue; this skill does not implement or duplicate any three-way merge logic itself.\n\n## What you do\n\n### Step 1 — Locate and read the index\n\nRead `~\u002FHQ\u002F.hq-conflicts\u002Findex.json`. The exact HQ folder path comes from `~\u002F.hq\u002Fmenubar.json` `hqPath` (and falls back per the resolve-hq-folder discovery chain). If the file doesn't exist OR the `conflicts` array is empty, tell the user \"No conflicts pending — your local copy is in sync with the cloud\" and stop.\n\nThe index schema:\n\n```json\n{\n  \"version\": 1,\n  \"conflicts\": [\n    {\n      \"id\": \"...\",\n      \"originalPath\": \"core\u002Fknowledge\u002Fnotes.md\",\n      \"conflictPath\": \"core\u002Fknowledge\u002Fnotes.md.conflict-2026-04-27T22-05-14Z-abc123.md\",\n      \"detectedAt\": \"2026-04-27T22:05:14Z\",\n      \"side\": \"pull\" | \"push\",\n      \"machineId\": \"abc123\",\n      \"localHash\": \"...\",\n      \"remoteHash\": \"...\",\n      \"remoteVersionId\": \"...\",\n      \"lastKnownVersionId\": \"...\"\n    }\n  ]\n}\n```\n\n### Step 2 — Summarize the queue\n\nTell the user how many conflicts are pending, grouped by top-level folder. Example:\n\n```\n3 conflicts pending:\n  core\u002Fknowledge\u002F  (2 files)\n  personal\u002Fprojects\u002Ffoo\u002F  (1 file)\n\nWalking through them oldest-first.\n```\n\n### Step 3 — Walk each conflict (oldest detectedAt first)\n\nFor each entry:\n\n1. Read both files (Read on `originalPath` and `conflictPath`, both relative to HQ folder).\n2. Show the user a short preview: file path, sizes of both versions, and a unified diff (use `Bash` with `diff -u \u003Clocal> \u003Ccloud>` if both are reasonable size, otherwise just first 30 lines of each).\n3. Ask: which version to keep?\n   - **`l` \u002F `local`** — keep the local copy at `originalPath`. Delete the conflict file. (Cloud's version is discarded — it's still in S3 versioning history if recovery is ever needed.)\n   - **`c` \u002F `cloud`** — overwrite local with the cloud copy. Use Bash `mv \u003CconflictPath> \u003CoriginalPath>` to atomically replace.\n   - **`m` \u002F `merge`** — open both files for the user to manually merge. Use Bash `code -d \u003Clocal> \u003Ccloud>` (VS Code diff) or fall back to `open \u003Clocal> \u003Ccloud>`. Wait for the user to confirm they're done with the merge, then ask again (or accept that they've manually resolved → delete the conflict file).\n   - **`s` \u002F `skip`** — leave both files in place, move to next conflict. Index entry stays.\n   - **`q` \u002F `quit`** — stop walking, exit.\n\n4. After applying the resolution (except skip\u002Fquit\u002Fmerge-pending), remove the index entry. Re-write `~\u002FHQ\u002F.hq-conflicts\u002Findex.json` atomically (write to `.tmp`, then rename).\n\n### Step 4 — Final summary\n\nTell the user how many conflicts were resolved this session, how many were skipped, and what's left:\n\n```\nResolved 2 conflicts (1 kept local, 1 took cloud).\n1 conflict skipped — run `\u002Fresolve-conflicts` again to revisit.\n```\n\nIf there are still pending conflicts, suggest the user re-run sync afterwards so the resolved files propagate to the cloud cleanly.\n\n## Edge cases\n\n- **`conflictPath` doesn't exist on disk but is in the index**: the file was probably already deleted\u002Fresolved manually. Remove the index entry and continue.\n- **`originalPath` doesn't exist**: the user deleted the local file. Treat the conflict file as the only remaining copy — ask \"the original file is gone; keep the cloud version (move to original) or discard?\"\n- **Index file is corrupt JSON**: tell the user, don't attempt repair. Suggest checking `~\u002FHQ\u002F.hq-conflicts\u002Findex.json` manually or restoring from a backup.\n- **Binary files (image, PDF)**: don't attempt diff. Just show file sizes + offer to open both in their default app via `open`.\n- **No editor available for merge**: fall back to `open` (default app) for both files.\n\n## Don't\n\n- Don't try to do 3-way\u002Fdiff3 merges yourself — that logic lives in the sync-runner (`@indigoai-us\u002Fhq-cloud`) on the pull path, and is out of scope for this skill. Just show the two versions that made it into the queue and let the user pick.\n- Don't propagate or upload conflict files. They're local-only by design (`.hqignore` blocks them).\n- Don't touch the journal directly — let the next sync update the journal with the resolved file's new hash.\n- Don't skip the atomic write of the index. Always tmp-then-rename so a crash doesn't leave a corrupt index.\n\n## After resolution\n\nAfter the user has resolved conflicts, suggest they hit Sync in the HQ Desktop App. The runner will pick up the resolved file (now with a new local hash that differs from journal) and push it cleanly. If a *new* conflict happens in the meantime (someone else pushed again), they'll see a new entry in the index.\n\n## See also\n\n- `\u002Fhq-sync` — re-run sync after resolving\n- `\u002Fhq-heal` — broader session repair\n",{"name":5,"description":7,"allowed-tools":34},"Read, Write, Edit, Bash, AskUserQuestion","main","205cf61728a27ef15e9153aa38df5856fc8d82f5",".claude\u002Fskills\u002Fresolve-conflicts",18,"https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core","https:\u002F\u002Fgithub.com\u002Findigoai-us","https:\u002F\u002Fhqforwork.com\u002F","The AI Context Layer for Teams","2026-11-12 04:18:19",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add indigoai-us\u002Fhq-core --skill resolve-conflicts",{"tool":50,"command":51},"bunx","bunx skills add indigoai-us\u002Fhq-core --skill resolve-conflicts",{"tool":53,"command":54},"pnpm","pnpm dlx skills add indigoai-us\u002Fhq-core --skill resolve-conflicts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresolve-conflicts\u002FSKILL.md",true,[58],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"agents\u002Fopenai.yaml","REFERENCE","参考文档",123,"https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresolve-conflicts\u002Fagents\u002Fopenai.yaml",[65,83,113,137,148,158],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":29},"01M71E4MQ04WPK1EVDS7VKJ3E8","social-graphic","Generate 1080x1080 HTML social graphics for HQ update posts.","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fworkers\u002Fpublic\u002Fsocial-strategist\u002Fskills\u002Fsocial-graphic\u002FSKILL.md",[],[72,73,28,74,24,23,22,75,76,77,78,79,80,81,82],"social","social graphic","html","update","generate","graphics","browser","open","agent-browser","for","posts",{"skillNo":84,"name":80,"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":96,"publishedAt":29},"01M71E4H33K4P5H5M7ENPTMFSC","Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to \"open a website\", \"fill out a form\", \"click a button\", \"take a screenshot\", \"scrape data from a page\", \"test this web app\", \"login to a site\", \"automate browser actions\", or any task requiring programmatic web interaction.","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fworkers\u002Fpublic\u002Fqa-tester\u002Fskills\u002Fagent-browser\u002FSKILL.md",[88,93],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":94,"categoryName":95,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发",[97,78,98,99,100,101,28,102,103,104,105,106,79,107,80,108,109,110,111,112],"agent browser","click","ai agents","app","scrape","when","apps","actions","extracting","take a screenshot","testing","programmatic","browser automation","website","cli","interaction",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":29},"01M71E4FDBD7J8Y45JJ9KMMYGN","work-mesh","Work Mesh Live — automatic presence via hq mesh daemon; context reconcile\u002Forganize; manual session task-status, blocked, and note only.","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fwork-mesh\u002FSKILL.md",[],[120,121,122,28,123,124,125,126,127,128,129,130,131,132,22,133,134,135,136],"work mesh","work","mesh","status","context","note","live","presence","automatic","reconcile","only","organize","task","session","manual","daemon","via",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":29},"01M71E4EGHNAAGWAPV6KGBMQ9W","review","Parity worker review skill (materialization fixture).","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fscripts\u002Ftests\u002Ffixtures\u002Fagent-session\u002Fworker-materialization\u002Fparity-worker\u002Fskills\u002Freview\u002FSKILL.md",[],[139,144,145,146,147],"review skill","fixture","parity","worker",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":29},"01M71E4D1FZDJPDC15DRERKX8Y","run","Run or list HQ workers (parity fixture).","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fscripts\u002Ftests\u002Ffixtures\u002Fagent-session\u002Fskills\u002Frun\u002FSKILL.md",[],[150,155,156,146,157,145],"parity fixture","workers","list",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":29},"01M71E4BF4MV5SEWZJZ4T1QPQW","handoff","Preserve session state for a follow-up agent (parity fixture).","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fscripts\u002Ftests\u002Ffixtures\u002Fagent-session\u002Fskills\u002Fhandoff\u002FSKILL.md",[],[160,155,165,166,133,167,81,146,168,169,145],"up","preserve","session state","follow-up","state"]