sophhub 0.4.19 → 0.4.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +199 -187
- package/agents/ai-cs-admin/.config.json +51 -51
- package/agents/ai-cs-admin/AGENTS.md +293 -293
- package/agents/ai-cs-admin/HEARTBEAT.md +18 -18
- package/agents/ai-cs-qa/.config.json +47 -47
- package/agents/ai-cs-qa/BOOTSTRAP.md +22 -22
- package/agents/ai-cs-qa/scripts/setup_links.sh +39 -39
- package/agents/beauty/.config.json +17 -17
- package/agents/beauty/AGENTS.md +234 -234
- package/agents/beauty/BOOTSTRAP.md +55 -55
- package/agents/beauty/HEARTBEAT.md +5 -5
- package/agents/beauty/IDENTITY.md +5 -5
- package/agents/beauty/MEMORY.md +44 -44
- package/agents/beauty/SOUL.md +64 -64
- package/agents/beauty/TOOLS.md +160 -160
- package/agents/beauty/USER.md +114 -114
- package/agents/intern-admin/.config.json +60 -60
- package/agents/intern-admin/AGENTS.md +267 -267
- package/agents/intern-admin/BOOTSTRAP.md +21 -21
- package/agents/intern-admin/HEARTBEAT.md +3 -3
- package/agents/intern-admin/IDENTITY.md +6 -6
- package/agents/intern-admin/MEMORY.md +21 -21
- package/agents/intern-admin/SOUL.md +23 -23
- package/agents/intern-admin/TOOLS.md +93 -93
- package/agents/intern-admin/USER.md +16 -16
- package/agents/intern-admin/scripts/init_workspace.sh +27 -27
- package/agents/intern-qa/.config.json +46 -46
- package/agents/intern-qa/AGENTS.md +303 -303
- package/agents/intern-qa/BOOTSTRAP.md +16 -16
- package/agents/intern-qa/HEARTBEAT.md +3 -3
- package/agents/intern-qa/IDENTITY.md +6 -6
- package/agents/intern-qa/MEMORY.md +22 -22
- package/agents/intern-qa/SOUL.md +24 -24
- package/agents/intern-qa/TOOLS.md +24 -24
- package/agents/intern-qa/USER.md +27 -27
- package/agents/intern-qa/scripts/setup_links.sh +54 -54
- package/agents/parent-toddler/.config.json +37 -37
- package/agents/parent-toddler/AGENTS.md +51 -51
- package/agents/parent-toddler/BOOTSTRAP.md +55 -55
- package/agents/parent-toddler/HEARTBEAT.md +5 -5
- package/agents/parent-toddler/IDENTITY.md +5 -5
- package/agents/parent-toddler/MEMORY.md +22 -22
- package/agents/parent-toddler/SOUL.md +35 -35
- package/agents/parent-toddler/TOOLS.md +31 -31
- package/agents/parent-toddler/USER.md +44 -44
- package/agents/vip-admin/.config.json +51 -51
- package/agents/vip-admin/AGENTS.md +314 -314
- package/agents/vip-admin/BOOTSTRAP.md +21 -21
- package/agents/vip-admin/HEARTBEAT.md +19 -19
- package/agents/vip-admin/IDENTITY.md +6 -6
- package/agents/vip-admin/MEMORY.md +30 -30
- package/agents/vip-admin/SOUL.md +25 -25
- package/agents/vip-admin/TOOLS.md +108 -108
- package/agents/vip-admin/USER.md +31 -31
- package/agents/vip-qa/.config.json +58 -58
- package/agents/vip-qa/AGENTS.md +319 -319
- package/agents/vip-qa/BOOTSTRAP.md +73 -73
- package/agents/vip-qa/HEARTBEAT.md +23 -23
- package/agents/vip-qa/IDENTITY.md +7 -7
- package/agents/vip-qa/MEMORY.md +23 -23
- package/agents/vip-qa/SOUL.md +34 -34
- package/agents/vip-qa/TOOLS.md +41 -41
- package/agents/vip-qa/USER.md +16 -16
- package/agents/vip-qa/scripts/setup_links.sh +39 -39
- package/bin/sophhub.js +25 -25
- package/package.json +35 -33
- package/skills/agent-install/skill.json +34 -34
- package/skills/agent-install/src/SKILL.md +240 -240
- package/skills/agent-install/src/pyproject.toml +6 -6
- package/skills/agent-install/src/scripts/backup_agent.py +120 -120
- package/skills/agent-install/src/scripts/check_installed.py +479 -479
- package/skills/agent-install/src/scripts/common.py +568 -568
- package/skills/agent-install/src/scripts/copy_agent_files.py +59 -59
- package/skills/agent-install/src/scripts/list_agents.py +285 -285
- package/skills/agent-install/src/scripts/resolve_install_params.py +90 -90
- package/skills/agent-install/src/scripts/update_agent_md.py +76 -76
- package/skills/agent-install/src/scripts/update_openclaw.py +193 -193
- package/skills/agent-install/src/scripts/verify_download.py +148 -148
- package/skills/aippt/skill.json +20 -20
- package/skills/aippt/src/SKILL.md +235 -235
- package/skills/aippt/src/pyproject.toml +8 -8
- package/skills/aippt/src/scripts/auth.py +122 -122
- package/skills/aippt/src/scripts/ppt.py +361 -361
- package/skills/aippt/src/scripts/provider_docmee.py +299 -299
- package/skills/beauty-salon-inventory/skill.json +16 -16
- package/skills/beauty-salon-inventory/src/SKILL.md +69 -69
- package/skills/beauty-salon-inventory/src/scripts/init_salon_inventory.py +39 -39
- package/skills/beauty-salon-inventory/src/scripts/init_salon_inventory.sh +4 -4
- package/skills/beauty-salon-inventory/src/scripts/salon_inventory_cli.py +244 -244
- package/skills/beauty-salon-marketing/skill.json +10 -10
- package/skills/beauty-salon-marketing/src/SKILL.md +36 -36
- package/skills/beauty-salon-marketing/src/playbooks/beauty-salon-festival.md +19 -19
- package/skills/beauty-salon-marketing/src/playbooks/beauty-salon-segment.md +18 -18
- package/skills/beauty-salon-marketing/src/scripts/beauty_marketing_cli.py +99 -99
- package/skills/beauty-salon-marketing/src/scripts/member_segment.py +114 -114
- package/skills/beauty-salon-member-appointment/skill.json +10 -10
- package/skills/beauty-salon-member-appointment/src/SKILL.md +36 -36
- package/skills/beauty-salon-member-appointment/src/pyproject.toml +9 -9
- package/skills/beauty-salon-member-appointment/src/scripts/run_e2e_smoke.py +160 -160
- package/skills/beauty-salon-member-appointment/src/src/member_appt_cli/__init__.py +1 -1
- package/skills/beauty-salon-member-appointment/src/src/member_appt_cli/__main__.py +4 -4
- package/skills/beauty-salon-member-appointment/src/src/member_appt_cli/cli.py +921 -921
- package/skills/beauty-salon-member-appointment/src/src/member_appt_cli/db.py +30 -30
- package/skills/beauty-salon-membership/skill.json +20 -20
- package/skills/beauty-salon-membership/src/SKILL.md +67 -67
- package/skills/beauty-salon-product-service/skill.json +12 -12
- package/skills/beauty-salon-product-service/src/SKILL.md +42 -42
- package/skills/beauty-salon-product-service/src/pyproject.toml +9 -9
- package/skills/beauty-salon-product-service/src/src/product_service_cli/__init__.py +1 -1
- package/skills/beauty-salon-product-service/src/src/product_service_cli/__main__.py +4 -4
- package/skills/beauty-salon-product-service/src/src/product_service_cli/cli.py +329 -329
- package/skills/beauty-salon-product-service/src/src/product_service_cli/db.py +29 -29
- package/skills/beauty-salon-staff/skill.json +10 -10
- package/skills/beauty-salon-staff/src/SKILL.md +37 -37
- package/skills/beauty-salon-staff/src/pyproject.toml +9 -9
- package/skills/beauty-salon-staff/src/src/staff_cli/__init__.py +1 -1
- package/skills/beauty-salon-staff/src/src/staff_cli/__main__.py +4 -4
- package/skills/beauty-salon-staff/src/src/staff_cli/cli.py +479 -479
- package/skills/beauty-salon-staff/src/src/staff_cli/db.py +28 -28
- package/skills/beauty-salon-suite/skill.json +13 -13
- package/skills/beauty-salon-suite/src/SKILL.md +18 -18
- package/skills/beauty-salon-suite/src/beauty_db/__init__.py +2 -2
- package/skills/beauty-salon-suite/src/beauty_db/db.py +249 -249
- package/skills/beauty-salon-traffic/skill.json +20 -20
- package/skills/beauty-salon-traffic/src/SKILL.md +84 -84
- package/skills/bing-image-search/skill.json +20 -20
- package/skills/bing-image-search/src/SKILL.md +105 -105
- package/skills/bot-api-status/skill.json +44 -44
- package/skills/bot-api-status/src/SKILL.md +99 -99
- package/skills/bot-api-status/src/pyproject.toml +5 -5
- package/skills/bot-api-status/src/scripts/secret.py +496 -496
- package/skills/bot-secret/skill.json +35 -35
- package/skills/bot-secret/src/SKILL.md +51 -51
- package/skills/bot-secret/src/pyproject.toml +5 -5
- package/skills/bot-secret/src/scripts/secret.py +120 -120
- package/skills/cake-flower-holiday-campaign/skill.json +20 -20
- package/skills/cake-flower-holiday-campaign/src/SKILL.md +68 -68
- package/skills/cake-flower-order-sop/skill.json +20 -20
- package/skills/cake-flower-order-sop/src/SKILL.md +65 -65
- package/skills/claw-agent-get-send/skill.json +32 -32
- package/skills/claw-agent-get-send/src/SKILL.md +43 -43
- package/skills/claw-agent-get-send/src/pyproject.toml +5 -5
- package/skills/claw-agent-get-send/src/scripts/appia_claw.py +379 -379
- package/skills/compact-context/skill.json +20 -20
- package/skills/compact-context/src/SKILL.md +133 -133
- package/skills/compact-context/src/scripts/check.sh +381 -381
- package/skills/compact-context/src/scripts/set-keep-recent.mjs +1337 -1337
- package/skills/compact-context/src/scripts/setup.sh +96 -96
- package/skills/consensus/skill.json +20 -20
- package/skills/consensus/src/SKILL.md +93 -93
- package/skills/deepwiki/skill.json +20 -20
- package/skills/deepwiki/src/SKILL.md +45 -45
- package/skills/deepwiki/src/_meta.json +5 -5
- package/skills/deepwiki/src/scripts/deepwiki.js +135 -135
- package/skills/didi-ride/skill.json +20 -20
- package/skills/didi-ride/src/SKILL.md +309 -309
- package/skills/didi-ride/src/_meta.json +5 -5
- package/skills/didi-ride/src/assets/PREFERENCE.md +58 -58
- package/skills/didi-ride/src/package.json +15 -15
- package/skills/didi-ride/src/references/api_references.md +171 -171
- package/skills/didi-ride/src/references/error_handling.md +68 -68
- package/skills/didi-ride/src/references/setup.md +73 -73
- package/skills/didi-ride/src/references/workflow.md +150 -150
- package/skills/feishu-bitable/skill.json +20 -20
- package/skills/feishu-bitable/src/CHECKLIST.md +149 -149
- package/skills/feishu-bitable/src/README.md +177 -177
- package/skills/feishu-bitable/src/SKILL.md +113 -113
- package/skills/feishu-bitable/src/_meta.json +5 -5
- package/skills/feishu-bitable/src/api.js +380 -380
- package/skills/feishu-bitable/src/bin/cli.js +283 -283
- package/skills/feishu-bitable/src/description.md +142 -142
- package/skills/feishu-bitable/src/examples/create-records.json +51 -51
- package/skills/feishu-bitable/src/examples/create-table.json +63 -63
- package/skills/feishu-bitable/src/package-lock.json +324 -324
- package/skills/feishu-bitable/src/package.json +32 -32
- package/skills/feishu-bitable/src/publish-config.json +13 -13
- package/skills/feishu-bitable/src/test-simple.js +60 -60
- package/skills/feishu-bitable/src/utils.js +260 -260
- package/skills/feishu-notes-assistant-universal/skill.json +20 -20
- package/skills/feishu-notes-assistant-universal/src/README.md +55 -55
- package/skills/feishu-notes-assistant-universal/src/SKILL.md +159 -159
- package/skills/feishu-notes-assistant-universal/src/scripts/_resolve_lark_cli.py +58 -58
- package/skills/feishu-notes-assistant-universal/src/scripts/openclaw_meeting_minutes.py +462 -462
- package/skills/feishu-notes-assistant-universal/src/scripts/openclaw_notes_crud.py +547 -547
- package/skills/feishu-notes-assistant-universal/src/scripts/openclaw_notes_crud_test.py +181 -181
- package/skills/feishu-notes-assistant-universal/src/scripts/run_meeting_minutes.py +80 -80
- package/skills/feishu-notes-assistant-universal/src/scripts/run_meeting_minutes.sh +5 -5
- package/skills/feishu-notes-assistant-universal/src/scripts/run_note_crud.py +32 -32
- package/skills/feishu-notes-assistant-universal/src/scripts/run_note_crud.sh +5 -5
- package/skills/flight-booking/skill.json +36 -36
- package/skills/flight-booking/src/SKILL.md +288 -288
- package/skills/flight-booking/src/scripts/flight_booking.py +1237 -1237
- package/skills/flyai/skill.json +20 -20
- package/skills/flyai/src/SKILL.md +119 -119
- package/skills/flyai/src/references/fliggy-fast-search.md +53 -53
- package/skills/flyai/src/references/search-flight.md +89 -89
- package/skills/flyai/src/references/search-hotels.md +57 -57
- package/skills/flyai/src/references/search-poi.md +48 -48
- package/skills/google-maps/skill.json +20 -20
- package/skills/google-maps/src/SKILL.md +237 -237
- package/skills/google-maps/src/_meta.json +5 -5
- package/skills/google-maps/src/lib/map_helper.py +912 -912
- package/skills/image-classify/skill.json +42 -42
- package/skills/image-classify/src/SKILL.md +368 -368
- package/skills/image-classify/src/references/config.json +4 -4
- package/skills/image-classify/src/scripts/face_search.py +1276 -1276
- package/skills/image-description/skill.json +34 -34
- package/skills/image-description/src/SKILL.md +33 -33
- package/skills/image-description/src/pyproject.toml +8 -8
- package/skills/image-description/src/scripts/ana_image.py +112 -112
- package/skills/image-identify-world/skill.json +20 -20
- package/skills/image-identify-world/src/SKILL.md +40 -40
- package/skills/image-identify-world/src/pyproject.toml +8 -8
- package/skills/image-identify-world/src/scripts/identify_world.py +115 -115
- package/skills/insurance-policy-review/skill.json +27 -27
- package/skills/insurance-policy-review/src/SKILL.md +75 -75
- package/skills/insurance-sales-playbook/skill.json +20 -20
- package/skills/insurance-sales-playbook/src/SKILL.md +58 -58
- package/skills/inventory-management/skill.json +20 -20
- package/skills/inventory-management/src/SKILL.md +241 -241
- package/skills/inventory-management/src/scripts/inventory.py +1844 -1844
- package/skills/large-task-router/skill.json +20 -20
- package/skills/large-task-router/src/SKILL.md +79 -79
- package/skills/large-task-router/src/templates/plan.md +74 -74
- package/skills/lawding-contract-review/skill.json +20 -20
- package/skills/lawding-contract-review/src/SKILL.md +284 -284
- package/skills/lawding-contract-review/src/references/legal-language-library.md +1385 -1385
- package/skills/lawding-contract-review/src/scripts/build_reminders.py +471 -471
- package/skills/lawding-contract-review/src/scripts/register_contract_cron.py +457 -457
- package/skills/md2pdf-converter/skill.json +20 -20
- package/skills/md2pdf-converter/src/SKILL.md +244 -244
- package/skills/md2pdf-converter/src/_meta.json +5 -5
- package/skills/md2pdf-converter/src/scripts/generate_emoji_mapping.py +74 -74
- package/skills/md2pdf-converter/src/scripts/md2pdf-local.sh +291 -291
- package/skills/notes-hub-assistant/skill.json +20 -20
- package/skills/notes-hub-assistant/src/SKILL.md +233 -233
- package/skills/notes-hub-assistant/src/scripts/_resolve_lark_cli.py +48 -48
- package/skills/notes-hub-assistant/src/scripts/openclaw_meeting_minutes.py +473 -473
- package/skills/notes-hub-assistant/src/scripts/openclaw_notes_crud.py +596 -596
- package/skills/notes-hub-assistant/src/scripts/openclaw_wolai_notes_crud.py +364 -364
- package/skills/notes-hub-assistant/src/scripts/run_meeting_minutes.py +79 -79
- package/skills/notes-hub-assistant/src/scripts/run_note_crud.py +37 -37
- package/skills/notes-hub-assistant/src/scripts/run_notionbot.py +36 -36
- package/skills/notes-hub-assistant/src/scripts/run_wolai_note_crud.py +27 -27
- package/skills/schedule-reminder/skill.json +20 -20
- package/skills/schedule-reminder/src/SKILL.md +619 -619
- package/skills/schedule-reminder/src/schedule_template.md +68 -68
- package/skills/schedule-reminder/src/scripts/append_event.py +204 -204
- package/skills/schedule-reminder/src/scripts/create_reminders.sh +163 -163
- package/skills/schedule-reminder/src/scripts/daily_activate.sh +175 -175
- package/skills/schedule-reminder/src/scripts/parse_schedule.py +704 -704
- package/skills/schedule-reminder/src/scripts/setup.sh +242 -242
- package/skills/schedule-reminder/src//347/224/250/346/210/267/346/214/207/345/215/227.md +311 -311
- package/skills/sessions-analysis/skill.json +34 -34
- package/skills/sessions-analysis/src/SKILL.md +81 -81
- package/skills/sessions-analysis/src/pyproject.toml +5 -5
- package/skills/sessions-analysis/src/scripts/ana_logs.py +205 -205
- package/skills/share-skill/skill.json +20 -20
- package/skills/share-skill/src/SKILL.md +261 -261
- package/skills/share-skill/src/scripts/share_skill_to_friend.py +1031 -1031
- package/skills/skill-creator/skill.json +20 -20
- package/skills/skill-creator/src/SKILL.md +370 -370
- package/skills/skill-creator/src/license.txt +202 -202
- package/skills/skill-creator/src/scripts/init_skill.py +378 -378
- package/skills/skill-creator/src/scripts/package_skill.py +111 -111
- package/skills/skill-creator/src/scripts/quick_validate.py +101 -101
- package/skills/skillhub/skill.json +27 -27
- package/skills/skillhub/src/SKILL.md +121 -121
- package/skills/sophnet-age-appearance/skill.json +20 -20
- package/skills/sophnet-age-appearance/src/SKILL.md +83 -83
- package/skills/sophnet-age-appearance/src/pyproject.toml +10 -10
- package/skills/sophnet-age-appearance/src/scripts/age_appearance.py +395 -395
- package/skills/sophnet-age-appearance/src/scripts/age_face_crop.py +313 -313
- package/skills/sophnet-bot-client/skill.json +20 -20
- package/skills/sophnet-bot-client/src/SKILL.md +255 -255
- package/skills/sophnet-bot-client/src/pyproject.toml +13 -13
- package/skills/sophnet-bot-client/src/scripts/bot_client_proxy.py +165 -165
- package/skills/sophnet-bot-client/src/scripts/bot_client_safe.sh +29 -29
- package/skills/sophnet-bot-client/src/scripts/bot_client_setup.py +502 -502
- package/skills/sophnet-bot-client/src/tests/test_bot_client_proxy.py +255 -255
- package/skills/sophnet-bot-client/src/tests/test_bot_client_setup.py +679 -679
- package/skills/sophnet-bot-client/src/uv.lock +8 -8
- package/skills/sophnet-customer-management/skill.json +20 -20
- package/skills/sophnet-customer-management/src/SKILL.md +270 -270
- package/skills/sophnet-customer-management/src/pyproject.toml +15 -15
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/__init__.py +2 -2
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/__main__.py +5 -5
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/cli.py +67 -67
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/commands/__init__.py +2 -2
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/commands/customer.py +60 -60
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/commands/export_file.py +18 -18
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/commands/import_file.py +15 -15
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/commands/reminder.py +26 -26
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/commands/schema.py +28 -28
- package/skills/sophnet-customer-management/src/src/customer_mgmt_cli/config.py +54 -54
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/__init__.py +2 -2
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/exporter.py +85 -85
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/models.py +84 -84
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/normalizer.py +144 -144
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/parser.py +241 -241
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/query.py +109 -109
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/reminder.py +121 -121
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/repository.py +397 -397
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/schema.py +106 -106
- package/skills/sophnet-customer-management/src/src/customer_mgmt_core/service.py +565 -565
- package/skills/sophnet-customer-management/src/uv.lock +48 -48
- package/skills/sophnet-customized-marketing/skill.json +28 -28
- package/skills/sophnet-customized-marketing/src/SKILL.md +144 -144
- package/skills/sophnet-customized-marketing/src/playbooks/campaign-planning.md +187 -187
- package/skills/sophnet-customized-marketing/src/playbooks/content-generation.md +124 -124
- package/skills/sophnet-customized-marketing/src/playbooks/marketing-calendar.md +59 -59
- package/skills/sophnet-customized-marketing/src/playbooks/multi-channel-bundle.md +94 -94
- package/skills/sophnet-customized-marketing/src/playbooks/poster-generation.md +182 -182
- package/skills/sophnet-customized-marketing/src/playbooks/style-profile-workflow.md +103 -103
- package/skills/sophnet-customized-marketing/src/pyproject.toml +8 -8
- package/skills/sophnet-customized-marketing/src/references/campaign-mechanics.md +168 -168
- package/skills/sophnet-customized-marketing/src/references/content-safety.md +26 -26
- package/skills/sophnet-customized-marketing/src/references/marketing-date-checklist.md +99 -99
- package/skills/sophnet-customized-marketing/src/references/platform-writing-guidelines.md +88 -88
- package/skills/sophnet-customized-marketing/src/references/quality-checklist.md +44 -44
- package/skills/sophnet-customized-marketing/src/scripts/generate_poster.py +572 -572
- package/skills/sophnet-customized-marketing/src/scripts/style_profile.py +215 -215
- package/skills/sophnet-dailynews/skill.json +20 -20
- package/skills/sophnet-dailynews/src/SKILL.md +179 -179
- package/skills/sophnet-dailynews/src/cache.json +150 -150
- package/skills/sophnet-dailynews/src/sources.json +230 -230
- package/skills/sophnet-docx/skill.json +20 -20
- package/skills/sophnet-docx/src/SKILL.md +463 -463
- package/skills/sophnet-docx/src/package-lock.json +208 -208
- package/skills/sophnet-docx/src/package.json +16 -16
- package/skills/sophnet-docx/src/pyproject.toml +11 -11
- package/skills/sophnet-docx/src/scripts/__init__.py +1 -1
- package/skills/sophnet-docx/src/scripts/accept_changes.py +135 -135
- package/skills/sophnet-docx/src/scripts/comment.py +318 -318
- package/skills/sophnet-docx/src/scripts/ensure_uv_env.sh +68 -68
- package/skills/sophnet-docx/src/scripts/office/helpers/merge_runs.py +199 -199
- package/skills/sophnet-docx/src/scripts/office/helpers/simplify_redlines.py +197 -197
- package/skills/sophnet-docx/src/scripts/office/pack.py +159 -159
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/sophnet-docx/src/scripts/office/schemas/mce/mc.xsd +75 -75
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/sophnet-docx/src/scripts/office/soffice.py +183 -183
- package/skills/sophnet-docx/src/scripts/office/unpack.py +132 -132
- package/skills/sophnet-docx/src/scripts/office/validate.py +111 -111
- package/skills/sophnet-docx/src/scripts/office/validators/__init__.py +15 -15
- package/skills/sophnet-docx/src/scripts/office/validators/base.py +847 -847
- package/skills/sophnet-docx/src/scripts/office/validators/docx.py +446 -446
- package/skills/sophnet-docx/src/scripts/office/validators/pptx.py +275 -275
- package/skills/sophnet-docx/src/scripts/office/validators/redlining.py +247 -247
- package/skills/sophnet-docx/src/scripts/templates/comments.xml +3 -3
- package/skills/sophnet-docx/src/scripts/templates/commentsExtended.xml +3 -3
- package/skills/sophnet-docx/src/scripts/templates/commentsExtensible.xml +3 -3
- package/skills/sophnet-docx/src/scripts/templates/commentsIds.xml +3 -3
- package/skills/sophnet-docx/src/scripts/templates/people.xml +3 -3
- package/skills/sophnet-docx/src/scripts/upload_file.sh +96 -96
- package/skills/sophnet-docx/src/uv.lock +320 -320
- package/skills/sophnet-face-search/skill.json +20 -20
- package/skills/sophnet-face-search/src/SKILL.md +115 -115
- package/skills/sophnet-face-search/src/pyproject.toml +11 -11
- package/skills/sophnet-face-search/src/scripts/face_search.py +335 -335
- package/skills/sophnet-face-search/src/uv.lock +508 -508
- package/skills/sophnet-id-photo/skill.json +20 -20
- package/skills/sophnet-id-photo/src/SKILL.md +107 -107
- package/skills/sophnet-id-photo/src/pyproject.toml +10 -10
- package/skills/sophnet-id-photo/src/scripts/id_photo.py +540 -540
- package/skills/sophnet-id-photo/src/scripts/id_photo_compliance.py +215 -215
- package/skills/sophnet-id-photo/src/scripts/id_photo_face_crop.py +313 -313
- package/skills/sophnet-image-edit/skill.json +20 -20
- package/skills/sophnet-image-edit/src/SKILL.md +140 -140
- package/skills/sophnet-image-edit/src/pyproject.toml +9 -9
- package/skills/sophnet-image-edit/src/scripts/edit_and_preview.sh +68 -68
- package/skills/sophnet-image-edit/src/scripts/edit_image.py +279 -279
- package/skills/sophnet-image-edit/src/uv.lock +234 -234
- package/skills/sophnet-image-generate/skill.json +20 -20
- package/skills/sophnet-image-generate/src/SKILL.md +62 -62
- package/skills/sophnet-image-generate/src/pyproject.toml +9 -9
- package/skills/sophnet-image-generate/src/scripts/generate_image.py +156 -156
- package/skills/sophnet-image-generate/src/uv.lock +234 -234
- package/skills/sophnet-image-ocr/skill.json +20 -20
- package/skills/sophnet-image-ocr/src/SKILL.md +167 -167
- package/skills/sophnet-image-ocr/src/pyproject.toml +13 -13
- package/skills/sophnet-image-ocr/src/scripts/ocr.py +225 -225
- package/skills/sophnet-image-ocr/src/uv.lock +234 -234
- package/skills/sophnet-infinite-talk/skill.json +20 -20
- package/skills/sophnet-infinite-talk/src/SKILL.md +140 -140
- package/skills/sophnet-infinite-talk/src/pyproject.toml +9 -9
- package/skills/sophnet-infinite-talk/src/scripts/gen.py +172 -172
- package/skills/sophnet-oss/skill.json +27 -27
- package/skills/sophnet-oss/src/SKILL.md +118 -118
- package/skills/sophnet-oss/src/pyproject.toml +8 -8
- package/skills/sophnet-oss/src/scripts/upload_file.py +43 -43
- package/skills/sophnet-pdf/skill.json +20 -20
- package/skills/sophnet-pdf/src/SKILL.md +413 -413
- package/skills/sophnet-pdf/src/forms.md +297 -297
- package/skills/sophnet-pdf/src/pyproject.toml +14 -14
- package/skills/sophnet-pdf/src/reference.md +611 -611
- package/skills/sophnet-pdf/src/scripts/check_bounding_boxes.py +65 -65
- package/skills/sophnet-pdf/src/scripts/check_fillable_fields.py +11 -11
- package/skills/sophnet-pdf/src/scripts/convert_pdf_to_images.py +33 -33
- package/skills/sophnet-pdf/src/scripts/create_validation_image.py +37 -37
- package/skills/sophnet-pdf/src/scripts/enhance_tutorial.py +557 -557
- package/skills/sophnet-pdf/src/scripts/ensure_uv_env.sh +68 -68
- package/skills/sophnet-pdf/src/scripts/extract_form_field_info.py +122 -122
- package/skills/sophnet-pdf/src/scripts/extract_form_structure.py +115 -115
- package/skills/sophnet-pdf/src/scripts/extract_pdf_content.py +34 -34
- package/skills/sophnet-pdf/src/scripts/fill_fillable_fields.py +98 -98
- package/skills/sophnet-pdf/src/scripts/fill_pdf_form_with_annotations.py +107 -107
- package/skills/sophnet-pdf/src/scripts/upload_file.sh +88 -88
- package/skills/sophnet-pdf/src/uv.lock +537 -537
- package/skills/sophnet-qa-install/skill.json +27 -27
- package/skills/sophnet-qa-install/src/SKILL.md +210 -210
- package/skills/sophnet-qa-install/src/pyproject.toml +6 -6
- package/skills/sophnet-qa-install/src/scripts/backup_md.py +35 -35
- package/skills/sophnet-qa-install/src/scripts/check_installed.py +143 -143
- package/skills/sophnet-qa-install/src/scripts/update_config.py +142 -142
- package/skills/sophnet-qa-install/src/scripts/update_md.py +73 -73
- package/skills/sophnet-schedule/skill.json +20 -20
- package/skills/sophnet-schedule/src/ARCHITECTURE.md +321 -321
- package/skills/sophnet-schedule/src/IMPROVEMENTS.md +145 -145
- package/skills/sophnet-schedule/src/SKILL.md +1050 -1050
- package/skills/sophnet-schedule/src/_meta.json +6 -6
- package/skills/sophnet-schedule/src/api/models.py +245 -245
- package/skills/sophnet-schedule/src/apps/add_event.py +237 -237
- package/skills/sophnet-schedule/src/apps/check_reminders.py +112 -112
- package/skills/sophnet-schedule/src/apps/check_roc.py +246 -246
- package/skills/sophnet-schedule/src/apps/generate_daily_plan.py +342 -342
- package/skills/sophnet-schedule/src/apps/import_events.py +216 -216
- package/skills/sophnet-schedule/src/apps/monitor_calendar_changes.py +140 -140
- package/skills/sophnet-schedule/src/apps/register_tasks.py +169 -169
- package/skills/sophnet-schedule/src/apps/sync_roc_to_gcal.py +174 -174
- package/skills/sophnet-schedule/src/compat.py +66 -66
- package/skills/sophnet-schedule/src/config/reminder_rules.yaml +96 -96
- package/skills/sophnet-schedule/src/config/roc_events.yaml +44 -44
- package/skills/sophnet-schedule/src/config/settings.py +133 -133
- package/skills/sophnet-schedule/src/config/task_registry.yaml +92 -92
- package/skills/sophnet-schedule/src/docs/FRONTEND_INTEGRATION_GUIDE.md +437 -437
- package/skills/sophnet-schedule/src/gcal/client.py +374 -374
- package/skills/sophnet-schedule/src/gcal/models.py +91 -91
- package/skills/sophnet-schedule/src/requirements.txt +6 -6
- package/skills/sophnet-schedule/src/scripts/setup_gcal_token.py +85 -85
- package/skills/sophnet-schedule/src/server.py +669 -669
- package/skills/sophnet-schedule/src/services/calendar_backend.py +139 -139
- package/skills/sophnet-schedule/src/services/conflict_detector.py +96 -96
- package/skills/sophnet-schedule/src/services/datetime_utils.py +117 -117
- package/skills/sophnet-schedule/src/services/event_classifier.py +100 -100
- package/skills/sophnet-schedule/src/services/event_diff.py +160 -160
- package/skills/sophnet-schedule/src/services/google_integration.py +500 -500
- package/skills/sophnet-schedule/src/services/job_store.py +100 -100
- package/skills/sophnet-schedule/src/services/local_event_store.py +266 -266
- package/skills/sophnet-schedule/src/services/reminder_planner.py +116 -116
- package/skills/sophnet-schedule/src/services/runtime_utils.py +31 -31
- package/skills/sophnet-schedule/src/services/table_parser.py +286 -286
- package/skills/sophnet-schedule/src/services/task_builder.py +167 -167
- package/skills/sophnet-schedule/src/services/time_window.py +72 -72
- package/skills/sophnet-sticker-edit/skill.json +27 -27
- package/skills/sophnet-sticker-edit/src/SKILL.md +80 -80
- package/skills/sophnet-sticker-edit/src/pyproject.toml +9 -9
- package/skills/sophnet-sticker-edit/src/scripts/edit_sticker_image.py +403 -403
- package/skills/sophnet-stock/skill.json +20 -20
- package/skills/sophnet-stock/src/App-Plan.md +442 -442
- package/skills/sophnet-stock/src/README.md +214 -214
- package/skills/sophnet-stock/src/SKILL.md +236 -236
- package/skills/sophnet-stock/src/TODO.md +394 -394
- package/skills/sophnet-stock/src/_meta.json +5 -5
- package/skills/sophnet-stock/src/docs/ARCHITECTURE.md +408 -408
- package/skills/sophnet-stock/src/docs/CONCEPT.md +233 -233
- package/skills/sophnet-stock/src/docs/HOT_SCANNER.md +288 -288
- package/skills/sophnet-stock/src/docs/README.md +95 -95
- package/skills/sophnet-stock/src/docs/USAGE.md +465 -465
- package/skills/sophnet-stock/src/scripts/analyze_stock.py +2565 -2565
- package/skills/sophnet-stock/src/scripts/dividends.py +365 -365
- package/skills/sophnet-stock/src/scripts/hot_scanner.py +582 -582
- package/skills/sophnet-stock/src/scripts/portfolio.py +548 -548
- package/skills/sophnet-stock/src/scripts/rumor_scanner.py +342 -342
- package/skills/sophnet-stock/src/scripts/test_stock_analysis.py +409 -409
- package/skills/sophnet-stock/src/scripts/watchlist.py +336 -336
- package/skills/sophnet-training-install/skill.json +27 -27
- package/skills/sophnet-training-install/src/SKILL.md +211 -211
- package/skills/sophnet-training-install/src/pyproject.toml +6 -6
- package/skills/sophnet-training-install/src/scripts/backup_md.py +35 -35
- package/skills/sophnet-training-install/src/scripts/check_installed.py +144 -144
- package/skills/sophnet-training-install/src/scripts/update_config.py +142 -142
- package/skills/sophnet-training-install/src/scripts/update_md.py +73 -73
- package/skills/sophnet-tts/skill.json +20 -20
- package/skills/sophnet-tts/src/SKILL.md +79 -79
- package/skills/sophnet-tts/src/pyproject.toml +9 -9
- package/skills/sophnet-tts/src/scripts/gen_tts.py +130 -130
- package/skills/sophnet-video-generate/skill.json +37 -37
- package/skills/sophnet-video-generate/src/SKILL.md +117 -117
- package/skills/sophnet-video-generate/src/scripts/gen_video.py +321 -321
- package/skills/sophnet-xlsx/skill.json +20 -20
- package/skills/sophnet-xlsx/src/SKILL.md +399 -399
- package/skills/sophnet-xlsx/src/pyproject.toml +11 -11
- package/skills/sophnet-xlsx/src/scripts/ensure_uv_env.sh +68 -68
- package/skills/sophnet-xlsx/src/scripts/office/helpers/merge_runs.py +199 -199
- package/skills/sophnet-xlsx/src/scripts/office/helpers/simplify_redlines.py +197 -197
- package/skills/sophnet-xlsx/src/scripts/office/pack.py +159 -159
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/sophnet-xlsx/src/scripts/office/schemas/mce/mc.xsd +75 -75
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/sophnet-xlsx/src/scripts/office/soffice.py +183 -183
- package/skills/sophnet-xlsx/src/scripts/office/unpack.py +132 -132
- package/skills/sophnet-xlsx/src/scripts/office/validate.py +111 -111
- package/skills/sophnet-xlsx/src/scripts/office/validators/__init__.py +15 -15
- package/skills/sophnet-xlsx/src/scripts/office/validators/base.py +847 -847
- package/skills/sophnet-xlsx/src/scripts/office/validators/docx.py +446 -446
- package/skills/sophnet-xlsx/src/scripts/office/validators/pptx.py +275 -275
- package/skills/sophnet-xlsx/src/scripts/office/validators/redlining.py +247 -247
- package/skills/sophnet-xlsx/src/scripts/recalc.py +184 -184
- package/skills/sophnet-xlsx/src/scripts/upload_file.sh +96 -96
- package/skills/sophnet-xlsx/src/uv.lock +319 -319
- package/skills/ui-ux-pro-max/skill.json +20 -20
- package/skills/ui-ux-pro-max/src/SKILL.md +377 -377
- package/skills/ui-ux-pro-max/src/data/icons.csv +101 -101
- package/skills/ui-ux-pro-max/src/data/react-performance.csv +45 -45
- package/skills/ui-ux-pro-max/src/data/stacks/astro.csv +54 -54
- package/skills/ui-ux-pro-max/src/data/stacks/jetpack-compose.csv +53 -53
- package/skills/ui-ux-pro-max/src/data/stacks/nuxt-ui.csv +51 -51
- package/skills/ui-ux-pro-max/src/data/stacks/nuxtjs.csv +59 -59
- package/skills/ui-ux-pro-max/src/data/stacks/shadcn.csv +61 -61
- package/skills/ui-ux-pro-max/src/data/typography.csv +57 -57
- package/skills/ui-ux-pro-max/src/data/ui-reasoning.csv +101 -101
- package/skills/ui-ux-pro-max/src/data/web-interface.csv +31 -31
- package/skills/ui-ux-pro-max/src/scripts/core.py +253 -253
- package/skills/ui-ux-pro-max/src/scripts/design_system.py +1067 -1067
- package/skills/video-understand/skill.json +20 -20
- package/skills/video-understand/src/SKILL.md +79 -79
- package/skills/video-understand/src/scripts/video_understand.py +204 -204
- package/skills/weather/skill.json +19 -19
- package/skills/weather/src/SKILL.md +112 -112
- package/skills/web-scraper/skill.json +20 -20
- package/skills/web-scraper/src/SKILL.md +101 -101
- package/skills/web-scraper/src/scripts/scrape.py +270 -270
- package/skills/website-builder/skill.json +20 -20
- package/skills/website-builder/src/SKILL.md +266 -266
- package/skills/website-builder/src/scripts/deploy_site.sh +46 -46
- package/skills/wechat-article-publisher/skill.json +20 -20
- package/skills/wechat-article-publisher/src/SKILL.md +60 -60
- package/skills/wechat-article-publisher/src/config.json +6 -6
- package/skills/wechat-article-publisher/src/pyproject.toml +12 -12
- package/skills/wechat-article-publisher/src/scripts/publish_wechat.py +825 -825
- package/skills/xiaohongshu/skill.json +20 -20
- package/skills/xiaohongshu/src/SKILL.md +91 -91
- package/skills/xiaohongshu/src/_meta.json +5 -5
- package/skills/xiaohongshu/src/assets/card.html +216 -216
- package/skills/xiaohongshu/src/assets/cover.html +82 -82
- package/skills/xiaohongshu/src/assets/example.md +84 -84
- package/skills/xiaohongshu/src/assets/styles.css +318 -318
- package/skills/xiaohongshu/src/scripts/render_xhs_v2.py +737 -737
- package/skills/xiaohongshu/src/scripts/sign_server.py +158 -158
- package/skills/xiaohongshu/src/scripts/stealth.min.js +6 -6
- package/skills/xiaohongshu/src/scripts/xhs_tool.py +186 -186
- package/skills/xiaohongshu/src/workflow.py +185 -185
- package/src/commands/agent.js +112 -112
- package/src/commands/download.js +101 -101
- package/src/commands/info.js +58 -58
- package/src/commands/list.js +71 -71
- package/src/utils/agents.js +36 -36
- package/src/utils/config.js +22 -22
- package/src/utils/paths.js +31 -31
- package/src/utils/versions.js +57 -57
|
@@ -1,179 +1,179 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sophnet-dailynews
|
|
3
|
-
description: Generate a daily, high-signal Markdown news report by scraping preset sources, filtering and deduplicating items. Use when the user asks for daily news, tech digest, today's links, or requests an automated curated report.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Daily news report (Markdown)
|
|
7
|
-
|
|
8
|
-
## Quick start
|
|
9
|
-
|
|
10
|
-
1. Resolve the target date.
|
|
11
|
-
- Accept `YYYY-MM-DD` from the user.
|
|
12
|
-
- Default to local today.
|
|
13
|
-
2. Read `sources.json` and `cache.json` **with explicit paths**.
|
|
14
|
-
- Always call the read tool with a `path` field (not `file_path`).
|
|
15
|
-
- Use these exact paths:
|
|
16
|
-
- `read(path="/Data/shutong.shan/clawd/skills/sophnet-dailynews/sources.json")`
|
|
17
|
-
- `read(path="/Data/shutong.shan/clawd/skills/sophnet-dailynews/cache.json")`
|
|
18
|
-
3. Collect items in waves (Tier 1 → Tier 2 → Tier 3/browser) until the report has enough **high-quality** items.
|
|
19
|
-
4. Write `NewsReport/YYYY-MM-DD-news-report.md`.
|
|
20
|
-
5. Update `cache.json` (dedupe + historical stats).
|
|
21
|
-
|
|
22
|
-
## Files in this skill
|
|
23
|
-
|
|
24
|
-
- `sources.json`: tiers, batches, URLs, fetch method (`webfetch`/`browser`), extraction hint, enable/disable flags, and quality thresholds.
|
|
25
|
-
- `cache.json`: last run metadata, per-source stats, URL/content dedupe caches, and per-day article history.
|
|
26
|
-
|
|
27
|
-
## Common failure: `web_fetch` → `fetch failed`
|
|
28
|
-
|
|
29
|
-
This usually means the fetch tool hit one of these:
|
|
30
|
-
|
|
31
|
-
- a redirect it doesn't follow (302)
|
|
32
|
-
- a method mismatch (some sites don't like `HEAD`)
|
|
33
|
-
- bot protection / CDN quirks
|
|
34
|
-
- response too large / slow for the tool limits
|
|
35
|
-
|
|
36
|
-
This skill is tuned to avoid common failures:
|
|
37
|
-
|
|
38
|
-
- Prefer **HN RSS** over HTML (`https://news.ycombinator.com/rss`).
|
|
39
|
-
- Pin **HuggingFace Papers** to a concrete date URL to avoid redirects:
|
|
40
|
-
- `https://huggingface.co/papers/date/{{date}}`
|
|
41
|
-
- Replace `{{date}}` with the target date (`YYYY-MM-DD`) before fetching.
|
|
42
|
-
|
|
43
|
-
## Output contract
|
|
44
|
-
|
|
45
|
-
Produce exactly one Markdown file:
|
|
46
|
-
|
|
47
|
-
- Path: `NewsReport/YYYY-MM-DD-news-report.md`
|
|
48
|
-
- Target: `quality_thresholds.target_items` items (default 20)
|
|
49
|
-
- Include only items with `quality_score >= quality_thresholds.min_score_to_include` (default 3)
|
|
50
|
-
|
|
51
|
-
Each item must include:
|
|
52
|
-
|
|
53
|
-
- `title`
|
|
54
|
-
- `summary` (2–4 sentences, concrete and non-hypey)
|
|
55
|
-
- `key_points` (max 3)
|
|
56
|
-
- `url` (canonical if possible)
|
|
57
|
-
- `source_id`
|
|
58
|
-
- `keywords` (2–6)
|
|
59
|
-
- `quality_score` (1–5, integer)
|
|
60
|
-
|
|
61
|
-
## Collection workflow
|
|
62
|
-
|
|
63
|
-
### 1) Initialize
|
|
64
|
-
|
|
65
|
-
- Load `sources.json` → treat it as the source of truth.
|
|
66
|
-
- Load `cache.json` → use it for dedupe and stats.
|
|
67
|
-
- Create `NewsReport/` if missing.
|
|
68
|
-
- If `NewsReport/YYYY-MM-DD-news-report.md` already exists, either:
|
|
69
|
-
- regenerate from scratch (preferred), or
|
|
70
|
-
- append only if explicitly requested.
|
|
71
|
-
|
|
72
|
-
### 2) Fetch in waves (early stop)
|
|
73
|
-
|
|
74
|
-
Follow the tier order in `sources.json`:
|
|
75
|
-
|
|
76
|
-
- **Wave A (Tier 1 / batch_a + batch_b)**: high hit-rate sources first.
|
|
77
|
-
- If you still have fewer than ~15 included items after filtering, continue.
|
|
78
|
-
- **Wave B (Tier 2 / batch_a + batch_b)**: supplemental sources.
|
|
79
|
-
- If you still have fewer than `target_items`, continue.
|
|
80
|
-
- **Wave C (Tier 3 / browser sources)**: JS-rendered / blocked sources.
|
|
81
|
-
|
|
82
|
-
Stop fetching when you have:
|
|
83
|
-
|
|
84
|
-
- at least `target_items` included items, and
|
|
85
|
-
- at least `quality_thresholds.early_stop_threshold` total candidates evaluated (default 25), or you have exhausted all enabled sources.
|
|
86
|
-
|
|
87
|
-
### 3) Extract and normalize
|
|
88
|
-
|
|
89
|
-
For each enabled source entry:
|
|
90
|
-
|
|
91
|
-
- Fetch the page content using the configured `fetch_method`:
|
|
92
|
-
- `webfetch`: normal HTTP fetch.
|
|
93
|
-
- `browser`: render with a headless browser when available; otherwise skip with a recorded error.
|
|
94
|
-
- Apply the `extract` hint from the source entry (examples: `top_10`, `latest_5`, `latest_issue`, `today_top_5`).
|
|
95
|
-
- For each candidate item, normalize:
|
|
96
|
-
- clean title (no site suffix noise)
|
|
97
|
-
- canonical URL (strip tracking params when safe)
|
|
98
|
-
- short summary + key points
|
|
99
|
-
|
|
100
|
-
**RSS-first rule (important):**
|
|
101
|
-
|
|
102
|
-
- For RSS sources, **do not** `web_fetch` the item URLs.
|
|
103
|
-
- Use the RSS item's title + description/summary as the source of truth.
|
|
104
|
-
- If the RSS description is too thin to summarize, either:
|
|
105
|
-
- drop the item, or
|
|
106
|
-
- keep it with a one-sentence, non-speculative summary based only on the RSS description.
|
|
107
|
-
- Only fetch item URLs if the source entry explicitly says `extract: fetch_items` (none do by default).
|
|
108
|
-
|
|
109
|
-
If a `webfetch` attempt fails:
|
|
110
|
-
|
|
111
|
-
- retry once (respect `fetch_config.webfetch.timeout_ms`)
|
|
112
|
-
- then mark the source as failed and continue (do not abort the whole report)
|
|
113
|
-
|
|
114
|
-
### 4) Filter, score, and dedupe
|
|
115
|
-
|
|
116
|
-
Apply these rules in order:
|
|
117
|
-
|
|
118
|
-
1. Reject obvious low-signal items (marketing fluff, generic science, job posts, thin announcements).
|
|
119
|
-
2. Score each remaining item (`quality_score` 1–5) with a consistent rubric:
|
|
120
|
-
- 5: deeply useful + specific + actionable/insightful
|
|
121
|
-
- 4: strong signal, worth reading
|
|
122
|
-
- 3: decent, include only if you need more items
|
|
123
|
-
- 1–2: exclude
|
|
124
|
-
3. Deduplicate:
|
|
125
|
-
- exact URL match (including `cache.json:url_cache`)
|
|
126
|
-
- near-duplicate title (treat ~80% similarity as duplicate; keep the higher-scored one)
|
|
127
|
-
- optional content hash match (when you have the full text)
|
|
128
|
-
|
|
129
|
-
### 5) Select and sort
|
|
130
|
-
|
|
131
|
-
- Keep only items with `quality_score >= min_score_to_include`.
|
|
132
|
-
- Sort by `quality_score` descending.
|
|
133
|
-
- Break ties by source credibility (Tier 1 > Tier 2 > Tier 3) and recency.
|
|
134
|
-
- Take the top `target_items`.
|
|
135
|
-
|
|
136
|
-
## Markdown template
|
|
137
|
-
|
|
138
|
-
Use this structure:
|
|
139
|
-
|
|
140
|
-
```markdown
|
|
141
|
-
# Daily News Report (YYYY-MM-DD)
|
|
142
|
-
|
|
143
|
-
> Sources used: N | Candidates evaluated: M | Included: K
|
|
144
|
-
> Generated at: <local timestamp> | Skill: sophnet-dailynews
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## 1. <Title>
|
|
149
|
-
|
|
150
|
-
- **Summary**: ...
|
|
151
|
-
- **Key Points**:
|
|
152
|
-
1. ...
|
|
153
|
-
2. ...
|
|
154
|
-
3. ...
|
|
155
|
-
- **Source**: <source_id> — <url>
|
|
156
|
-
- **Keywords**: `k1` `k2` `k3`
|
|
157
|
-
- **Score**: 4/5
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Cache update rules (`cache.json`)
|
|
161
|
-
|
|
162
|
-
Update these fields every run:
|
|
163
|
-
|
|
164
|
-
- `last_run`: date, duration, items_collected, items_published, sources_used
|
|
165
|
-
- `source_stats[source_id]`: total_fetches, success_count, avg_items_per_fetch, avg_quality_score, last_fetch, last_success
|
|
166
|
-
- `url_cache.entries`: add included URLs (store timestamps; respect `_ttl_hours`)
|
|
167
|
-
- `content_hashes.entries`: add hashes when available (respect `_ttl_hours`)
|
|
168
|
-
- `article_history[YYYY-MM-DD]`: record the final included item list (at minimum: title + url + source_id + score)
|
|
169
|
-
|
|
170
|
-
## Editing sources (`sources.json`)
|
|
171
|
-
|
|
172
|
-
- Disable a flaky/low-quality source by setting `enabled: false` or moving it to `disabled`.
|
|
173
|
-
- Prefer fixing extraction hints before adding new sources.
|
|
174
|
-
- Keep Tier 1 small and high-signal; use Tier 2 for "fill".
|
|
175
|
-
|
|
176
|
-
## Failure handling
|
|
177
|
-
|
|
178
|
-
- If a source 403s on `webfetch`, try `browser` (if available) or skip and record the error.
|
|
179
|
-
- If all enabled sources fail, still write a report header and an explicit "no items" section; do not silently succeed.
|
|
1
|
+
---
|
|
2
|
+
name: sophnet-dailynews
|
|
3
|
+
description: Generate a daily, high-signal Markdown news report by scraping preset sources, filtering and deduplicating items. Use when the user asks for daily news, tech digest, today's links, or requests an automated curated report.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Daily news report (Markdown)
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
1. Resolve the target date.
|
|
11
|
+
- Accept `YYYY-MM-DD` from the user.
|
|
12
|
+
- Default to local today.
|
|
13
|
+
2. Read `sources.json` and `cache.json` **with explicit paths**.
|
|
14
|
+
- Always call the read tool with a `path` field (not `file_path`).
|
|
15
|
+
- Use these exact paths:
|
|
16
|
+
- `read(path="/Data/shutong.shan/clawd/skills/sophnet-dailynews/sources.json")`
|
|
17
|
+
- `read(path="/Data/shutong.shan/clawd/skills/sophnet-dailynews/cache.json")`
|
|
18
|
+
3. Collect items in waves (Tier 1 → Tier 2 → Tier 3/browser) until the report has enough **high-quality** items.
|
|
19
|
+
4. Write `NewsReport/YYYY-MM-DD-news-report.md`.
|
|
20
|
+
5. Update `cache.json` (dedupe + historical stats).
|
|
21
|
+
|
|
22
|
+
## Files in this skill
|
|
23
|
+
|
|
24
|
+
- `sources.json`: tiers, batches, URLs, fetch method (`webfetch`/`browser`), extraction hint, enable/disable flags, and quality thresholds.
|
|
25
|
+
- `cache.json`: last run metadata, per-source stats, URL/content dedupe caches, and per-day article history.
|
|
26
|
+
|
|
27
|
+
## Common failure: `web_fetch` → `fetch failed`
|
|
28
|
+
|
|
29
|
+
This usually means the fetch tool hit one of these:
|
|
30
|
+
|
|
31
|
+
- a redirect it doesn't follow (302)
|
|
32
|
+
- a method mismatch (some sites don't like `HEAD`)
|
|
33
|
+
- bot protection / CDN quirks
|
|
34
|
+
- response too large / slow for the tool limits
|
|
35
|
+
|
|
36
|
+
This skill is tuned to avoid common failures:
|
|
37
|
+
|
|
38
|
+
- Prefer **HN RSS** over HTML (`https://news.ycombinator.com/rss`).
|
|
39
|
+
- Pin **HuggingFace Papers** to a concrete date URL to avoid redirects:
|
|
40
|
+
- `https://huggingface.co/papers/date/{{date}}`
|
|
41
|
+
- Replace `{{date}}` with the target date (`YYYY-MM-DD`) before fetching.
|
|
42
|
+
|
|
43
|
+
## Output contract
|
|
44
|
+
|
|
45
|
+
Produce exactly one Markdown file:
|
|
46
|
+
|
|
47
|
+
- Path: `NewsReport/YYYY-MM-DD-news-report.md`
|
|
48
|
+
- Target: `quality_thresholds.target_items` items (default 20)
|
|
49
|
+
- Include only items with `quality_score >= quality_thresholds.min_score_to_include` (default 3)
|
|
50
|
+
|
|
51
|
+
Each item must include:
|
|
52
|
+
|
|
53
|
+
- `title`
|
|
54
|
+
- `summary` (2–4 sentences, concrete and non-hypey)
|
|
55
|
+
- `key_points` (max 3)
|
|
56
|
+
- `url` (canonical if possible)
|
|
57
|
+
- `source_id`
|
|
58
|
+
- `keywords` (2–6)
|
|
59
|
+
- `quality_score` (1–5, integer)
|
|
60
|
+
|
|
61
|
+
## Collection workflow
|
|
62
|
+
|
|
63
|
+
### 1) Initialize
|
|
64
|
+
|
|
65
|
+
- Load `sources.json` → treat it as the source of truth.
|
|
66
|
+
- Load `cache.json` → use it for dedupe and stats.
|
|
67
|
+
- Create `NewsReport/` if missing.
|
|
68
|
+
- If `NewsReport/YYYY-MM-DD-news-report.md` already exists, either:
|
|
69
|
+
- regenerate from scratch (preferred), or
|
|
70
|
+
- append only if explicitly requested.
|
|
71
|
+
|
|
72
|
+
### 2) Fetch in waves (early stop)
|
|
73
|
+
|
|
74
|
+
Follow the tier order in `sources.json`:
|
|
75
|
+
|
|
76
|
+
- **Wave A (Tier 1 / batch_a + batch_b)**: high hit-rate sources first.
|
|
77
|
+
- If you still have fewer than ~15 included items after filtering, continue.
|
|
78
|
+
- **Wave B (Tier 2 / batch_a + batch_b)**: supplemental sources.
|
|
79
|
+
- If you still have fewer than `target_items`, continue.
|
|
80
|
+
- **Wave C (Tier 3 / browser sources)**: JS-rendered / blocked sources.
|
|
81
|
+
|
|
82
|
+
Stop fetching when you have:
|
|
83
|
+
|
|
84
|
+
- at least `target_items` included items, and
|
|
85
|
+
- at least `quality_thresholds.early_stop_threshold` total candidates evaluated (default 25), or you have exhausted all enabled sources.
|
|
86
|
+
|
|
87
|
+
### 3) Extract and normalize
|
|
88
|
+
|
|
89
|
+
For each enabled source entry:
|
|
90
|
+
|
|
91
|
+
- Fetch the page content using the configured `fetch_method`:
|
|
92
|
+
- `webfetch`: normal HTTP fetch.
|
|
93
|
+
- `browser`: render with a headless browser when available; otherwise skip with a recorded error.
|
|
94
|
+
- Apply the `extract` hint from the source entry (examples: `top_10`, `latest_5`, `latest_issue`, `today_top_5`).
|
|
95
|
+
- For each candidate item, normalize:
|
|
96
|
+
- clean title (no site suffix noise)
|
|
97
|
+
- canonical URL (strip tracking params when safe)
|
|
98
|
+
- short summary + key points
|
|
99
|
+
|
|
100
|
+
**RSS-first rule (important):**
|
|
101
|
+
|
|
102
|
+
- For RSS sources, **do not** `web_fetch` the item URLs.
|
|
103
|
+
- Use the RSS item's title + description/summary as the source of truth.
|
|
104
|
+
- If the RSS description is too thin to summarize, either:
|
|
105
|
+
- drop the item, or
|
|
106
|
+
- keep it with a one-sentence, non-speculative summary based only on the RSS description.
|
|
107
|
+
- Only fetch item URLs if the source entry explicitly says `extract: fetch_items` (none do by default).
|
|
108
|
+
|
|
109
|
+
If a `webfetch` attempt fails:
|
|
110
|
+
|
|
111
|
+
- retry once (respect `fetch_config.webfetch.timeout_ms`)
|
|
112
|
+
- then mark the source as failed and continue (do not abort the whole report)
|
|
113
|
+
|
|
114
|
+
### 4) Filter, score, and dedupe
|
|
115
|
+
|
|
116
|
+
Apply these rules in order:
|
|
117
|
+
|
|
118
|
+
1. Reject obvious low-signal items (marketing fluff, generic science, job posts, thin announcements).
|
|
119
|
+
2. Score each remaining item (`quality_score` 1–5) with a consistent rubric:
|
|
120
|
+
- 5: deeply useful + specific + actionable/insightful
|
|
121
|
+
- 4: strong signal, worth reading
|
|
122
|
+
- 3: decent, include only if you need more items
|
|
123
|
+
- 1–2: exclude
|
|
124
|
+
3. Deduplicate:
|
|
125
|
+
- exact URL match (including `cache.json:url_cache`)
|
|
126
|
+
- near-duplicate title (treat ~80% similarity as duplicate; keep the higher-scored one)
|
|
127
|
+
- optional content hash match (when you have the full text)
|
|
128
|
+
|
|
129
|
+
### 5) Select and sort
|
|
130
|
+
|
|
131
|
+
- Keep only items with `quality_score >= min_score_to_include`.
|
|
132
|
+
- Sort by `quality_score` descending.
|
|
133
|
+
- Break ties by source credibility (Tier 1 > Tier 2 > Tier 3) and recency.
|
|
134
|
+
- Take the top `target_items`.
|
|
135
|
+
|
|
136
|
+
## Markdown template
|
|
137
|
+
|
|
138
|
+
Use this structure:
|
|
139
|
+
|
|
140
|
+
```markdown
|
|
141
|
+
# Daily News Report (YYYY-MM-DD)
|
|
142
|
+
|
|
143
|
+
> Sources used: N | Candidates evaluated: M | Included: K
|
|
144
|
+
> Generated at: <local timestamp> | Skill: sophnet-dailynews
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 1. <Title>
|
|
149
|
+
|
|
150
|
+
- **Summary**: ...
|
|
151
|
+
- **Key Points**:
|
|
152
|
+
1. ...
|
|
153
|
+
2. ...
|
|
154
|
+
3. ...
|
|
155
|
+
- **Source**: <source_id> — <url>
|
|
156
|
+
- **Keywords**: `k1` `k2` `k3`
|
|
157
|
+
- **Score**: 4/5
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Cache update rules (`cache.json`)
|
|
161
|
+
|
|
162
|
+
Update these fields every run:
|
|
163
|
+
|
|
164
|
+
- `last_run`: date, duration, items_collected, items_published, sources_used
|
|
165
|
+
- `source_stats[source_id]`: total_fetches, success_count, avg_items_per_fetch, avg_quality_score, last_fetch, last_success
|
|
166
|
+
- `url_cache.entries`: add included URLs (store timestamps; respect `_ttl_hours`)
|
|
167
|
+
- `content_hashes.entries`: add hashes when available (respect `_ttl_hours`)
|
|
168
|
+
- `article_history[YYYY-MM-DD]`: record the final included item list (at minimum: title + url + source_id + score)
|
|
169
|
+
|
|
170
|
+
## Editing sources (`sources.json`)
|
|
171
|
+
|
|
172
|
+
- Disable a flaky/low-quality source by setting `enabled: false` or moving it to `disabled`.
|
|
173
|
+
- Prefer fixing extraction hints before adding new sources.
|
|
174
|
+
- Keep Tier 1 small and high-signal; use Tier 2 for "fill".
|
|
175
|
+
|
|
176
|
+
## Failure handling
|
|
177
|
+
|
|
178
|
+
- If a source 403s on `webfetch`, try `browser` (if available) or skip and record the error.
|
|
179
|
+
- If all enabled sources fail, still write a report header and an explicit "no items" section; do not silently succeed.
|
|
@@ -1,151 +1,151 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schema_version": "1.0",
|
|
3
|
-
"description": "Daily News Report 缓存文件,用于避免重复抓取和跟踪历史表现",
|
|
4
|
-
|
|
5
|
-
"last_run": {
|
|
6
|
-
"date": "2026-02-09",
|
|
7
|
-
"duration_seconds": 30,
|
|
8
|
-
"items_collected": 3,
|
|
9
|
-
"items_published": 3,
|
|
10
|
-
"sources_used": ["fs_blog", "hackernoon_pm"]
|
|
11
|
-
},
|
|
12
|
-
|
|
13
|
-
"source_stats": {
|
|
14
|
-
"_comment": "记录每个源的历史表现,用于动态调整优先级",
|
|
15
|
-
"hn": {
|
|
16
|
-
"total_fetches": 2,
|
|
17
|
-
"success_count": 0,
|
|
18
|
-
"avg_items_per_fetch": 0,
|
|
19
|
-
"avg_quality_score": 0,
|
|
20
|
-
"last_fetch": "2026-02-09T04:44:19Z",
|
|
21
|
-
"last_success": null,
|
|
22
|
-
"last_error": "fetch failed"
|
|
23
|
-
},
|
|
24
|
-
"hf_papers": {
|
|
25
|
-
"total_fetches": 2,
|
|
26
|
-
"success_count": 1,
|
|
27
|
-
"avg_items_per_fetch": 0,
|
|
28
|
-
"avg_quality_score": 0,
|
|
29
|
-
"last_fetch": "2026-02-09T04:44:19Z",
|
|
30
|
-
"last_success": "2026-02-09T04:44:19Z",
|
|
31
|
-
"last_error": null,
|
|
32
|
-
"note": "No new papers for 2026-02-09 date page"
|
|
33
|
-
},
|
|
34
|
-
"one_useful_thing": {
|
|
35
|
-
"total_fetches": 2,
|
|
36
|
-
"success_count": 1,
|
|
37
|
-
"avg_items_per_fetch": 0,
|
|
38
|
-
"avg_quality_score": 0,
|
|
39
|
-
"last_fetch": "2026-02-09T04:44:24Z",
|
|
40
|
-
"last_success": "2026-02-09T04:44:24Z",
|
|
41
|
-
"last_error": null,
|
|
42
|
-
"note": "Landing page only, newsletter content not accessible"
|
|
43
|
-
},
|
|
44
|
-
"paul_graham": {
|
|
45
|
-
"total_fetches": 2,
|
|
46
|
-
"success_count": 1,
|
|
47
|
-
"avg_items_per_fetch": 0,
|
|
48
|
-
"avg_quality_score": 0,
|
|
49
|
-
"last_fetch": "2026-02-09T04:44:26Z",
|
|
50
|
-
"last_success": "2026-02-09T04:44:26Z",
|
|
51
|
-
"last_error": null,
|
|
52
|
-
"note": "Minimal content returned from articles page"
|
|
53
|
-
},
|
|
54
|
-
"james_clear": {
|
|
55
|
-
"total_fetches": 2,
|
|
56
|
-
"success_count": 1,
|
|
57
|
-
"avg_items_per_fetch": 0,
|
|
58
|
-
"avg_quality_score": 0,
|
|
59
|
-
"last_fetch": "2026-02-09T04:44:32Z",
|
|
60
|
-
"last_success": "2026-02-09T04:44:32Z",
|
|
61
|
-
"last_error": null,
|
|
62
|
-
"note": "Main site only, newsletter requires email signup"
|
|
63
|
-
},
|
|
64
|
-
"fs_blog": {
|
|
65
|
-
"total_fetches": 3,
|
|
66
|
-
"success_count": 3,
|
|
67
|
-
"avg_items_per_fetch": 1.0,
|
|
68
|
-
"avg_quality_score": 5.0,
|
|
69
|
-
"last_fetch": "2026-02-09T04:44:38Z",
|
|
70
|
-
"last_success": "2026-02-09T04:44:38Z",
|
|
71
|
-
"last_error": null
|
|
72
|
-
},
|
|
73
|
-
"hackernoon_pm": {
|
|
74
|
-
"total_fetches": 3,
|
|
75
|
-
"success_count": 3,
|
|
76
|
-
"avg_items_per_fetch": 1.0,
|
|
77
|
-
"avg_quality_score": 4.0,
|
|
78
|
-
"last_fetch": "2026-02-09T04:44:43Z",
|
|
79
|
-
"last_success": "2026-02-09T04:44:43Z",
|
|
80
|
-
"last_error": null,
|
|
81
|
-
"note": "Category page fetched, extracted 2 high-quality articles"
|
|
82
|
-
},
|
|
83
|
-
"scotthyoung": {
|
|
84
|
-
"total_fetches": 2,
|
|
85
|
-
"success_count": 1,
|
|
86
|
-
"avg_items_per_fetch": 0,
|
|
87
|
-
"avg_quality_score": 0,
|
|
88
|
-
"last_fetch": "2026-02-09T04:44:48Z",
|
|
89
|
-
"last_success": "2026-02-09T04:44:48Z",
|
|
90
|
-
"last_error": null,
|
|
91
|
-
"note": "Articles page only, book and course promo without article links"
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
"url_cache": {
|
|
96
|
-
"_comment": "已处理的 URL 缓存,避免重复收录",
|
|
97
|
-
"_ttl_hours": 168,
|
|
98
|
-
"entries": {
|
|
99
|
-
"https://fs.blog/brain-food/january-25-2026/": {
|
|
100
|
-
"timestamp": "2026-02-09T04:44:38Z",
|
|
101
|
-
"title": "The Spectrum of Independence"
|
|
102
|
-
},
|
|
103
|
-
"https://hackernoon.com/10-proven-ways-to-reduce-misalignment-between-stakeholders-in-product-teams": {
|
|
104
|
-
"timestamp": "2026-02-09T04:44:43Z",
|
|
105
|
-
"title": "10 Proven Ways to Reduce Misalignment Between Stakeholders in Product Teams"
|
|
106
|
-
},
|
|
107
|
-
"https://hackernoon.com/why-good-products-feel-broken": {
|
|
108
|
-
"timestamp": "2026-02-09T04:44:43Z",
|
|
109
|
-
"title": "Why Good Products Feel Broken"
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
"content_hashes": {
|
|
115
|
-
"_comment": "内容指纹,用于去重",
|
|
116
|
-
"_ttl_hours": 168,
|
|
117
|
-
"entries": {}
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
"article_history": {
|
|
121
|
-
"_comment": "已收录文章的简要记录",
|
|
122
|
-
"2026-02-07": [
|
|
123
|
-
{
|
|
124
|
-
"title": "The Spectrum of Independence",
|
|
125
|
-
"url": "https://fs.blog/brain-food/january-25-2026/",
|
|
126
|
-
"source_id": "fs_blog",
|
|
127
|
-
"score": 5
|
|
128
|
-
}
|
|
129
|
-
],
|
|
130
|
-
"2026-02-09": [
|
|
131
|
-
{
|
|
132
|
-
"title": "The Spectrum of Independence",
|
|
133
|
-
"url": "https://fs.blog/brain-food/january-25-2026/",
|
|
134
|
-
"source_id": "fs_blog",
|
|
135
|
-
"score": 5
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"title": "10 Proven Ways to Reduce Misalignment Between Stakeholders in Product Teams",
|
|
139
|
-
"url": "https://hackernoon.com/10-proven-ways-to-reduce-misalignment-between-stakeholders-in-product-teams",
|
|
140
|
-
"source_id": "hackernoon_pm",
|
|
141
|
-
"score": 4
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"title": "Why Good Products Feel Broken",
|
|
145
|
-
"url": "https://hackernoon.com/why-good-products-feel-broken",
|
|
146
|
-
"source_id": "hackernoon_pm",
|
|
147
|
-
"score": 4
|
|
148
|
-
}
|
|
149
|
-
]
|
|
150
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"description": "Daily News Report 缓存文件,用于避免重复抓取和跟踪历史表现",
|
|
4
|
+
|
|
5
|
+
"last_run": {
|
|
6
|
+
"date": "2026-02-09",
|
|
7
|
+
"duration_seconds": 30,
|
|
8
|
+
"items_collected": 3,
|
|
9
|
+
"items_published": 3,
|
|
10
|
+
"sources_used": ["fs_blog", "hackernoon_pm"]
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
"source_stats": {
|
|
14
|
+
"_comment": "记录每个源的历史表现,用于动态调整优先级",
|
|
15
|
+
"hn": {
|
|
16
|
+
"total_fetches": 2,
|
|
17
|
+
"success_count": 0,
|
|
18
|
+
"avg_items_per_fetch": 0,
|
|
19
|
+
"avg_quality_score": 0,
|
|
20
|
+
"last_fetch": "2026-02-09T04:44:19Z",
|
|
21
|
+
"last_success": null,
|
|
22
|
+
"last_error": "fetch failed"
|
|
23
|
+
},
|
|
24
|
+
"hf_papers": {
|
|
25
|
+
"total_fetches": 2,
|
|
26
|
+
"success_count": 1,
|
|
27
|
+
"avg_items_per_fetch": 0,
|
|
28
|
+
"avg_quality_score": 0,
|
|
29
|
+
"last_fetch": "2026-02-09T04:44:19Z",
|
|
30
|
+
"last_success": "2026-02-09T04:44:19Z",
|
|
31
|
+
"last_error": null,
|
|
32
|
+
"note": "No new papers for 2026-02-09 date page"
|
|
33
|
+
},
|
|
34
|
+
"one_useful_thing": {
|
|
35
|
+
"total_fetches": 2,
|
|
36
|
+
"success_count": 1,
|
|
37
|
+
"avg_items_per_fetch": 0,
|
|
38
|
+
"avg_quality_score": 0,
|
|
39
|
+
"last_fetch": "2026-02-09T04:44:24Z",
|
|
40
|
+
"last_success": "2026-02-09T04:44:24Z",
|
|
41
|
+
"last_error": null,
|
|
42
|
+
"note": "Landing page only, newsletter content not accessible"
|
|
43
|
+
},
|
|
44
|
+
"paul_graham": {
|
|
45
|
+
"total_fetches": 2,
|
|
46
|
+
"success_count": 1,
|
|
47
|
+
"avg_items_per_fetch": 0,
|
|
48
|
+
"avg_quality_score": 0,
|
|
49
|
+
"last_fetch": "2026-02-09T04:44:26Z",
|
|
50
|
+
"last_success": "2026-02-09T04:44:26Z",
|
|
51
|
+
"last_error": null,
|
|
52
|
+
"note": "Minimal content returned from articles page"
|
|
53
|
+
},
|
|
54
|
+
"james_clear": {
|
|
55
|
+
"total_fetches": 2,
|
|
56
|
+
"success_count": 1,
|
|
57
|
+
"avg_items_per_fetch": 0,
|
|
58
|
+
"avg_quality_score": 0,
|
|
59
|
+
"last_fetch": "2026-02-09T04:44:32Z",
|
|
60
|
+
"last_success": "2026-02-09T04:44:32Z",
|
|
61
|
+
"last_error": null,
|
|
62
|
+
"note": "Main site only, newsletter requires email signup"
|
|
63
|
+
},
|
|
64
|
+
"fs_blog": {
|
|
65
|
+
"total_fetches": 3,
|
|
66
|
+
"success_count": 3,
|
|
67
|
+
"avg_items_per_fetch": 1.0,
|
|
68
|
+
"avg_quality_score": 5.0,
|
|
69
|
+
"last_fetch": "2026-02-09T04:44:38Z",
|
|
70
|
+
"last_success": "2026-02-09T04:44:38Z",
|
|
71
|
+
"last_error": null
|
|
72
|
+
},
|
|
73
|
+
"hackernoon_pm": {
|
|
74
|
+
"total_fetches": 3,
|
|
75
|
+
"success_count": 3,
|
|
76
|
+
"avg_items_per_fetch": 1.0,
|
|
77
|
+
"avg_quality_score": 4.0,
|
|
78
|
+
"last_fetch": "2026-02-09T04:44:43Z",
|
|
79
|
+
"last_success": "2026-02-09T04:44:43Z",
|
|
80
|
+
"last_error": null,
|
|
81
|
+
"note": "Category page fetched, extracted 2 high-quality articles"
|
|
82
|
+
},
|
|
83
|
+
"scotthyoung": {
|
|
84
|
+
"total_fetches": 2,
|
|
85
|
+
"success_count": 1,
|
|
86
|
+
"avg_items_per_fetch": 0,
|
|
87
|
+
"avg_quality_score": 0,
|
|
88
|
+
"last_fetch": "2026-02-09T04:44:48Z",
|
|
89
|
+
"last_success": "2026-02-09T04:44:48Z",
|
|
90
|
+
"last_error": null,
|
|
91
|
+
"note": "Articles page only, book and course promo without article links"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
"url_cache": {
|
|
96
|
+
"_comment": "已处理的 URL 缓存,避免重复收录",
|
|
97
|
+
"_ttl_hours": 168,
|
|
98
|
+
"entries": {
|
|
99
|
+
"https://fs.blog/brain-food/january-25-2026/": {
|
|
100
|
+
"timestamp": "2026-02-09T04:44:38Z",
|
|
101
|
+
"title": "The Spectrum of Independence"
|
|
102
|
+
},
|
|
103
|
+
"https://hackernoon.com/10-proven-ways-to-reduce-misalignment-between-stakeholders-in-product-teams": {
|
|
104
|
+
"timestamp": "2026-02-09T04:44:43Z",
|
|
105
|
+
"title": "10 Proven Ways to Reduce Misalignment Between Stakeholders in Product Teams"
|
|
106
|
+
},
|
|
107
|
+
"https://hackernoon.com/why-good-products-feel-broken": {
|
|
108
|
+
"timestamp": "2026-02-09T04:44:43Z",
|
|
109
|
+
"title": "Why Good Products Feel Broken"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
"content_hashes": {
|
|
115
|
+
"_comment": "内容指纹,用于去重",
|
|
116
|
+
"_ttl_hours": 168,
|
|
117
|
+
"entries": {}
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
"article_history": {
|
|
121
|
+
"_comment": "已收录文章的简要记录",
|
|
122
|
+
"2026-02-07": [
|
|
123
|
+
{
|
|
124
|
+
"title": "The Spectrum of Independence",
|
|
125
|
+
"url": "https://fs.blog/brain-food/january-25-2026/",
|
|
126
|
+
"source_id": "fs_blog",
|
|
127
|
+
"score": 5
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"2026-02-09": [
|
|
131
|
+
{
|
|
132
|
+
"title": "The Spectrum of Independence",
|
|
133
|
+
"url": "https://fs.blog/brain-food/january-25-2026/",
|
|
134
|
+
"source_id": "fs_blog",
|
|
135
|
+
"score": 5
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"title": "10 Proven Ways to Reduce Misalignment Between Stakeholders in Product Teams",
|
|
139
|
+
"url": "https://hackernoon.com/10-proven-ways-to-reduce-misalignment-between-stakeholders-in-product-teams",
|
|
140
|
+
"source_id": "hackernoon_pm",
|
|
141
|
+
"score": 4
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"title": "Why Good Products Feel Broken",
|
|
145
|
+
"url": "https://hackernoon.com/why-good-products-feel-broken",
|
|
146
|
+
"source_id": "hackernoon_pm",
|
|
147
|
+
"score": 4
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
151
|
}
|