{
  "schemaVersion": "1.0",
  "item": {
    "slug": "diy-pc-ingest",
    "name": "Diy Pc Ingest",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/NEXTAltair/diy-pc-ingest",
    "canonicalUrl": "https://clawhub.ai/NEXTAltair/diy-pc-ingest",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/diy-pc-ingest",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=diy-pc-ingest",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "references/config.example.json",
      "references/notion-ids.md",
      "scripts/_deprecated/notion_apply_records.py",
      "scripts/bootstrap_config.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/diy-pc-ingest"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/diy-pc-ingest",
    "agentPageUrl": "https://openagent3.xyz/skills/diy-pc-ingest/agent",
    "manifestUrl": "https://openagent3.xyz/skills/diy-pc-ingest/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/diy-pc-ingest/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Setup (required)",
        "body": "This skill is intended to be shared. Do not hardcode your Notion IDs or token in the skill.\n\nCopy the example config:\n\nskills/diy-pc-ingest/references/config.example.json → ~/.config/diy-pc-ingest/config.json\nAuto-bootstrap is disabled by default. Enable only when explicitly needed with DIY_PC_INGEST_BOOTSTRAP=1.\n\nFill in your Notion targets (IDs):\n\nnotion.targets.*.data_source_id (for schema/query)\nnotion.targets.*.database_id (for creating pages)\n\nProvide Notion auth for notion-api-automation (notionctl):\n\nenv: NOTION_API_KEY (recommended)\nor ~/.config/notion/api_key\n\nNotes:\n\nThis skill uses Notion-Version 2025-09-03 by default.\nTargets are read at runtime from config; see references/config.example.json."
      },
      {
        "title": "Data flow disclosure",
        "body": "Local input: pasted receipts/spec notes are parsed locally.\nExternal enrichment (optional): web_search/web_fetch may send partial product text to external web providers.\nNotion write path: records are queried/upserted via notion-api-automation/scripts/notionctl.mjs.\nLocal config: ~/.config/diy-pc-ingest/config.json is read; write occurs only when bootstrap is explicitly enabled.\n\nSecurity rules:\n\nIf user does not want external enrichment, skip web_search/web_fetch and proceed with local extraction only.\nUse minimal-scope Notion integration permissions (only target DIY_PC data sources)."
      },
      {
        "title": "Canonical Notion targets",
        "body": "Use data_sources endpoints for schema/query, and pages endpoint for row creation.\n\n(IDs are intentionally not included in this public skill. They live in your local config.)"
      },
      {
        "title": "Workflow (A: user pastes raw text)",
        "body": "Read the pasted text and decide target table per item:\n\nエンクロージャー: USB/RAID/HDDケース/ドック、ベイ数、JAN/型番、\"安全な取り外し\"表示名。\nストレージ: HDD/SSD/NVMe/SATA/容量/シリアル/健康状態。\nPCConfig: CPU/GPU/RAM/PSU/MB/ケース/冷却/NIC/キャプチャ等。\n\n\n\nExtract fields (best-effort). Prefer Japanese column names as they exist in each table.\n\n\nEnrich specs using web_search/web_fetch when it reduces user work (e.g., bay count, interface, capacity, form factor). Keep it minimal; don't overfill.\n\n\nAsk follow-up questions only for fields needed to avoid ambiguity or bad joins.\n\nストレージ: Serial missing → ask for serial (or confirm creating as \"暫定/シリアル不明\").\nエンクロージャー: ベイ数 or USB/Thunderbolt/LAN unclear → ask.\nPCConfig: Identifier/型番 missing but needed to match existing row → ask.\n\nIf a key collides with multiple rows, do not write; ask user.\n\nSearch existing records in Notion using scripts/notion_apply_records.js (auto-discovery mode):\n\nProvide JSONL records (one per item) on stdin.\nScript will:\n\nfind an existing row by key (see below)\nreport what would be created/updated/skipped without making changes\nDo not write anything (no create/update operations)\n\n\nUse this to preview results before actual upsert.\n\n\n\nReview search results and confirm with user:\n\nShow what would be created/updated/skipped\nAsk for confirmation before proceeding to actual upsert\n\n\n\nUpsert into Notion using scripts/notion_apply_records.js:\n\nProvide JSONL records (one per item) on stdin.\nScript will:\n\nfind an existing row by key (see below)\npatch only missing fields unless overwrite=true\notherwise create a new row\n\n\n\n\n\nReport results (created/updated/skipped) and link any created rows.\n3"
      },
      {
        "title": "Upsert keys (rules)",
        "body": "ストレージ: シリアル (exact) is the primary key. If the existing row was created without serial, allow a safe fallback match by title + (optional) 購入日/価格(円) to support post-fill of serial/health/scan-date.\nエンクロージャー: 取り外し表示名 (exact) else title/name.\nPCConfig: (Name + Purchase Date) を複合キーとして扱う（exact）。重複ヒット時は書き込まず質問。\nIf a key collides with multiple rows, do not write; ask user."
      },
      {
        "title": "JSONL input format for the apply script",
        "body": "Each line is a JSON object:\n\n{\"target\":\"enclosure\",\"title\":\"RATOC RS-EC32-R5G\",\"properties\":{\"種別\":\"USBケース\",\"接続\":\"USB\",\"ベイ数\":2,\"普段つないでるPC\":\"RECRYZEN\",\"購入日\":\"2026-01-18\",\"購入店\":\"PCワンズ\",\"価格(円)\":8977,\"取り外し表示名\":\"RS-EC32-R5G\",\"メモ\":\"JAN: 4949090752191\"}}\n\nOptional control fields (for cleanup / manual fixes):\n\npage_id (or id): update this Notion page directly (bypasses upsert matching)\narchive: true: archive the page (useful for de-dup)\noverwrite: true: allow overwriting existing values (including clearing with null)\n\nOptional behavior flags:\n\nmirror_to_pcconfig: true (only for target=storage): also create/update a pcconfig row for the installed component.\n\nrequires: 現在の接続先PC, 購入日, Name\n\nTargets: enclosure | storage | pcconfig | pcinput\n\nProperty value encoding:\n\nselect/status: string name\nrich_text: string\nnumber: number\ndate: YYYY-MM-DD\ncheckbox: boolean\nrelation: array of page_ids (advanced; avoid unless needed)"
      },
      {
        "title": "Notes",
        "body": "Always use Notion-Version 2025-09-03.\nPrefer POST /v1/data_sources/{id}/query over /databases/{id}/query.\nRelation schema updates require relation.data_source_id (not database_id)."
      },
      {
        "title": "Note (implementation)",
        "body": "JS implementation is the default: scripts/notion_apply_records.js\nLegacy Python implementation is kept for reference: scripts/_deprecated/notion_apply_records.py"
      },
      {
        "title": "Notion tooling (recommended)",
        "body": "Install notion-api-automation via ClawHub for Notion API debugging: clawhub install notion-api-automation\nThis skill does not depend on skills/notionkit/*.\nPrimary ingestion path is scripts/notion_apply_records.js; use skills/notion-api-automation/scripts/notionctl.mjs for diagnostics/manual API operations."
      }
    ],
    "body": "diy-pc-ingest\nSetup (required)\n\nThis skill is intended to be shared. Do not hardcode your Notion IDs or token in the skill.\n\nCopy the example config:\nskills/diy-pc-ingest/references/config.example.json → ~/.config/diy-pc-ingest/config.json\nAuto-bootstrap is disabled by default. Enable only when explicitly needed with DIY_PC_INGEST_BOOTSTRAP=1.\nFill in your Notion targets (IDs):\nnotion.targets.*.data_source_id (for schema/query)\nnotion.targets.*.database_id (for creating pages)\nProvide Notion auth for notion-api-automation (notionctl):\nenv: NOTION_API_KEY (recommended)\nor ~/.config/notion/api_key\n\nNotes:\n\nThis skill uses Notion-Version 2025-09-03 by default.\nTargets are read at runtime from config; see references/config.example.json.\nData flow disclosure\nLocal input: pasted receipts/spec notes are parsed locally.\nExternal enrichment (optional): web_search/web_fetch may send partial product text to external web providers.\nNotion write path: records are queried/upserted via notion-api-automation/scripts/notionctl.mjs.\nLocal config: ~/.config/diy-pc-ingest/config.json is read; write occurs only when bootstrap is explicitly enabled.\n\nSecurity rules:\n\nIf user does not want external enrichment, skip web_search/web_fetch and proceed with local extraction only.\nUse minimal-scope Notion integration permissions (only target DIY_PC data sources).\nCanonical Notion targets\n\nUse data_sources endpoints for schema/query, and pages endpoint for row creation.\n\n(IDs are intentionally not included in this public skill. They live in your local config.)\n\nWorkflow (A: user pastes raw text)\n\nRead the pasted text and decide target table per item:\n\nエンクロージャー: USB/RAID/HDDケース/ドック、ベイ数、JAN/型番、\"安全な取り外し\"表示名。\nストレージ: HDD/SSD/NVMe/SATA/容量/シリアル/健康状態。\nPCConfig: CPU/GPU/RAM/PSU/MB/ケース/冷却/NIC/キャプチャ等。\n\nExtract fields (best-effort). Prefer Japanese column names as they exist in each table.\n\nEnrich specs using web_search/web_fetch when it reduces user work (e.g., bay count, interface, capacity, form factor). Keep it minimal; don't overfill.\n\nAsk follow-up questions only for fields needed to avoid ambiguity or bad joins.\n\nストレージ: Serial missing → ask for serial (or confirm creating as \"暫定/シリアル不明\").\nエンクロージャー: ベイ数 or USB/Thunderbolt/LAN unclear → ask.\nPCConfig: Identifier/型番 missing but needed to match existing row → ask.\nIf a key collides with multiple rows, do not write; ask user.\n\nSearch existing records in Notion using scripts/notion_apply_records.js (auto-discovery mode):\n\nProvide JSONL records (one per item) on stdin.\nScript will:\nfind an existing row by key (see below)\nreport what would be created/updated/skipped without making changes\nDo not write anything (no create/update operations)\nUse this to preview results before actual upsert.\n\nReview search results and confirm with user:\n\nShow what would be created/updated/skipped\nAsk for confirmation before proceeding to actual upsert\n\nUpsert into Notion using scripts/notion_apply_records.js:\n\nProvide JSONL records (one per item) on stdin.\nScript will:\nfind an existing row by key (see below)\npatch only missing fields unless overwrite=true\notherwise create a new row\n\nReport results (created/updated/skipped) and link any created rows. 3\n\nUpsert keys (rules)\nストレージ: シリアル (exact) is the primary key. If the existing row was created without serial, allow a safe fallback match by title + (optional) 購入日/価格(円) to support post-fill of serial/health/scan-date.\nエンクロージャー: 取り外し表示名 (exact) else title/name.\nPCConfig: (Name + Purchase Date) を複合キーとして扱う（exact）。重複ヒット時は書き込まず質問。\nIf a key collides with multiple rows, do not write; ask user.\nJSONL input format for the apply script\n\nEach line is a JSON object:\n\n{\"target\":\"enclosure\",\"title\":\"RATOC RS-EC32-R5G\",\"properties\":{\"種別\":\"USBケース\",\"接続\":\"USB\",\"ベイ数\":2,\"普段つないでるPC\":\"RECRYZEN\",\"購入日\":\"2026-01-18\",\"購入店\":\"PCワンズ\",\"価格(円)\":8977,\"取り外し表示名\":\"RS-EC32-R5G\",\"メモ\":\"JAN: 4949090752191\"}}\n\n\nOptional control fields (for cleanup / manual fixes):\n\npage_id (or id): update this Notion page directly (bypasses upsert matching)\narchive: true: archive the page (useful for de-dup)\noverwrite: true: allow overwriting existing values (including clearing with null)\n\nOptional behavior flags:\n\nmirror_to_pcconfig: true (only for target=storage): also create/update a pcconfig row for the installed component.\nrequires: 現在の接続先PC, 購入日, Name\n\nTargets: enclosure | storage | pcconfig | pcinput\n\nProperty value encoding:\n\nselect/status: string name\nrich_text: string\nnumber: number\ndate: YYYY-MM-DD\ncheckbox: boolean\nrelation: array of page_ids (advanced; avoid unless needed)\nNotes\nAlways use Notion-Version 2025-09-03.\nPrefer POST /v1/data_sources/{id}/query over /databases/{id}/query.\nRelation schema updates require relation.data_source_id (not database_id).\nNote (implementation)\nJS implementation is the default: scripts/notion_apply_records.js\nLegacy Python implementation is kept for reference: scripts/_deprecated/notion_apply_records.py\nNotion tooling (recommended)\nInstall notion-api-automation via ClawHub for Notion API debugging: clawhub install notion-api-automation\nThis skill does not depend on skills/notionkit/*.\nPrimary ingestion path is scripts/notion_apply_records.js; use skills/notion-api-automation/scripts/notionctl.mjs for diagnostics/manual API operations."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/NEXTAltair/diy-pc-ingest",
    "publisherUrl": "https://clawhub.ai/NEXTAltair/diy-pc-ingest",
    "owner": "NEXTAltair",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/diy-pc-ingest",
    "downloadUrl": "https://openagent3.xyz/downloads/diy-pc-ingest",
    "agentUrl": "https://openagent3.xyz/skills/diy-pc-ingest/agent",
    "manifestUrl": "https://openagent3.xyz/skills/diy-pc-ingest/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/diy-pc-ingest/agent.md"
  }
}