@fectivnfy112358/minimax-code-web 0.1.0-preview.0 → 0.1.0-preview.3
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/bin/mcode-webui.mjs +6 -2
- package/package.json +1 -1
- package/server/assets/agents/_default/prompt-base-all.md +121 -0
- package/server/assets/agents/_default/prompt-base-all.md.hbs +255 -0
- package/server/assets/agents/_default/prompt-base-windows.md +6 -0
- package/server/assets/agents/_default/prompt-base-windows.md.hbs +6 -0
- package/server/assets/agents/_default/prompt-base-worker.md +12 -0
- package/server/assets/agents/_default/prompt-base-worker.md.hbs +27 -0
- package/server/assets/agents/_default/prompt-session-branch.md +3 -0
- package/server/assets/agents/_default/prompt-session-branch.md.hbs +30 -0
- package/server/assets/agents/_default/prompt-session-root.md +4 -0
- package/server/assets/agents/_default/prompt-session-root.md.hbs +32 -0
- package/server/assets/agents/_migration/README.md +20 -0
- package/server/assets/agents/_migration/coder/PERSONA-zh.md +10 -0
- package/server/assets/agents/_migration/coder/PERSONA.md +11 -0
- package/server/assets/agents/_migration/coder/system-prompt.md.hbs +42 -0
- package/server/assets/agents/_migration/general/PERSONA-zh.md +11 -0
- package/server/assets/agents/_migration/general/PERSONA.md +11 -0
- package/server/assets/agents/_migration/general/system-prompt.md.hbs +49 -0
- package/server/assets/agents/_v2/AGENT_CONTEXT.md.hbs +222 -0
- package/server/assets/agents/_v2/coding/SYSTEM.md.hbs +161 -0
- package/server/assets/agents/_v2/explore.md.hbs +38 -0
- package/server/assets/agents/_v2/tui/SYSTEM.md.hbs +147 -0
- package/server/assets/agents/_v2/verifier.md.hbs +32 -0
- package/server/assets/agents/_v2/work/SYSTEM.md.hbs +173 -0
- package/server/assets/agents/_v2/worker.md.hbs +27 -0
- package/server/assets/agents/builtin-agents.json +1 -0
- package/server/assets/agents/desktop-task/archive-title/system-en.md +1 -0
- package/server/assets/agents/desktop-task/archive-title/system-zh.md +1 -0
- package/server/assets/agents/desktop-task/checkpoint/system.md +15 -0
- package/server/assets/agents/desktop-task/output-revision/system.md +1 -0
- package/server/assets/agents/desktop-task/retry/continuation.md +4 -0
- package/server/assets/agents/desktop-task/session-title/system.md +41 -0
- package/server/assets/agents/explore/PERSONA-zh.md +8 -0
- package/server/assets/agents/explore/PERSONA.md +8 -0
- package/server/assets/agents/explore/agent.md +14 -0
- package/server/assets/agents/explore/system-prompt.md.hbs +35 -0
- package/server/assets/agents/greeting-zh.md +61 -0
- package/server/assets/agents/greeting.md +61 -0
- package/server/assets/agents/managed-prompts.json +54 -0
- package/server/assets/agents/mavis/PERSONA-zh.md +7 -0
- package/server/assets/agents/mavis/PERSONA.md +7 -0
- package/server/assets/agents/mavis/features/cron.md.hbs +23 -0
- package/server/assets/agents/mavis/features/delegation.md.hbs +56 -0
- package/server/assets/agents/mavis/features/memory.md.hbs +61 -0
- package/server/assets/agents/mavis/features/recoverable-deletion.md.hbs +10 -0
- package/server/assets/agents/mavis/features/task-management.md.hbs +11 -0
- package/server/assets/agents/mavis/features/web-search.md.hbs +11 -0
- package/server/assets/agents/mavis/modes/coding/online/PERSONA-zh.md.hbs +20 -0
- package/server/assets/agents/mavis/modes/coding/online/PERSONA.md.hbs +20 -0
- package/server/assets/agents/mavis/modes/coding/online/SYSTEM.md.hbs +159 -0
- package/server/assets/agents/mavis/modes/work/online/PERSONA-zh.md.hbs +20 -0
- package/server/assets/agents/mavis/modes/work/online/PERSONA.md.hbs +20 -0
- package/server/assets/agents/mavis/modes/work/online/SYSTEM.md.hbs +161 -0
- package/server/assets/agents/mavis/prompt-session-root.md +4 -0
- package/server/assets/agents/mavis/prompt-session-root.md.hbs +4 -0
- package/server/assets/agents/mavis/skills/control-in-app-browser/SKILL.md +491 -0
- package/server/assets/agents/mavis/skills/minimax-code-product/SKILL.md +114 -0
- package/server/assets/agents/mavis/skills/minimax-code-product/references/account-models.md +32 -0
- package/server/assets/agents/mavis/skills/minimax-code-product/references/agents.md +25 -0
- package/server/assets/agents/mavis/skills/minimax-code-product/references/extensions.md +33 -0
- package/server/assets/agents/mavis/skills/minimax-code-product/references/workflows.md +30 -0
- package/server/assets/agents/mavis/system-prompt.md.hbs +97 -0
- package/server/assets/agents/prompt-exemptions.json +38 -0
- package/server/assets/agents/verifier/PERSONA-zh.md +8 -0
- package/server/assets/agents/verifier/PERSONA.md +8 -0
- package/server/assets/agents/verifier/agent.md +17 -0
- package/server/assets/agents/verifier/system-prompt.md.hbs +28 -0
- package/server/assets/agents/worker/PERSONA-zh.md +8 -0
- package/server/assets/agents/worker/PERSONA.md +8 -0
- package/server/assets/agents/worker/agent.md +18 -0
- package/server/assets/agents/worker/system-prompt.md.hbs +22 -0
- package/server/assets/agents/workflow/code-review/review-candidates.md +120 -0
- package/server/assets/agents/workflow/code-review/reviewer-system.md +75 -0
- package/server/assets/agents/workflow/goal/budget-limit.md +16 -0
- package/server/assets/agents/workflow/goal/continuation.md +62 -0
- package/server/assets/agents/workflow/goal/objective-updated.md +16 -0
- package/server/assets/agents/workflow/goal/recovery-terminal-audit.md +12 -0
- package/server/assets/agents/workflow/goal/recovery.md +11 -0
- package/server/assets/agents/workflow/goal/terminal-audit.md +9 -0
- package/server/assets/agents/workflow/plan-mode/agent-entry.md +72 -0
- package/server/assets/agents/workflow/prompt-hook/system.md +0 -0
- package/server/assets/models-dev-catalog.json.gz +0 -0
- package/server/assets/prompts/code-review/review-candidates.md +120 -0
- package/server/assets/prompts/code-review/reviewer-system.md +75 -0
- package/server/assets/skills/code-review/SKILL.md +51 -0
- package/server/assets/skills/cu-desktop/SKILL.md +257 -0
- package/server/assets/skills/deep-research/SKILL.md +219 -0
- package/server/assets/skills/deep-research/scripts/render_plan.py +33 -0
- package/server/assets/skills/deep-research/steps/1_background.md +65 -0
- package/server/assets/skills/deep-research/steps/2_judgment.md +66 -0
- package/server/assets/skills/deep-research/steps/3_analysis.md +114 -0
- package/server/assets/skills/deep-research/steps/4_research.md +161 -0
- package/server/assets/skills/deep-research/steps/5_writing.md +358 -0
- package/server/assets/skills/deploy-website/SKILL.md +55 -0
- package/server/assets/skills/docx/LICENSE +21 -0
- package/server/assets/skills/docx/SKILL.md +261 -0
- package/server/assets/skills/docx/assets/styles/academic_styles.xml +250 -0
- package/server/assets/skills/docx/assets/styles/corporate_styles.xml +284 -0
- package/server/assets/skills/docx/assets/styles/default_styles.xml +449 -0
- package/server/assets/skills/docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/server/assets/skills/docx/assets/xsd/business-rules.xsd +130 -0
- package/server/assets/skills/docx/assets/xsd/common-types.xsd +159 -0
- package/server/assets/skills/docx/assets/xsd/wml-subset.xsd +589 -0
- package/server/assets/skills/docx/docs/acceptance-checklists/create.md +7 -0
- package/server/assets/skills/docx/docs/acceptance-checklists/edit.md +6 -0
- package/server/assets/skills/docx/docs/acceptance-checklists/layout-repair.md +7 -0
- package/server/assets/skills/docx/docs/acceptance-checklists/template.md +6 -0
- package/server/assets/skills/docx/docs/acceptance.md +139 -0
- package/server/assets/skills/docx/docs/anti-patterns.md +14 -0
- package/server/assets/skills/docx/docs/backends.md +116 -0
- package/server/assets/skills/docx/docs/evidence.md +73 -0
- package/server/assets/skills/docx/docs/failure-taxonomy.md +71 -0
- package/server/assets/skills/docx/docs/index.md +50 -0
- package/server/assets/skills/docx/docs/rendered-delivery.md +125 -0
- package/server/assets/skills/docx/docs/router.md +122 -0
- package/server/assets/skills/docx/docs/tables-and-numbering.md +27 -0
- package/server/assets/skills/docx/docs/task-apply-template.md +141 -0
- package/server/assets/skills/docx/docs/task-compare-two-docx.md +48 -0
- package/server/assets/skills/docx/docs/task-create.md +124 -0
- package/server/assets/skills/docx/docs/task-edit-fill.md +69 -0
- package/server/assets/skills/docx/docs/task-read-content.md +148 -0
- package/server/assets/skills/docx/docs/task-read-rendered.md +78 -0
- package/server/assets/skills/docx/docs/task-read-structure.md +93 -0
- package/server/assets/skills/docx/docs/task-repair-layout.md +70 -0
- package/server/assets/skills/docx/docs/template-dsl.md +32 -0
- package/server/assets/skills/docx/docs/track-changes.md +15 -0
- package/server/assets/skills/docx/docs/xml-patch-dsl.md +33 -0
- package/server/assets/skills/docx/references/cjk_typography.md +357 -0
- package/server/assets/skills/docx/references/cjk_university_template_guide.md +184 -0
- package/server/assets/skills/docx/references/comments_guide.md +191 -0
- package/server/assets/skills/docx/references/design_good_bad_examples.md +829 -0
- package/server/assets/skills/docx/references/design_principles.md +819 -0
- package/server/assets/skills/docx/references/openxml_element_order.md +308 -0
- package/server/assets/skills/docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/server/assets/skills/docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/server/assets/skills/docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/server/assets/skills/docx/references/openxml_namespaces.md +82 -0
- package/server/assets/skills/docx/references/openxml_units.md +72 -0
- package/server/assets/skills/docx/references/sample-patch-plans.json +22 -0
- package/server/assets/skills/docx/references/sample-task-intents.json +5 -0
- package/server/assets/skills/docx/references/sample-template-manifests.json +21 -0
- package/server/assets/skills/docx/references/scenario_a_create.md +284 -0
- package/server/assets/skills/docx/references/scenario_b_edit_content.md +295 -0
- package/server/assets/skills/docx/references/scenario_c_apply_template.md +456 -0
- package/server/assets/skills/docx/references/track_changes_guide.md +200 -0
- package/server/assets/skills/docx/references/troubleshooting.md +506 -0
- package/server/assets/skills/docx/references/typography_guide.md +294 -0
- package/server/assets/skills/docx/references/xsd_validation_guide.md +158 -0
- package/server/assets/skills/docx/scripts/build_patch_plan.py +29 -0
- package/server/assets/skills/docx/scripts/diff_docx_structure.py +61 -0
- package/server/assets/skills/docx/scripts/doc_to_docx.ps1 +85 -0
- package/server/assets/skills/docx/scripts/doc_to_docx.sh +40 -0
- package/server/assets/skills/docx/scripts/docx_preview.ps1 +76 -0
- package/server/assets/skills/docx/scripts/docx_preview.sh +37 -0
- package/server/assets/skills/docx/scripts/docx_to_pdf.py +87 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/server/assets/skills/docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/server/assets/skills/docx/scripts/env_check.ps1 +327 -0
- package/server/assets/skills/docx/scripts/env_check.sh +340 -0
- package/server/assets/skills/docx/scripts/extract_docx_text.py +1075 -0
- package/server/assets/skills/docx/scripts/pack_docx.py +31 -0
- package/server/assets/skills/docx/scripts/read_docx_structure.py +1032 -0
- package/server/assets/skills/docx/scripts/render_docx_pages.py +147 -0
- package/server/assets/skills/docx/scripts/rendered_report.py +609 -0
- package/server/assets/skills/docx/scripts/setup.ps1 +542 -0
- package/server/assets/skills/docx/scripts/setup.sh +537 -0
- package/server/assets/skills/docx/scripts/unpack_docx.py +29 -0
- package/server/assets/skills/docx/scripts/validate_template_manifest.py +60 -0
- package/server/assets/skills/docx/scripts/verify_anchor_atomicity.py +87 -0
- package/server/assets/skills/edit-deployed-website/SKILL.md +27 -0
- package/server/assets/skills/init/SKILL.md +137 -0
- package/server/assets/skills/lark-tools/SKILL.md +321 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-approval/SKILL.md +48 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-attendance/SKILL.md +57 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/SKILL.md +372 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/dashboard-block-data-config.md +350 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/examples.md +130 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/formula-field-guide.md +735 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-advperm-disable.md +83 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-advperm-enable.md +80 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-base-copy.md +74 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-base-create.md +68 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-base-get.md +39 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-arrange.md +83 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-block-create.md +108 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-block-delete.md +46 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-block-get.md +57 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-block-list.md +53 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-block-update.md +84 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-create.md +73 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-delete.md +44 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-get.md +59 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-list.md +52 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard-update.md +69 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-dashboard.md +240 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-data-query.md +375 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field-create.md +104 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field-delete.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field-get.md +42 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field-list.md +44 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field-search-options.md +48 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field-update.md +97 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-field.md +22 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-create.md +87 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-delete.md +64 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-get.md +68 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-list.md +73 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-questions-create.md +118 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-questions-delete.md +68 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-questions-list.md +84 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-questions-update.md +92 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-questions.md +23 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form-update.md +82 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-form.md +24 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-history.md +16 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-batch-create.md +76 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-batch-update.md +71 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-delete.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-get.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-history-list.md +86 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-list.md +83 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-search.md +72 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-upload-attachment.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record-upsert.md +89 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-record.md +28 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-role-create.md +89 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-role-delete.md +83 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-role-get.md +87 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-role-list.md +81 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-role-update.md +94 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-shortcut-field-properties.md +679 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-shortcut-record-value.md +200 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-table-create.md +62 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-table-delete.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-table-get.md +46 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-table-list.md +43 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-table-update.md +49 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-table.md +20 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-create.md +83 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-delete.md +48 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get-card.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get-filter.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get-group.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get-sort.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get-timebar.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get-visible-fields.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-get.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-list.md +44 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-rename.md +44 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-set-card.md +81 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-set-filter.md +92 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-set-group.md +77 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-set-sort.md +77 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-set-timebar.md +79 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view-set-visible-fields.md +73 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-view.md +44 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-create.md +180 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-disable.md +94 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-enable.md +94 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-get.md +147 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-guide.md +718 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-list.md +123 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-schema.md +935 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow-update.md +167 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workflow.md +23 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lark-base-workspace.md +18 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/lookup-field-guide.md +508 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-base/references/role-config.md +532 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/SKILL.md +143 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-agenda.md +78 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-create.md +109 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-freebusy.md +124 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-room-find.md +89 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-rsvp.md +42 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-schedule-meeting.md +194 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-calendar/references/lark-calendar-suggestion.md +125 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-contact/SKILL.md +23 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-contact/references/lark-contact-get-user.md +47 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-contact/references/lark-contact-search-user.md +39 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/SKILL.md +189 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-create.md +673 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-fetch.md +120 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-media-download.md +50 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-media-insert.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-media-preview.md +41 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-search.md +213 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-update.md +264 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-doc/references/lark-doc-whiteboard-update.md +6 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/SKILL.md +294 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-add-comment.md +99 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-create-folder.md +73 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-create-shortcut.md +103 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-delete.md +79 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-download.md +31 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-export-download.md +50 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-export.md +100 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-import.md +132 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-move.md +120 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-reactions.md +113 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-task-result.md +264 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-drive/references/lark-drive-upload.md +67 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-event/SKILL.md +21 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-event/references/lark-event-subscribe.md +217 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/SKILL.md +140 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-chat-create.md +156 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-chat-identity.md +55 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-chat-messages-list.md +142 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-chat-search.md +114 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-chat-update.md +84 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-messages-mget.md +95 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-messages-reply.md +222 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-messages-resources-download.md +94 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-messages-search.md +213 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-messages-send.md +223 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-reactions.md +297 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-im/references/lark-im-threads-messages-list.md +111 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/SKILL.md +550 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-draft-create.md +110 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-draft-edit.md +376 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-forward.md +208 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-message.md +201 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-messages.md +108 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-reply-all.md +184 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-reply.md +220 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-send.md +178 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-signature.md +98 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-thread.md +111 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-triage.md +122 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-mail/references/lark-mail-watch.md +94 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-minutes/SKILL.md +116 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-minutes/references/lark-minutes-download.md +119 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-minutes/references/lark-minutes-search.md +180 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-openapi-explorer/SKILL.md +153 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-shared/SKILL.md +141 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/SKILL.md +262 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-add-dimension.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-append.md +56 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-batch-set-style.md +53 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-create-filter-view-condition.md +42 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-create-filter-view.md +42 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-create.md +69 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-delete-dimension.md +53 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-delete-dropdown.md +46 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-delete-filter-view-condition.md +26 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-delete-filter-view.md +25 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-export.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-find.md +62 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-formula.md +89 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-get-dropdown.md +43 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-get-filter-view-condition.md +27 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-get-filter-view.md +26 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-info.md +43 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-insert-dimension.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-list-filter-view-conditions.md +28 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-list-filter-views.md +26 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-merge-cells.md +47 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-move-dimension.md +52 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-read.md +61 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-replace.md +62 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-set-dropdown.md +62 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-set-style.md +71 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-unmerge-cells.md +46 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-update-dimension.md +60 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-update-dropdown.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-update-filter-view-condition.md +27 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-update-filter-view.md +24 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-write-image.md +65 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-sheets/references/lark-sheets-write.md +60 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-skill-maker/SKILL.md +85 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/SKILL.md +368 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/examples.md +179 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/lark-slides-create.md +137 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/lark-slides-media-upload.md +143 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +215 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +119 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/lark-slides-xml-presentations-get.md +94 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/slide-templates.md +199 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/slides_demo.xml +226 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/slides_xml_schema_definition.xml +3004 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/xml-format-guide.md +369 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-slides/references/xml-schema-quick-ref.md +215 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/SKILL.md +151 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-assign.md +35 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-comment.md +28 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-complete.md +27 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-create.md +51 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-followers.md +32 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-get-my-tasks.md +55 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-get-related-tasks.md +53 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-reminder.md +36 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-reopen.md +27 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-search.md +41 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-set-ancestor.md +32 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-subscribe-event.md +86 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-tasklist-create.md +35 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-tasklist-members.md +36 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-tasklist-search.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-tasklist-task-add.md +38 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-task/references/lark-task-update.md +37 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-vc/SKILL.md +143 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-vc/references/lark-vc-notes.md +126 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-vc/references/lark-vc-recording.md +141 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-vc/references/lark-vc-search.md +159 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard/SKILL.md +118 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard/references/lark-whiteboard-query.md +49 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard/references/lark-whiteboard-update.md +97 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/SKILL.md +236 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/references/connectors.md +102 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/references/content.md +40 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/references/layout.md +374 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/references/schema.md +333 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/references/style.md +318 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/references/typography.md +73 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/architecture.md +433 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/bar-chart.md +181 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/comparison.md +135 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/fishbone.md +238 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/flowchart.md +185 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/flywheel.md +195 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/funnel.md +101 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/line-chart.md +208 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/mermaid.md +136 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/milestone.md +139 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/organization.md +175 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/pyramid.md +99 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/swimlane.md +370 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-whiteboard-cli/scenes/treemap.md +210 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-wiki/SKILL.md +93 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-wiki/references/lark-wiki-move.md +183 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-wiki/references/lark-wiki-node-create.md +127 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-workflow-meeting-summary/SKILL.md +99 -0
- package/server/assets/skills/lark-tools/cli-skills/lark-workflow-standup-report/SKILL.md +120 -0
- package/server/assets/skills/lark-tools/references/commands-macos-linux.md +42 -0
- package/server/assets/skills/lark-tools/references/commands-windows-powershell.md +54 -0
- package/server/assets/skills/lark-tools/references/storage-paths.md +21 -0
- package/server/assets/skills/llm-call/SKILL.md +50 -0
- package/server/assets/skills/llm-call/scripts/llm_call.py +458 -0
- package/server/assets/skills/mcode-tools-master/SKILL.md +133 -0
- package/server/assets/skills/pdf/SKILL.md +287 -0
- package/server/assets/skills/pdf/docs/advanced-reference.md +711 -0
- package/server/assets/skills/pdf/docs/ai-voice-cloning-regulatory-report-case.md +303 -0
- package/server/assets/skills/pdf/docs/annual-report-financial-digest-latex-case.md +233 -0
- package/server/assets/skills/pdf/docs/create-guide.md +438 -0
- package/server/assets/skills/pdf/docs/design-guide.md +204 -0
- package/server/assets/skills/pdf/docs/docx-contract-roundtrip-professional-case.md +328 -0
- package/server/assets/skills/pdf/docs/email-translation-goldman-two-sessions-case.md +346 -0
- package/server/assets/skills/pdf/docs/forms-guide.md +462 -0
- package/server/assets/skills/pdf/docs/html-pdf-spec.md +500 -0
- package/server/assets/skills/pdf/docs/italy-schengen-visa-acroform-case.md +22 -0
- package/server/assets/skills/pdf/docs/latex-academic-thesis-guide.md +234 -0
- package/server/assets/skills/pdf/docs/latex-technical-book-guide.md +112 -0
- package/server/assets/skills/pdf/docs/markdown-static-academic-data-viz-case.md +280 -0
- package/server/assets/skills/pdf/docs/pitfalls-index.md +798 -0
- package/server/assets/skills/pdf/docs/read-guide.md +358 -0
- package/server/assets/skills/pdf/docs/reformat-guide.md +238 -0
- package/server/assets/skills/pdf/docs/skill-readme-archive.md +152 -0
- package/server/assets/skills/pdf/docs/troubleshooting.md +86 -0
- package/server/assets/skills/pdf/docs/vision-guide.md +188 -0
- package/server/assets/skills/pdf/scripts/__init__.py +0 -0
- package/server/assets/skills/pdf/scripts/_pdf_read_lib.py +284 -0
- package/server/assets/skills/pdf/scripts/fill/__init__.py +0 -0
- package/server/assets/skills/pdf/scripts/fill/acroform_apply.py +153 -0
- package/server/assets/skills/pdf/scripts/fill/overlay_apply.py +109 -0
- package/server/assets/skills/pdf/scripts/lib/__init__.py +0 -0
- package/server/assets/skills/pdf/scripts/lib/acroform_io.py +170 -0
- package/server/assets/skills/pdf/scripts/lib/cli_utils.py +41 -0
- package/server/assets/skills/pdf/scripts/lib/geometry.py +79 -0
- package/server/assets/skills/pdf/scripts/make.sh +388 -0
- package/server/assets/skills/pdf/scripts/merge.py +112 -0
- package/server/assets/skills/pdf/scripts/pdf_inspect/__init__.py +0 -0
- package/server/assets/skills/pdf/scripts/pdf_inspect/acroform_inspect.py +52 -0
- package/server/assets/skills/pdf/scripts/pdf_inspect/acroform_probe.py +57 -0
- package/server/assets/skills/pdf/scripts/pdf_inspect/layout_scan.py +164 -0
- package/server/assets/skills/pdf/scripts/read_pdf_vision.py +473 -0
- package/server/assets/skills/pdf/scripts/reformat_parse.py +181 -0
- package/server/assets/skills/pdf/scripts/render/__init__.py +0 -0
- package/server/assets/skills/pdf/scripts/render/overlay_preview.py +86 -0
- package/server/assets/skills/pdf/scripts/render/page_rasterize.py +85 -0
- package/server/assets/skills/pdf/scripts/render_html.cjs +205 -0
- package/server/assets/skills/pdf/scripts/validate/__init__.py +0 -0
- package/server/assets/skills/pdf/scripts/validate/geometry_lint.py +124 -0
- package/server/assets/skills/pdf/templates/INDEX.md +97 -0
- package/server/assets/skills/pdf/templates/bilingual-menu-premium/README.md +175 -0
- package/server/assets/skills/pdf/templates/bilingual-menu-premium/skeleton.html +343 -0
- package/server/assets/skills/pdf/templates/brand-guide-2page/README.md +140 -0
- package/server/assets/skills/pdf/templates/brand-guide-2page/cases/minimax-web-brand-guide/README.md +155 -0
- package/server/assets/skills/pdf/templates/brand-guide-2page/cases/minimax-web-brand-guide/source.html +188 -0
- package/server/assets/skills/pdf/templates/brand-guide-2page/skeleton.html +264 -0
- package/server/assets/skills/pdf/templates/data-viz-report/README.md +234 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/annual-report-financial-digest-latex/README.md +12 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/annual-report-financial-digest-latex/build_charts.py +341 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/annual-report-financial-digest-latex/source.tex +161 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/apple-m-ai-static-academic/assets/fig_1_1_table_1_1_specs.png +0 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/apple-m-ai-static-academic/assets/fig_1_2_table_1_2_geekbench.png +0 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/apple-m-ai-static-academic/assets/fig_1_3_mmax_generation.png +0 -0
- package/server/assets/skills/pdf/templates/data-viz-report/cases/apple-m-ai-static-academic/source.html +656 -0
- package/server/assets/skills/pdf/templates/data-viz-report/skeleton.html +835 -0
- package/server/assets/skills/pdf/templates/form-fill-acroform/README.md +198 -0
- package/server/assets/skills/pdf/templates/form-fill-acroform/cases/italy-schengen-visa-example/USER-FINAL-SUMMARY.template.md +42 -0
- package/server/assets/skills/pdf/templates/form-fill-acroform/cases/italy-schengen-visa-example/extract_pdfs_key_info.py +80 -0
- package/server/assets/skills/pdf/templates/form-fill-acroform/cases/italy-schengen-visa-example/field_values.case.json +233 -0
- package/server/assets/skills/pdf/templates/form-fill-acroform/field_values.template.json +118 -0
- package/server/assets/skills/pdf/templates/latex-academic-thesis/README.md +146 -0
- package/server/assets/skills/pdf/templates/latex-academic-thesis/source.tex +334 -0
- package/server/assets/skills/pdf/templates/latex-technical-book/README.md +130 -0
- package/server/assets/skills/pdf/templates/latex-technical-book/README.template-source.md +62 -0
- package/server/assets/skills/pdf/templates/latex-technical-book/source.tex +439 -0
- package/server/assets/skills/pdf/templates/multi-article-aggregator/README.md +148 -0
- package/server/assets/skills/pdf/templates/multi-article-aggregator/pipeline.md +223 -0
- package/server/assets/skills/pdf/templates/multilang-research-report/README.md +146 -0
- package/server/assets/skills/pdf/templates/multilang-research-report/cases/ai-voice-cloning-regulatory/source.html +244 -0
- package/server/assets/skills/pdf/templates/multilang-research-report/skeleton.html +242 -0
- package/server/assets/skills/pdf/templates/reformat-default/README.md +137 -0
- package/server/assets/skills/pdf/templates/reformat-default/cases/pku-contract-roundtrip/docx_engine.py +68 -0
- package/server/assets/skills/pdf/templates/reformat-default/cases/pku-contract-roundtrip/source.html +231 -0
- package/server/assets/skills/pdf/templates/reformat-default/cases/pku-contract-roundtrip/source.md +196 -0
- package/server/assets/skills/pdf/templates/reformat-default/skeleton.html +204 -0
- package/server/assets/skills/pdf/templates/translate-preserve-layout/README.md +147 -0
- package/server/assets/skills/pdf/templates/translate-preserve-layout/cases/goldman-china-two-sessions-cn.html +1660 -0
- package/server/assets/skills/pdf/templates/translate-preserve-layout/skeleton.html +96 -0
- package/server/assets/skills/pdf/templates/translate-preserve-layout/terminology.template.json +66 -0
- package/server/assets/skills/pptx/SKILL.md +285 -0
- package/server/assets/skills/pptx/references/design-system.md +424 -0
- package/server/assets/skills/pptx/references/editing.md +162 -0
- package/server/assets/skills/pptx/references/element-map.md +229 -0
- package/server/assets/skills/pptx/references/pitfalls.md +205 -0
- package/server/assets/skills/pptx/references/pptxgenjs.md +420 -0
- package/server/assets/skills/pptx/references/preview-selection-writeback.md +65 -0
- package/server/assets/skills/pptx/references/python-pptx-recipes.md +63 -0
- package/server/assets/skills/pptx/references/slide-types.md +413 -0
- package/server/assets/skills/pptx/scripts/audit_pptx.py +708 -0
- package/server/assets/skills/pptx/scripts/extract_comments.py +468 -0
- package/server/assets/skills/pptx/scripts/extract_images.py +226 -0
- package/server/assets/skills/pptx/scripts/extract_pptx.py +285 -0
- package/server/assets/skills/pptx/scripts/mavis-ppt-map.cjs +280 -0
- package/server/assets/skills/pptx/scripts/pdf2png.swift +203 -0
- package/server/assets/skills/pptx/scripts/pptx-screenshot.sh +105 -0
- package/server/assets/skills/resume-codex/SKILL.md +55 -0
- package/server/assets/skills/resume-codex/scripts/session-reader.mjs +445 -0
- package/server/assets/skills/skill-creator/SKILL.md +190 -0
- package/server/assets/skills/skill-creator/references/anti-patterns.md +149 -0
- package/server/assets/skills/skill-creator/references/commands-macos-linux.md +38 -0
- package/server/assets/skills/skill-creator/references/commands-windows-powershell.md +48 -0
- package/server/assets/skills/skill-creator/references/description-rubric.md +83 -0
- package/server/assets/skills/skill-creator/references/skill-template.md +101 -0
- package/server/assets/skills/skill-creator/references/when-to-bundle-scripts.md +139 -0
- package/server/assets/skills/skill-creator/scripts/lint-skill.js +226 -0
- package/server/assets/skills/skill-refiner/SKILL.md +139 -0
- package/server/assets/skills/visual-page/SKILL.md +196 -0
- package/server/assets/skills/x-link-reader/SKILL.md +110 -0
- package/server/assets/skills/xlsx/SKILL.md +501 -0
- package/server/assets/skills/xlsx/docs/advanced-reference.md +410 -0
- package/server/assets/skills/xlsx/docs/cases/superstore-multiformat/conversion_manifest.example.json +49 -0
- package/server/assets/skills/xlsx/docs/cases/superstore-multiformat/superstore_orders_print.html +17 -0
- package/server/assets/skills/xlsx/docs/conventions-guide.md +217 -0
- package/server/assets/skills/xlsx/docs/create-edit-guide.md +410 -0
- package/server/assets/skills/xlsx/docs/pitfalls-index.md +760 -0
- package/server/assets/skills/xlsx/docs/raw-xml-escape-hatch.md +201 -0
- package/server/assets/skills/xlsx/docs/recalc-guide.md +295 -0
- package/server/assets/skills/xlsx/docs/superstore-multiformat-conversion-case.md +413 -0
- package/server/assets/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/server/assets/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/server/assets/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/server/assets/skills/xlsx/scripts/office/pack.py +159 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/server/assets/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/server/assets/skills/xlsx/scripts/office/soffice.py +191 -0
- package/server/assets/skills/xlsx/scripts/office/unpack.py +132 -0
- package/server/assets/skills/xlsx/scripts/office/validate.py +117 -0
- package/server/assets/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/server/assets/skills/xlsx/scripts/office/validators/base.py +851 -0
- package/server/assets/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/server/assets/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/server/assets/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/server/assets/skills/xlsx/scripts/recalc.py +450 -0
- package/server/mcode-tools.js +2 -0
- package/server/package-info.json +1 -1
- package/server/server.js +2 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# conventions-guide — financial-model conventions for Excel outputs
|
|
2
|
+
|
|
3
|
+
> The full rationale behind the tables in [`SKILL.md`](../SKILL.md) §5 —
|
|
4
|
+
> color coding, number formatting, hardcode source documentation, formula
|
|
5
|
+
> construction discipline, and template-preservation rules. Anything that
|
|
6
|
+
> reviewers would otherwise ask "why this and not that" goes here so the
|
|
7
|
+
> SKILL stays a quick scan and the deeper material is one click away.
|
|
8
|
+
|
|
9
|
+
## 1. Color coding
|
|
10
|
+
|
|
11
|
+
Default palette unless the user or the existing template overrides it.
|
|
12
|
+
Black is intentionally listed first: a reviewer scanning the workbook
|
|
13
|
+
should see one color signaling "this is computed", one signaling "this
|
|
14
|
+
is an input I can change", and three signaling links of increasing
|
|
15
|
+
risk. The anti-pattern column captures the way each color is most often
|
|
16
|
+
misused in the wild.
|
|
17
|
+
|
|
18
|
+
| Color | RGB | Meaning | Anti-pattern |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| Black | `0,0,0` | Every formula and computed result | Setting `=A1+B1` to blue makes the reviewer think it is a manual input |
|
|
21
|
+
| Blue | `0,0,255` | Hard-coded inputs and scenario assumptions | Setting `=Sheet2!A1` (a sheet link) to blue makes it look like an assumption |
|
|
22
|
+
| Green | `0,128,0` | Same-workbook cross-sheet links | Setting `=[Other.xlsx]Sheet1!A1` to green hides the external dependency signal |
|
|
23
|
+
| Red | `255,0,0` | Cross-file external links | Setting same-sheet `=A1` to red implies a fake external dependency |
|
|
24
|
+
| Yellow (fill) | `255,255,0` background | Critical assumptions awaiting review | Coloring every cell yellow drowns out the cells that actually need a second look |
|
|
25
|
+
|
|
26
|
+
Why "Black first": when a reviewer opens a model the first thing they
|
|
27
|
+
look for is whether any formula was accidentally typed as a number.
|
|
28
|
+
Putting black at the top of the legend mirrors that scan order.
|
|
29
|
+
|
|
30
|
+
## 2. Number formatting
|
|
31
|
+
|
|
32
|
+
Default formats unless the existing template specifies otherwise.
|
|
33
|
+
"Rationale" is what to point at when a reviewer asks why a column looks
|
|
34
|
+
the way it does.
|
|
35
|
+
|
|
36
|
+
| Type | Format | Rationale |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Year | text (`"FY2025"`) | Numeric `2025` gets thousands-separated to `2,025` by the corporate template; storing as text disables the auto-format |
|
|
39
|
+
| Currency | `$#,##0` or `¥#,##0` with the unit (`mm` / `bn` / `k`) in the header | The unit belongs in one place per column, not repeated on every cell — header `ARR (¥mm)` keeps the cells uncluttered |
|
|
40
|
+
| Zero | `"$#,##0;($#,##0);-"` (or the `0.0%` equivalent) | A literal `0` reads as data; an em-dash reads as "zero by intent" — separates a missing value from a real zero |
|
|
41
|
+
| Percentage | `0.0%` | One decimal is enough for reviewer scanning; `0.00%` reads as false precision, `0%` loses sign on small movements |
|
|
42
|
+
| Multiple | `0.0x` | Used for valuation multiples (EV/EBITDA, P/S, P/E) and ratio-style headers like `Token unit price 1.2x` |
|
|
43
|
+
| Negative | `(123)` (parentheses) | Accounting convention; minus signs blend into table grids and read as dashes at small font sizes |
|
|
44
|
+
| Hardcode | `Source: …` annotation in the next column or as a cell comment (see §3) | Reviewer can audit every input back to its source without scrolling around |
|
|
45
|
+
|
|
46
|
+
MiniMax-flavored sample headers: `ARR (¥mm)` / `Tokens (bn)` / `MAU
|
|
47
|
+
(mm)` / `Token unit price 1.2x` / `MAU YoY 0.0%`. Keep the unit in the
|
|
48
|
+
header, not in the cell.
|
|
49
|
+
|
|
50
|
+
## 3. Hardcode `Source:` documentation
|
|
51
|
+
|
|
52
|
+
Every hard-coded number should carry its provenance — either as a cell
|
|
53
|
+
comment or as a string in the adjacent column. The grammar is fixed so
|
|
54
|
+
downstream automation can grep for it:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Source: <system or document>, <date>, <locator>, <URL optional>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Five reference examples, spanning the source types reviewers see most:
|
|
61
|
+
|
|
62
|
+
| Source type | Example string |
|
|
63
|
+
|---|---|
|
|
64
|
+
| 10-K filing | `Source: AAPL 10-K FY2024, 2024-11-01, "Net sales by segment" table, https://www.sec.gov/...` |
|
|
65
|
+
| 10-Q filing | `Source: AAPL 10-Q FY2025 Q2, 2025-05-02, "Operating expenses" line 12` |
|
|
66
|
+
| Internal BI dashboard | `Source: MiniMax internal BI - MAU Dashboard, 2025-09-30, "moonshot-mau" view` |
|
|
67
|
+
| Interview transcript | `Source: User interview INT-2025-117, 2025-09-12, interviewee Z, page 4` |
|
|
68
|
+
| Market data terminal | `Source: Wind Terminal, 2025-08-15, AAPL.O closing price` / `Source: Bloomberg, 2025-08-15, AAPL US Equity PX_LAST` |
|
|
69
|
+
|
|
70
|
+
Date format is ISO `YYYY-MM-DD`; the locator must let a reader find the
|
|
71
|
+
exact cell in the source within ~30 seconds.
|
|
72
|
+
|
|
73
|
+
## 4. Formula construction rules
|
|
74
|
+
|
|
75
|
+
**The foundational rule: every computed value is a formula, not a
|
|
76
|
+
literal number.** Anything derivable from other cells — totals,
|
|
77
|
+
averages, ratios, percent changes, growth projections, lookups,
|
|
78
|
+
cross-sheet references — must be written as a live `=…` formula. Hard
|
|
79
|
+
numbers belong in §3 inputs only. Pasting a pre-computed total
|
|
80
|
+
(`125_430` instead of `=SUM(B2:B12)`) silently breaks the workbook
|
|
81
|
+
the moment any input cell changes; recalc cannot detect this because
|
|
82
|
+
the literal value evaluates fine — it just no longer reflects the
|
|
83
|
+
data. The four sub-rules below build on top of this principle and add
|
|
84
|
+
checks the model passes **before** running `scripts/recalc.py`.
|
|
85
|
+
recalc only catches errors that have already crystallised into a
|
|
86
|
+
`#REF!` / `#DIV/0!` marker; these checks catch the class of bugs that
|
|
87
|
+
produce a *wrong but not erroring* number.
|
|
88
|
+
|
|
89
|
+
**This rule applies regardless of how the value was computed during
|
|
90
|
+
authoring.** Even if pandas / polars / numpy / a one-line list
|
|
91
|
+
comprehension already produced the number in Python, the cell must
|
|
92
|
+
still hold the `=` formula referencing the source cells, not the
|
|
93
|
+
pre-computed result. The most common slip is loading raw data with
|
|
94
|
+
pandas, computing a derived column (`df["arr"] = df["mau"] *
|
|
95
|
+
df["price"]`), and writing the whole frame back with
|
|
96
|
+
`df.to_excel(...)`; that ships static numbers and undoes every
|
|
97
|
+
benefit of delivering a spreadsheet over a CSV. The right pattern is
|
|
98
|
+
to write only the **input columns** with pandas (or skip pandas
|
|
99
|
+
entirely and use openpyxl for everything), then emit each derived
|
|
100
|
+
column as `=B2*C2` etc. on the openpyxl side.
|
|
101
|
+
|
|
102
|
+
### 4.1 Assumption placement
|
|
103
|
+
|
|
104
|
+
All adjustable inputs live in a single dedicated **Assumptions** block
|
|
105
|
+
(usually a leading sheet or a clearly headlined region of the main
|
|
106
|
+
sheet). Downstream formulas reference these cells with `$`-locked
|
|
107
|
+
addresses so a fill-down does not silently skip them.
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
WRONG: =B5 * 1.05 // 5% growth hard-coded
|
|
111
|
+
RIGHT: =B5 * (1 + $B$6) // 5% growth lives in $B$6 (Assumptions)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Sensitivity analysis (changing one assumption and watching the model
|
|
115
|
+
react) is impossible if the assumption is buried inside a formula.
|
|
116
|
+
|
|
117
|
+
### 4.2 Off-by-one sanity check
|
|
118
|
+
|
|
119
|
+
Every range in a `SUM`, `AVERAGE`, `COUNTIF`, etc. should be counted
|
|
120
|
+
literally. `SUM(B2:B12)` covers eleven rows (`12 - 2 + 1`), not ten.
|
|
121
|
+
The most common bug is summing only the first ten rows of an eleven-row
|
|
122
|
+
table because the model author counted the gap rather than the cells.
|
|
123
|
+
|
|
124
|
+
Quick check: open the formula bar, click into the range reference,
|
|
125
|
+
LibreOffice highlights the cells — confirm the highlight matches the
|
|
126
|
+
data block.
|
|
127
|
+
|
|
128
|
+
### 4.3 Boundary value testing
|
|
129
|
+
|
|
130
|
+
Before delivery, replace the lead inputs with edge cases and recalc:
|
|
131
|
+
|
|
132
|
+
| Input | Why test |
|
|
133
|
+
|---|---|
|
|
134
|
+
| `0` | Catches `#DIV/0!` and "any percentage of zero is still zero" semantics |
|
|
135
|
+
| Negative | Catches `LOG(<0)`, `SQRT(<0)`, and IRR convergence failures |
|
|
136
|
+
| Very large | Catches integer overflow in xlsxwriter and float underflow in `LOG10` chains |
|
|
137
|
+
| `NaN` (blank) | Catches `IFERROR` gaps and pandas → openpyxl conversion losses |
|
|
138
|
+
| Empty string | Catches `VALUE("")` failures and silent string concatenation |
|
|
139
|
+
|
|
140
|
+
Run `scripts/recalc.py` after each substitution. A real `errors_found`
|
|
141
|
+
JSON is the cheapest signal — far cheaper than a reviewer noticing a
|
|
142
|
+
silently-wrong percentile column three days later.
|
|
143
|
+
|
|
144
|
+
### 4.4 Circular reference avoidance
|
|
145
|
+
|
|
146
|
+
LibreOffice's `calculateAll()` fails loudly on circular references —
|
|
147
|
+
`recalc.py` will surface a `Circular reference detected` JSON before
|
|
148
|
+
ever returning a `total_formulas` count. Pre-check with openpyxl
|
|
149
|
+
before saving any model that wires inputs back into outputs:
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
from openpyxl import load_workbook
|
|
153
|
+
|
|
154
|
+
book = load_workbook("model.xlsx")
|
|
155
|
+
seen = set()
|
|
156
|
+
for sheet in book.worksheets:
|
|
157
|
+
for row in sheet.iter_rows():
|
|
158
|
+
for cell in row:
|
|
159
|
+
if isinstance(cell.value, str) and cell.value.startswith("="):
|
|
160
|
+
seen.add(f"{sheet.title}!{cell.coordinate}")
|
|
161
|
+
# Then walk references with a graph library (e.g. networkx) to find cycles.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Iteration budget should always be the result of an explicit decision —
|
|
165
|
+
never leave "Iterative calculation" enabled by default.
|
|
166
|
+
|
|
167
|
+
## 5. Preserve existing templates
|
|
168
|
+
|
|
169
|
+
When updating someone else's template, **observe before edit**. Walk
|
|
170
|
+
the checklist below before changing a single cell:
|
|
171
|
+
|
|
172
|
+
- **Colors** — sample the current font / fill / border colors and
|
|
173
|
+
reuse the exact RGB triplets, even if they violate this skill's
|
|
174
|
+
defaults.
|
|
175
|
+
- **Column widths** — note the existing widths; resizing for "tidiness"
|
|
176
|
+
always breaks something downstream (a chart, a print layout, a
|
|
177
|
+
conditional format range).
|
|
178
|
+
- **Fonts** — if the template uses 宋体 / SimSun / a custom corporate
|
|
179
|
+
font, do not switch to Calibri.
|
|
180
|
+
- **Merged cells** — record every merged region before mutating the
|
|
181
|
+
sheet (see [`create-edit-guide.md`](create-edit-guide.md) §9).
|
|
182
|
+
- **Number formats** — copy the existing format string verbatim;
|
|
183
|
+
reformatting a cell will replace it.
|
|
184
|
+
- **Conditional formatting** — list the rules with `for cf in
|
|
185
|
+
sheet.conditional_formatting:` before editing the range; insertions
|
|
186
|
+
shift the rule's anchor.
|
|
187
|
+
|
|
188
|
+
Customer template conventions always override this skill's defaults.
|
|
189
|
+
|
|
190
|
+
## 6. Code style for Python operating Excel
|
|
191
|
+
|
|
192
|
+
These rules apply to the Python that drives openpyxl / xlsxwriter, not
|
|
193
|
+
to the Excel files themselves.
|
|
194
|
+
|
|
195
|
+
- **No tutorial comments.** Comments explain *why*, not *what* — the
|
|
196
|
+
reader knows what `book.save("foo.xlsx")` does.
|
|
197
|
+
- **No `print` debugging in committed code.** Use `logging.debug` or
|
|
198
|
+
return values; `print` lines pollute downstream stdout that callers
|
|
199
|
+
parse for JSON.
|
|
200
|
+
- **Business-named variables.** `book` / `sheet` / `frame` for the
|
|
201
|
+
workbook / worksheet / DataFrame. The terse `wb` / `ws` / `df`
|
|
202
|
+
reads as scratch-pad code; the full names match the financial-model
|
|
203
|
+
vocabulary the reviewer is already in.
|
|
204
|
+
- **List comprehensions over manual `for` accumulators** when the body
|
|
205
|
+
is a single expression — keeps the code at one screen.
|
|
206
|
+
|
|
207
|
+
## 7. Cell comment style
|
|
208
|
+
|
|
209
|
+
For the comments inside the workbook (right-click → Insert Comment):
|
|
210
|
+
|
|
211
|
+
- **Never use ALL CAPS.** Reviewers scanning the thumbnail interpret
|
|
212
|
+
all-caps as an error warning, even when the content is benign.
|
|
213
|
+
- **Font size 9–10 pt.** Smaller is unreadable on retina displays;
|
|
214
|
+
larger crops the comment box and looks shouty.
|
|
215
|
+
- **Cap at ~200 characters.** If the rationale is longer, link to a
|
|
216
|
+
shared doc or memo (`See: BI/MAU forecast methodology, 2025-09`)
|
|
217
|
+
rather than pasting the full text into the cell.
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# create-edit-guide — openpyxl + xlsxwriter cookbook
|
|
2
|
+
|
|
3
|
+
> Detailed recipes for the two write-side libraries. The minimal
|
|
4
|
+
> one-liners live in [`SKILL.md`](../SKILL.md) §3; this file is for
|
|
5
|
+
> when a one-liner is not enough — full styling, charts, conditional
|
|
6
|
+
> formatting, in-place edits, and the merged-cell / shared-strings
|
|
7
|
+
> gotchas.
|
|
8
|
+
|
|
9
|
+
## 1. Creating a new workbook (openpyxl)
|
|
10
|
+
|
|
11
|
+
A workbook with formulas, named range, headline styling, and tuned
|
|
12
|
+
column widths — the smallest end-to-end example covering everything
|
|
13
|
+
`recalc.py` will validate later:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from openpyxl import Workbook
|
|
17
|
+
from openpyxl.styles import Alignment, Font, PatternFill
|
|
18
|
+
from openpyxl.workbook.defined_name import DefinedName
|
|
19
|
+
|
|
20
|
+
book = Workbook()
|
|
21
|
+
sheet = book.active
|
|
22
|
+
sheet.title = "MAU_Forecast"
|
|
23
|
+
|
|
24
|
+
# Assumptions block — single source of truth for tunable inputs.
|
|
25
|
+
# Live in $G$1 so $-locked references in row formulas survive a fill-down.
|
|
26
|
+
sheet["F1"], sheet["G1"] = "Take-rate", 0.85
|
|
27
|
+
|
|
28
|
+
headers = ["Quarter", "MAU (mm)", "Tokens (bn)", "ARR (¥mm)"]
|
|
29
|
+
for col_idx, label in enumerate(headers, start=1):
|
|
30
|
+
sheet.cell(row=1, column=col_idx, value=label)
|
|
31
|
+
|
|
32
|
+
rows = [("2025Q3", 148, 27), ("2025Q4", 165, 31), ("2026Q1", 188, 36)]
|
|
33
|
+
for r_idx, (quarter, mau, tokens) in enumerate(rows, start=2):
|
|
34
|
+
sheet.cell(row=r_idx, column=1, value=quarter)
|
|
35
|
+
sheet.cell(row=r_idx, column=2, value=mau)
|
|
36
|
+
sheet.cell(row=r_idx, column=3, value=tokens)
|
|
37
|
+
# Derived ARR — references inputs B/C and the Assumptions cell $G$1
|
|
38
|
+
# ($-locked so a fill-down doesn't drift). Never hard-code 0.85 in
|
|
39
|
+
# the formula — putting it in $G$1 lets the user run sensitivity by
|
|
40
|
+
# editing one cell instead of every row.
|
|
41
|
+
sheet.cell(row=r_idx, column=4, value=f"=B{r_idx}*C{r_idx}*$G$1")
|
|
42
|
+
|
|
43
|
+
title = sheet.cell(row=1, column=1)
|
|
44
|
+
title.font = Font(bold=True, color="000000")
|
|
45
|
+
title.fill = PatternFill("solid", start_color="DDEBF7")
|
|
46
|
+
title.alignment = Alignment(horizontal="center")
|
|
47
|
+
|
|
48
|
+
for letter, width in zip("ABCDEFG", (10, 12, 14, 14, 4, 12, 8)):
|
|
49
|
+
sheet.column_dimensions[letter].width = width
|
|
50
|
+
|
|
51
|
+
book.defined_names["MAU_Forecast_Range"] = DefinedName(
|
|
52
|
+
name="MAU_Forecast_Range",
|
|
53
|
+
attr_text="MAU_Forecast!$A$1:$D$4",
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
book.save("mau_forecast.xlsx")
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The four building blocks — header row, data rows, headline styling,
|
|
60
|
+
named range — are the four things almost every output workbook needs.
|
|
61
|
+
Note the take-rate lives in `$G$1` (the Assumptions cell), not embedded
|
|
62
|
+
in the formula as a literal `0.85`; this is the rule from
|
|
63
|
+
[`conventions-guide.md`](conventions-guide.md) §4.1 in action.
|
|
64
|
+
|
|
65
|
+
## 2. Editing an existing workbook (openpyxl)
|
|
66
|
+
|
|
67
|
+
Open with `load_workbook`, mutate, save back. `data_only=False` (the
|
|
68
|
+
default) is the only safe mode for read-modify-write — see §7.
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from openpyxl import load_workbook
|
|
72
|
+
|
|
73
|
+
book = load_workbook("mau_forecast.xlsx")
|
|
74
|
+
sheet = book.active # also: book["MAU_Forecast"]
|
|
75
|
+
|
|
76
|
+
for name in book.sheetnames:
|
|
77
|
+
print("discovered sheet:", name)
|
|
78
|
+
|
|
79
|
+
sheet.insert_rows(idx=3, amount=1)
|
|
80
|
+
sheet.delete_cols(idx=4, amount=1)
|
|
81
|
+
sheet.cell(row=3, column=1, value="2025Q4")
|
|
82
|
+
|
|
83
|
+
detail = book.create_sheet(title="Detail", index=1)
|
|
84
|
+
detail.cell(row=1, column=1, value="Cohort")
|
|
85
|
+
detail.cell(row=1, column=2, value="Retention")
|
|
86
|
+
|
|
87
|
+
book.remove(book["Sheet1"]) if "Sheet1" in book.sheetnames else None
|
|
88
|
+
book.save("mau_forecast_v2.xlsx")
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Insertions and deletions shift formulas referencing the moved range —
|
|
92
|
+
re-run `scripts/recalc.py` after every structural edit and resolve any
|
|
93
|
+
`#REF!` flagged in the JSON.
|
|
94
|
+
|
|
95
|
+
## 3. Cell styling deep dive
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
|
|
99
|
+
|
|
100
|
+
cell = sheet["B2"]
|
|
101
|
+
cell.font = Font(name="Calibri", size=11, bold=True, color="000000")
|
|
102
|
+
cell.fill = PatternFill("solid", start_color="FFF2CC")
|
|
103
|
+
cell.alignment = Alignment(horizontal="right", vertical="center", wrap_text=True)
|
|
104
|
+
cell.border = Border(
|
|
105
|
+
left=Side(style="thin", color="999999"), right=Side(style="thin", color="999999"),
|
|
106
|
+
top=Side(style="medium", color="333333"), bottom=Side(style="medium", color="333333"),
|
|
107
|
+
)
|
|
108
|
+
cell.number_format = "¥#,##0.00;(¥#,##0.00);-"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Styles are immutable per cell — a new `Font(...)` replaces the previous
|
|
112
|
+
one, not merge fields. Build one `Font` / `Fill` / `Border` and assign
|
|
113
|
+
the same instance across many cells.
|
|
114
|
+
|
|
115
|
+
## 4. Conditional formatting
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
from openpyxl.formatting.rule import (
|
|
119
|
+
ColorScaleRule, DataBarRule, FormulaRule,
|
|
120
|
+
)
|
|
121
|
+
from openpyxl.styles import PatternFill
|
|
122
|
+
|
|
123
|
+
# 4.1 Color scale — gradient by value, useful for cohort heatmaps
|
|
124
|
+
sheet.conditional_formatting.add(
|
|
125
|
+
"B2:B100",
|
|
126
|
+
ColorScaleRule(start_type="min", start_color="F8696B",
|
|
127
|
+
mid_type="percentile", mid_value=50, mid_color="FFEB84",
|
|
128
|
+
end_type="max", end_color="63BE7B"),
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
# 4.2 Data bar — inline bar inside the cell
|
|
132
|
+
sheet.conditional_formatting.add(
|
|
133
|
+
"C2:C100",
|
|
134
|
+
DataBarRule(start_type="min", end_type="max", color="638EC6"),
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# 4.3 Custom formula — highlight rows where ARR drops vs prior period
|
|
138
|
+
fill_red = PatternFill("solid", start_color="FFC7CE")
|
|
139
|
+
sheet.conditional_formatting.add(
|
|
140
|
+
"A2:D100",
|
|
141
|
+
FormulaRule(formula=["$D2<$D1"], fill=fill_red),
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Custom formulas use the **active row** as the reference (`$D2<$D1` =
|
|
146
|
+
"current row's D less than previous row's D"); double-check by
|
|
147
|
+
extending the range manually in Excel before delivery.
|
|
148
|
+
|
|
149
|
+
## 5. Charts
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
from openpyxl.chart import BarChart, LineChart, Reference
|
|
153
|
+
|
|
154
|
+
# 5.1 BarChart — quarterly MAU comparison
|
|
155
|
+
bar = BarChart()
|
|
156
|
+
bar.title = "MAU by Quarter"
|
|
157
|
+
bar.y_axis.title, bar.x_axis.title = "MAU (mm)", "Quarter"
|
|
158
|
+
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=5)
|
|
159
|
+
labels = Reference(sheet, min_col=1, min_row=2, max_row=5)
|
|
160
|
+
bar.add_data(data, titles_from_data=True)
|
|
161
|
+
bar.set_categories(labels)
|
|
162
|
+
sheet.add_chart(bar, "F2")
|
|
163
|
+
|
|
164
|
+
# 5.2 LineChart — ARR trend
|
|
165
|
+
line = LineChart()
|
|
166
|
+
line.title = "ARR Trend"
|
|
167
|
+
arr_ref = Reference(sheet, min_col=4, min_row=1, max_col=4, max_row=5)
|
|
168
|
+
line.add_data(arr_ref, titles_from_data=True)
|
|
169
|
+
line.set_categories(labels)
|
|
170
|
+
sheet.add_chart(line, "F18")
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`Reference` ranges include the header row when `titles_from_data=True`;
|
|
174
|
+
forgetting that flag is the most common source of "the legend says
|
|
175
|
+
Series 1 instead of MAU".
|
|
176
|
+
|
|
177
|
+
## 6. xlsxwriter for write-only throughput
|
|
178
|
+
|
|
179
|
+
Faster than openpyxl on six-figure-row writes; cannot reopen what it
|
|
180
|
+
wrote. Use it when the workbook is the **terminal** output of a
|
|
181
|
+
pipeline.
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
import xlsxwriter
|
|
185
|
+
|
|
186
|
+
book = xlsxwriter.Workbook("big_table.xlsx")
|
|
187
|
+
sheet = book.add_worksheet("Tokens")
|
|
188
|
+
|
|
189
|
+
bold = book.add_format({"bold": True, "bg_color": "#DDEBF7", "align": "center"})
|
|
190
|
+
money = book.add_format({"num_format": "¥#,##0;(¥#,##0);-"})
|
|
191
|
+
input_blue = book.add_format({"font_color": "#0000FF"}) # §5.2 inputs
|
|
192
|
+
|
|
193
|
+
# Assumptions block (E1) — ¥ per million tokens; flip this one cell to
|
|
194
|
+
# re-run the model. Inputs carry input_blue per conventions §5.2.
|
|
195
|
+
sheet.write(0, 3, "Price (¥/Mtok)", bold)
|
|
196
|
+
sheet.write_number(0, 4, 1.20, input_blue)
|
|
197
|
+
|
|
198
|
+
headers = ["Date", "Tokens (Mtok)", "Revenue (¥mm)"]
|
|
199
|
+
sheet.write_row(0, 0, headers, bold)
|
|
200
|
+
for r, (date, tokens) in enumerate(rows, start=1):
|
|
201
|
+
sheet.write_string(r, 0, date)
|
|
202
|
+
sheet.write_number(r, 1, tokens, input_blue) # raw input
|
|
203
|
+
# Derived revenue — formula referencing tokens (B) and Price ($E$1).
|
|
204
|
+
# NEVER pre-compute `tokens * 1.20` in Python and write_number it;
|
|
205
|
+
# that ships a static snapshot the user cannot rerun. money carries
|
|
206
|
+
# the default black font, so derived cells are §5.2-compliant.
|
|
207
|
+
sheet.write_formula(r, 2, f"=B{r + 1}*$E$1", money)
|
|
208
|
+
|
|
209
|
+
# Footer total — also a formula, never a Python sum().
|
|
210
|
+
sheet.write_formula(len(rows) + 1, 2, f"=SUM(C2:C{len(rows) + 1})", money)
|
|
211
|
+
sheet.autofilter(0, 0, len(rows), len(headers) - 1)
|
|
212
|
+
sheet.freeze_panes(1, 0)
|
|
213
|
+
book.close()
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Reuse the same `Format` object across cells — re-creating one per cell
|
|
217
|
+
inflates the file and slows the writer down by an order of magnitude.
|
|
218
|
+
xlsxwriter writes formulas just as cleanly as openpyxl
|
|
219
|
+
(`write_formula`); the throughput advantage is no excuse to skip them.
|
|
220
|
+
|
|
221
|
+
## 7. Read-modify-write loops — `data_only=True` is dangerous
|
|
222
|
+
|
|
223
|
+
`load_workbook(..., data_only=True)` returns the **last cached
|
|
224
|
+
calculation** instead of the formula string. Saving such a workbook
|
|
225
|
+
permanently replaces every formula with its number.
|
|
226
|
+
|
|
227
|
+
```python
|
|
228
|
+
# WRONG — formulas vanish after save
|
|
229
|
+
book = load_workbook("model.xlsx", data_only=True)
|
|
230
|
+
book["Inputs"]["B2"] = 0.05
|
|
231
|
+
book.save("model.xlsx") # =SUM(...) replaced by numbers
|
|
232
|
+
|
|
233
|
+
# RIGHT — keep formulas, then re-run recalc.py to refresh cached values
|
|
234
|
+
book = load_workbook("model.xlsx") # data_only defaults to False
|
|
235
|
+
book["Inputs"]["B2"] = 0.05
|
|
236
|
+
book.save("model.xlsx")
|
|
237
|
+
# subprocess: python scripts/recalc.py model.xlsx
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Use `data_only=True` only when the workbook is **read-only** and you
|
|
241
|
+
need the cached numeric values for downstream analysis.
|
|
242
|
+
|
|
243
|
+
> **Reading back a workbook that just went through `recalc.py`.** Some
|
|
244
|
+
> source files force LibreOffice to rewrite their `<mergeCell>` XML in
|
|
245
|
+
> a form openpyxl cannot parse — `load_workbook` then raises
|
|
246
|
+
> `TypeError: expected <class 'int'>` from `cell_range.py` regardless
|
|
247
|
+
> of `data_only`. The file is fine; openpyxl's default parser is the
|
|
248
|
+
> bottleneck. Two readback paths sidestep it:
|
|
249
|
+
>
|
|
250
|
+
> ```python
|
|
251
|
+
> # easiest — streaming reader skips merged-cell parsing entirely.
|
|
252
|
+
> # Streaming mode rejects subscript access like ws["B4"].value;
|
|
253
|
+
> # use iter_rows() instead.
|
|
254
|
+
> book = load_workbook("model.xlsx", read_only=True, data_only=True)
|
|
255
|
+
> for row in book["Sheet"].iter_rows(values_only=True):
|
|
256
|
+
> ...
|
|
257
|
+
>
|
|
258
|
+
> # escape hatch — when you also need formula strings, or want to
|
|
259
|
+
> # inspect the zip without instantiating openpyxl objects, use the
|
|
260
|
+
> # raw-XML pattern in §11 (same technique recalc.py uses internally)
|
|
261
|
+
> ```
|
|
262
|
+
>
|
|
263
|
+
> See `docs/recalc-guide.md` §9 for why LibreOffice triggers the bug
|
|
264
|
+
> and how `recalc.py` already handles its own internal scan.
|
|
265
|
+
|
|
266
|
+
## 8. Performance tips
|
|
267
|
+
|
|
268
|
+
- `read_only=True` streams sheets row-by-row — drop into it for any
|
|
269
|
+
input file above ~100k rows.
|
|
270
|
+
- `write_only=True` does the inverse for outputs; with `WriteOnlyCell`
|
|
271
|
+
it keeps memory flat while writing million-row sheets.
|
|
272
|
+
- Iterate with `sheet.iter_rows(min_row=2, values_only=True)` instead
|
|
273
|
+
of nested `cell.value` access — values-only iteration skips the
|
|
274
|
+
per-cell object construction.
|
|
275
|
+
- Avoid `sheet.cell(row=r, column=c).value = x` inside hot loops; the
|
|
276
|
+
attribute access has measurable overhead on large workbooks.
|
|
277
|
+
|
|
278
|
+
## 9. Merged-cells gotcha
|
|
279
|
+
|
|
280
|
+
`iter_rows()` returns the merged region's anchor cell at the top-left
|
|
281
|
+
position and `None` everywhere else. Flattening the sheet into a
|
|
282
|
+
DataFrame loses the merged value silently:
|
|
283
|
+
|
|
284
|
+
```python
|
|
285
|
+
book = load_workbook("merged.xlsx")
|
|
286
|
+
sheet = book.active
|
|
287
|
+
|
|
288
|
+
for row in sheet.iter_rows(min_row=1, max_row=3, values_only=True):
|
|
289
|
+
print(row)
|
|
290
|
+
# (None, 'Q3 Summary', None, None) <- only the anchor cell has the value
|
|
291
|
+
# (None, None, None, None)
|
|
292
|
+
# ('SKU', 'Units', 'Price', 'Total')
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Unmerge before processing, broadcast the anchor value into the cleared
|
|
296
|
+
cells, then re-merge if layout matters:
|
|
297
|
+
|
|
298
|
+
```python
|
|
299
|
+
ranges = [str(r) for r in sheet.merged_cells.ranges]
|
|
300
|
+
for rng in ranges:
|
|
301
|
+
top, left, bottom, right = sheet[rng].bounds
|
|
302
|
+
anchor = sheet.cell(row=top, column=left).value
|
|
303
|
+
sheet.unmerge_cells(rng)
|
|
304
|
+
for r in range(top, bottom + 1):
|
|
305
|
+
for c in range(left, right + 1):
|
|
306
|
+
sheet.cell(row=r, column=c, value=anchor)
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## 10. Shared-strings index drift gotcha
|
|
310
|
+
|
|
311
|
+
The `.xlsx` zip stores text values in `xl/sharedStrings.xml` and
|
|
312
|
+
references them by integer index from `xl/worksheets/sheetN.xml`.
|
|
313
|
+
Manually editing the inner XML (e.g. string-replacing a value with a
|
|
314
|
+
shorter one) reorders the dictionary on the next read and silently
|
|
315
|
+
mis-renders every cell on the sheet.
|
|
316
|
+
|
|
317
|
+
If a workbook arrives with mangled text, do **not** keep editing the
|
|
318
|
+
XML — load it through openpyxl once and resave. openpyxl rebuilds the
|
|
319
|
+
shared-strings table from cell values, restoring indexing invariants:
|
|
320
|
+
|
|
321
|
+
```python
|
|
322
|
+
book = load_workbook("mangled.xlsx")
|
|
323
|
+
book.save("rebuilt.xlsx") # shared-strings reindexed
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Then run `scripts/recalc.py rebuilt.xlsx` to verify no `#VALUE!` /
|
|
327
|
+
`#REF!` showed up after the rewrite.
|
|
328
|
+
|
|
329
|
+
## 11. Inject cached values without LibreOffice recalc
|
|
330
|
+
|
|
331
|
+
Excel and LibreOffice compute the cached `<v>` next to each formula on
|
|
332
|
+
their own first open; spreadsheet readers that ignore stored formulas
|
|
333
|
+
(some viewers, some pipelines, the openpyxl `data_only=True` path) only
|
|
334
|
+
ever see the cached value. When `scripts/recalc.py` is unavailable —
|
|
335
|
+
sandboxed environment, no LibreOffice on disk, the rare workbook the
|
|
336
|
+
fallback in `recalc-guide.md` §9 cannot rescue either — you can write
|
|
337
|
+
the cached value yourself by editing the `<v>` element next to each
|
|
338
|
+
`<f>` element you just emitted with openpyxl.
|
|
339
|
+
|
|
340
|
+
```python
|
|
341
|
+
import os, re, shutil, tempfile, zipfile
|
|
342
|
+
|
|
343
|
+
def inject_cached_values(xlsx_path, sheet_name, cell_values):
|
|
344
|
+
"""Write `<v>computed</v>` next to the `<f>...</f>` of each cell.
|
|
345
|
+
|
|
346
|
+
`cell_values` is a dict like `{"B4": 722589, "B5": 26.2}`. The
|
|
347
|
+
function rewrites the workbook in place, preserving every other
|
|
348
|
+
archive entry byte-for-byte.
|
|
349
|
+
"""
|
|
350
|
+
with zipfile.ZipFile(xlsx_path) as zin:
|
|
351
|
+
wb_xml = zin.read("xl/workbook.xml").decode()
|
|
352
|
+
rels_xml = zin.read("xl/_rels/workbook.xml.rels").decode()
|
|
353
|
+
|
|
354
|
+
rid = re.search(
|
|
355
|
+
rf'<sheet[^/]*name="{re.escape(sheet_name)}"[^/]*r:id="(rId\d+)"',
|
|
356
|
+
wb_xml,
|
|
357
|
+
).group(1)
|
|
358
|
+
target = None
|
|
359
|
+
for rel in re.finditer(r"<Relationship\b[^>]*/?>", rels_xml):
|
|
360
|
+
if f'Id="{rid}"' in rel.group(0):
|
|
361
|
+
raw = re.search(r'Target="([^"]+)"', rel.group(0)).group(1)
|
|
362
|
+
raw = raw.lstrip("./").lstrip("/")
|
|
363
|
+
target = raw if raw.startswith("xl/") else f"xl/{raw}"
|
|
364
|
+
break
|
|
365
|
+
|
|
366
|
+
sheet_xml = zin.read(target).decode()
|
|
367
|
+
for ref, value in cell_values.items():
|
|
368
|
+
pattern = (
|
|
369
|
+
rf'(<c r="{re.escape(ref)}"[^>]*>)'
|
|
370
|
+
rf'(<f[^>]*>[^<]*</f>)'
|
|
371
|
+
rf'(<v\s*/>|<v[^>]*>[^<]*</v>)?'
|
|
372
|
+
rf'(</c>)'
|
|
373
|
+
)
|
|
374
|
+
sheet_xml, count = re.subn(
|
|
375
|
+
pattern, rf"\1\2<v>{value}</v>\4", sheet_xml,
|
|
376
|
+
)
|
|
377
|
+
assert count == 1, f"no formula cell found for {ref}"
|
|
378
|
+
|
|
379
|
+
names = zin.namelist()
|
|
380
|
+
infos = {info.filename: info for info in zin.infolist()}
|
|
381
|
+
payload = {name: zin.read(name) for name in names}
|
|
382
|
+
payload[target] = sheet_xml.encode()
|
|
383
|
+
|
|
384
|
+
fd, tmp = tempfile.mkstemp(suffix=".xlsx")
|
|
385
|
+
os.close(fd)
|
|
386
|
+
with zipfile.ZipFile(tmp, "w", zipfile.ZIP_DEFLATED) as zout:
|
|
387
|
+
for name in names:
|
|
388
|
+
zout.writestr(infos[name], payload[name])
|
|
389
|
+
shutil.move(tmp, xlsx_path)
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
# Usage after openpyxl wrote the formulas:
|
|
393
|
+
inject_cached_values(
|
|
394
|
+
"summary.xlsx",
|
|
395
|
+
"Executive_Summary",
|
|
396
|
+
{"B4": 722589, "B5": 26.2, "B6": 19.7, "B7": 44.3, "B8": 76.5},
|
|
397
|
+
)
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
The pattern matches both the openpyxl-written `<v />` self-closing form
|
|
401
|
+
and the populated `<v>...</v>` form, and refuses to touch a cell that
|
|
402
|
+
does not already contain an `<f>` (the assertion guards against typos in
|
|
403
|
+
the ref). The asserted count of `1` is intentional — silently rewriting
|
|
404
|
+
nothing is the failure mode that ships an empty workbook.
|
|
405
|
+
|
|
406
|
+
Use this only as a substitute for `scripts/recalc.py`. When LibreOffice
|
|
407
|
+
is reachable, the recalc path is still preferable because it computes
|
|
408
|
+
every formula in the workbook (not just the ones you happen to enumerate
|
|
409
|
+
in `cell_values`) and surfaces the seven error tokens.
|
|
410
|
+
|