weaver-work-cli 0.1.24 → 0.1.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/core/output.js +53 -1
- package/dist/internal/e10/auth/commands.js +17 -2
- package/dist/internal/e10/auth/crypto.js +52 -12
- package/dist/internal/e10/auth/xiaoe.js +112 -39
- package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +67 -1
- package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +198 -0
- package/dist/shortcuts/caizhilian/operations/shared.js +32 -0
- package/dist/shortcuts/caizhilian/operations/specs.js +15 -0
- package/dist/shortcuts/workflow/index.js +55 -1
- package/dist/shortcuts/workflow/operations/form.js +1252 -109
- package/dist/shortcuts/workflow/operations/read.js +75 -35
- package/dist/shortcuts/workflow/operations/shared.js +25 -0
- package/dist/shortcuts/workflow/stdout-compact.js +33 -0
- package/docs/caizhilian.md +4 -3
- package/docs/e10-auth.md +8 -1
- package/node_modules/@napi-rs/keyring/LICENSE +21 -0
- package/node_modules/@napi-rs/keyring/README.md +19 -0
- package/node_modules/@napi-rs/keyring/index.d.ts +166 -0
- package/node_modules/@napi-rs/keyring/index.js +514 -0
- package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
- package/node_modules/@napi-rs/keyring/keytar.js +26 -0
- package/node_modules/@napi-rs/keyring/package.json +125 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
- package/node_modules/commander/LICENSE +22 -0
- package/node_modules/commander/Readme.md +1149 -0
- package/node_modules/commander/esm.mjs +16 -0
- package/node_modules/commander/index.js +24 -0
- package/node_modules/commander/lib/argument.js +149 -0
- package/node_modules/commander/lib/command.js +2662 -0
- package/node_modules/commander/lib/error.js +39 -0
- package/node_modules/commander/lib/help.js +709 -0
- package/node_modules/commander/lib/option.js +367 -0
- package/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/node_modules/commander/package-support.json +16 -0
- package/node_modules/commander/package.json +82 -0
- package/node_modules/commander/typings/esm.d.mts +3 -0
- package/node_modules/commander/typings/index.d.ts +1045 -0
- package/package.json +5 -1
- package/skills/weaver-e10-builder/SKILL.md +281 -0
- package/skills/weaver-e10-builder/_catalog.md +94 -0
- package/skills/weaver-e10-builder/actionflows/CONTEXT.md +71 -0
- package/skills/weaver-e10-builder/actionflows/SKILL.md +176 -0
- package/skills/weaver-e10-builder/actionflows/docs/adr/0001-generated-actionflow-cleanup-identity.md +5 -0
- package/skills/weaver-e10-builder/actionflows/docs/adr/0002-preserve-existing-actionflow-on-update.md +36 -0
- package/skills/weaver-e10-builder/actionflows/references/components/calendar/MeetingCreate.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/calendar/ScheduleCreate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/database/DMLExecute.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentCopy.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/AttachmentMove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentCopy.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentDelete.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentEdit.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentMove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentPermissionChange.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRenewal.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentRevert.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscription.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionApprove.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionSendBack.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/DocumentSubscriptionWithdraw.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/FileFolderSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/GetAttachmentInfo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/GetDocumentInfo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/ModifyDocumentStatus.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/ReplaceAttachment.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/document/UpdatePrintNum.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbAdd.md +100 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbDelete.md +23 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbRecover.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbSaveVersion.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/ActionEbUpdate.md +67 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/DateTrigger.md +32 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EbGetDataById.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EnquiryForm.md +107 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventButton.md +33 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/EventFormData.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/ebuilder/TimeBatchTrigger.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/http/Http.md +77 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/Condition.md +23 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/LogicFlowSet.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/MultipleExecution.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/logic/Output.md +37 -0
- package/skills/weaver-e10-builder/actionflows/references/components/message/InnerMQSend.md +50 -0
- package/skills/weaver-e10-builder/actionflows/references/components/message/SendMessage.md +30 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/AlterPersonStatus.md +30 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/HrmEmployeeUpdate.md +34 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelAlterType.md +38 -0
- package/skills/weaver-e10-builder/actionflows/references/components/personnel/PersonnelOnboarding.md +36 -0
- package/skills/weaver-e10-builder/actionflows/references/components/serverless/ServerlessAction.md +42 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/CustomTrigger.md +82 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/InnerMQListener.md +41 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/SimpleScheduler.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/trigger/WebHookTrigger.md +91 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAddSign.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveAgreeRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCommit.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveConsulTurnTodo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveCreate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDelete.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoCirculate.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoForward.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveDoTurnTodo.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveEntrust.md +19 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveIntervention.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveMandatoryArchiving.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveManualCC.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRefuseRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveRejectApply.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSave.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveSendBack.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveShareEntry.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveTrigger.md +99 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/ApproveWithdraw.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkFlowDocEmpowerment.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/components/workflow/WorkflowToDoc.md +17 -0
- package/skills/weaver-e10-builder/actionflows/references/condition_rules.md +100 -0
- package/skills/weaver-e10-builder/actionflows/references/dynamic_capability_matrix.md +39 -0
- package/skills/weaver-e10-builder/actionflows/references/dynamic_resources.md +41 -0
- package/skills/weaver-e10-builder/actionflows/references/examples/enquiry-form-batch-insert-scene2.json +1043 -0
- package/skills/weaver-e10-builder/actionflows/references/function_rules.md +15 -0
- package/skills/weaver-e10-builder/actionflows/references/trigger_runtime_notes.md +53 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Bar.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/BarStack.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Bubble.json +323 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Calendar.json +515 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Circular.json +337 -0
- package/skills/weaver-e10-builder/assets/dom-structure/CollapsePanel.json +289 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Comment.json +617 -0
- package/skills/weaver-e10-builder/assets/dom-structure/CountDown.json +755 -0
- package/skills/weaver-e10-builder/assets/dom-structure/DigitalPanel.json +191 -0
- package/skills/weaver-e10-builder/assets/dom-structure/EbButton.json +387 -0
- package/skills/weaver-e10-builder/assets/dom-structure/FastCreate.json +242 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Gauge.json +282 -0
- package/skills/weaver-e10-builder/assets/dom-structure/HBar.json +336 -0
- package/skills/weaver-e10-builder/assets/dom-structure/HBarStack.json +337 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Line.json +341 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NList.json +712 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NavBar.json +274 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NavPanel.json +390 -0
- package/skills/weaver-e10-builder/assets/dom-structure/NewTab.json +606 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Nightingale.json +336 -0
- package/skills/weaver-e10-builder/assets/dom-structure/PageHeader.json +205 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Picture.json +209 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Pie.json +338 -0
- package/skills/weaver-e10-builder/assets/dom-structure/ProgressChart.json +299 -0
- package/skills/weaver-e10-builder/assets/dom-structure/SearchGlobal.json +628 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Slide.json +489 -0
- package/skills/weaver-e10-builder/assets/dom-structure/Treemap.json +324 -0
- package/skills/weaver-e10-builder/assets/factory/chart-dimensions.json +536 -0
- package/skills/weaver-e10-builder/assets/factory/example-btn-progress-collapse-configured.json +2515 -0
- package/skills/weaver-e10-builder/assets/factory/example-configured-2.json +13805 -0
- package/skills/weaver-e10-builder/assets/factory/example-configured.json +6735 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bar-stack.json +326 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bar.json +222 -0
- package/skills/weaver-e10-builder/assets/factory/factory-bubble.json +322 -0
- package/skills/weaver-e10-builder/assets/factory/factory-calendar.json +325 -0
- package/skills/weaver-e10-builder/assets/factory/factory-circular.json +320 -0
- package/skills/weaver-e10-builder/assets/factory/factory-collapse-panel.json +132 -0
- package/skills/weaver-e10-builder/assets/factory/factory-comment.json +388 -0
- package/skills/weaver-e10-builder/assets/factory/factory-count-down.json +198 -0
- package/skills/weaver-e10-builder/assets/factory/factory-digital-panel.json +108 -0
- package/skills/weaver-e10-builder/assets/factory/factory-eb-button.json +150 -0
- package/skills/weaver-e10-builder/assets/factory/factory-fast-create.json +62 -0
- package/skills/weaver-e10-builder/assets/factory/factory-gauge.json +312 -0
- package/skills/weaver-e10-builder/assets/factory/factory-h-bar-stack.json +328 -0
- package/skills/weaver-e10-builder/assets/factory/factory-h-bar.json +326 -0
- package/skills/weaver-e10-builder/assets/factory/factory-line.json +212 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-bar.json +167 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-menu.json +144 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nav-panel.json +338 -0
- package/skills/weaver-e10-builder/assets/factory/factory-new-tab.json +163 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nightingale.json +312 -0
- package/skills/weaver-e10-builder/assets/factory/factory-nlist.json +112 -0
- package/skills/weaver-e10-builder/assets/factory/factory-page-header.json +171 -0
- package/skills/weaver-e10-builder/assets/factory/factory-picture.json +169 -0
- package/skills/weaver-e10-builder/assets/factory/factory-pie.json +212 -0
- package/skills/weaver-e10-builder/assets/factory/factory-progress-chart.json +162 -0
- package/skills/weaver-e10-builder/assets/factory/factory-search-global.json +104 -0
- package/skills/weaver-e10-builder/assets/factory/factory-slide.json +164 -0
- package/skills/weaver-e10-builder/assets/factory/factory-treemap.json +322 -0
- package/skills/weaver-e10-builder/assets/icons.db +0 -0
- package/skills/weaver-e10-builder/assets/sample/.claude/settings.local.json +8 -0
- package/skills/weaver-e10-builder/assets/sample/api/formApi.js +510 -0
- package/skills/weaver-e10-builder/assets/sample/config/config.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/configLoad.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/configLoad_default.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/config/config_default.js +0 -0
- package/skills/weaver-e10-builder/assets/sample/entry.js +22 -0
- package/skills/weaver-e10-builder/assets/sample/eslint.config.cjs +48 -0
- package/skills/weaver-e10-builder/assets/sample/memo.md +0 -0
- package/skills/weaver-e10-builder/assets/sample/readme.js +8 -0
- package/skills/weaver-e10-builder/references/app/guide-app-publish.md +92 -0
- package/skills/weaver-e10-builder/references/auth/guide-auth.md +88 -0
- package/skills/weaver-e10-builder/references/coding/guide-edit-backfill.md +189 -0
- package/skills/weaver-e10-builder/references/coding/guide-form-crud.md +262 -0
- package/skills/weaver-e10-builder/references/coding/guide-page-code.md +244 -0
- package/skills/weaver-e10-builder/references/coding/guide-page-export.md +119 -0
- package/skills/weaver-e10-builder/references/coding/ref-compile-rules.md +130 -0
- package/skills/weaver-e10-builder/references/common/guide-plan-template.md +164 -0
- package/skills/weaver-e10-builder/references/common/map.md +153 -0
- package/skills/weaver-e10-builder/references/common/ref-cli-commands.md +635 -0
- package/skills/weaver-e10-builder/references/components/@weapp-Button.md +104 -0
- package/skills/weaver-e10-builder/references/components/base-Badge.md +100 -0
- package/skills/weaver-e10-builder/references/components/base-Dialog.md +358 -0
- package/skills/weaver-e10-builder/references/components/base-Empty.md +58 -0
- package/skills/weaver-e10-builder/references/components/base-Tag.md +112 -0
- package/skills/weaver-e10-builder/references/components/display-Alert.md +64 -0
- package/skills/weaver-e10-builder/references/components/display-Avatar.md +150 -0
- package/skills/weaver-e10-builder/references/components/display-Calendar.md +263 -0
- package/skills/weaver-e10-builder/references/components/display-Carousel.md +115 -0
- package/skills/weaver-e10-builder/references/components/display-Collapse.md +299 -0
- package/skills/weaver-e10-builder/references/components/display-FilePreview.md +49 -0
- package/skills/weaver-e10-builder/references/components/display-Icon.md +66 -0
- package/skills/weaver-e10-builder/references/components/display-List.md +320 -0
- package/skills/weaver-e10-builder/references/components/display-Pagination.md +41 -0
- package/skills/weaver-e10-builder/references/components/display-Spin.md +34 -0
- package/skills/weaver-e10-builder/references/components/display-Steps.md +89 -0
- package/skills/weaver-e10-builder/references/components/display-Table.md +160 -0
- package/skills/weaver-e10-builder/references/components/display-Title.md +117 -0
- package/skills/weaver-e10-builder/references/components/form-Checkbox.md +161 -0
- package/skills/weaver-e10-builder/references/components/form-DepartmentBrowser-api.md +52 -0
- package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser-api.md +51 -0
- package/skills/weaver-e10-builder/references/components/form-EmployeeBrowser.md +51 -0
- package/skills/weaver-e10-builder/references/components/form-Input.md +123 -0
- package/skills/weaver-e10-builder/references/components/form-Radio.md +145 -0
- package/skills/weaver-e10-builder/references/components/form-Select.md +191 -0
- package/skills/weaver-e10-builder/references/components/form-Switch.md +46 -0
- package/skills/weaver-e10-builder/references/components/form-Upload.md +53 -0
- package/skills/weaver-e10-builder/references/components/generic-Echarts.md +102 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-components.md +130 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-css.md +127 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-factory.md +460 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer-version.md +111 -0
- package/skills/weaver-e10-builder/references/ebuilder-designer/guide-designer.md +288 -0
- package/skills/weaver-e10-builder/references/esb-interface/guide-import.md +34 -0
- package/skills/weaver-e10-builder/references/form/guide-create-form.md +248 -0
- package/skills/weaver-e10-builder/references/form/guide-ebuilder-filter.md +73 -0
- package/skills/weaver-e10-builder/references/form/guide-ebuilder-scope.md +82 -0
- package/skills/weaver-e10-builder/references/form/guide-field-linkage.md +123 -0
- package/skills/weaver-e10-builder/references/form/guide-form-archive-permission.md +175 -0
- package/skills/weaver-e10-builder/references/form/guide-form-association.md +124 -0
- package/skills/weaver-e10-builder/references/form/guide-form-button.md +169 -0
- package/skills/weaver-e10-builder/references/form/guide-form-data.md +78 -0
- package/skills/weaver-e10-builder/references/form/guide-form-formula-functions.md +343 -0
- package/skills/weaver-e10-builder/references/form/guide-form-layout-incremental.md +90 -0
- package/skills/weaver-e10-builder/references/form/guide-form-layout-planning.md +68 -0
- package/skills/weaver-e10-builder/references/form/guide-form-linkage.md +269 -0
- package/skills/weaver-e10-builder/references/form/guide-form-message.md +74 -0
- package/skills/weaver-e10-builder/references/form/guide-form-physical-table.md +146 -0
- package/skills/weaver-e10-builder/references/form/guide-form-serial-mark.md +47 -0
- package/skills/weaver-e10-builder/references/form/guide-form-sub-detail.md +82 -0
- package/skills/weaver-e10-builder/references/form/guide-form-view-permission.md +38 -0
- package/skills/weaver-e10-builder/references/form/guide-form-view.md +371 -0
- package/skills/weaver-e10-builder/references/form/guide-formula-linkage.md +281 -0
- package/skills/weaver-e10-builder/references/form/guide-list-columns.md +52 -0
- package/skills/weaver-e10-builder/references/form/guide-list-custom-text.md +52 -0
- package/skills/weaver-e10-builder/references/form/guide-list-stats.md +136 -0
- package/skills/weaver-e10-builder/references/form/guide-virtual-form.md +156 -0
- package/skills/weaver-e10-builder/references/form/ref-form-fields.md +293 -0
- package/skills/weaver-e10-builder/references/form/style-templates.md +97 -0
- package/skills/weaver-e10-builder/references/hrm/guide-matrix.md +245 -0
- package/skills/weaver-e10-builder/references/hrm/guide-org-employee.md +155 -0
- package/skills/weaver-e10-builder/references/menu/system-menus.md +75 -0
- package/skills/weaver-e10-builder/references/report/add-dataset-registration-guide.md +139 -0
- package/skills/weaver-e10-builder/references/report/ai-report-workflow.md +412 -0
- package/skills/weaver-e10-builder/references/report/api-report-build-fast-path.md +275 -0
- package/skills/weaver-e10-builder/references/report/app-datasource-lookup-guide.md +230 -0
- package/skills/weaver-e10-builder/references/report/cell-config-echo-guide.md +163 -0
- package/skills/weaver-e10-builder/references/report/cell-transform-guide.md +147 -0
- package/skills/weaver-e10-builder/references/report/condition-format-guide.md +140 -0
- package/skills/weaver-e10-builder/references/report/cross-dataset-filter-guide.md +304 -0
- package/skills/weaver-e10-builder/references/report/dataset-query-filter-guide.md +235 -0
- package/skills/weaver-e10-builder/references/report/dataset-sidebar-ops-guide.md +280 -0
- package/skills/weaver-e10-builder/references/report/dataset-table-field-contract-guide.md +339 -0
- package/skills/weaver-e10-builder/references/report/datasource-metadata-guide.md +365 -0
- package/skills/weaver-e10-builder/references/report/datasource-selection-and-parent-filter-guide.md +148 -0
- package/skills/weaver-e10-builder/references/report/date-range-query-reference.md +102 -0
- package/skills/weaver-e10-builder/references/report/default-header-style-guide.md +70 -0
- package/skills/weaver-e10-builder/references/report/designer-blank-prevention-guide.md +111 -0
- package/skills/weaver-e10-builder/references/report/event-hreflink-guide.md +184 -0
- package/skills/weaver-e10-builder/references/report/field-bind-exact-match-guide.md +208 -0
- package/skills/weaver-e10-builder/references/report/formula-cell-api-guide.md +258 -0
- package/skills/weaver-e10-builder/references/report/guide-report-build.md +131 -0
- package/skills/weaver-e10-builder/references/report/guide-report-modify.md +100 -0
- package/skills/weaver-e10-builder/references/report/guide-report-multisource.md +143 -0
- package/skills/weaver-e10-builder/references/report/guide-report-query.md +98 -0
- package/skills/weaver-e10-builder/references/report/hidden-row-and-header-merge-guide.md +100 -0
- package/skills/weaver-e10-builder/references/report/layout-showlocation-freeze-guide.md +167 -0
- package/skills/weaver-e10-builder/references/report/preaggregate-auto-disable-guide.md +107 -0
- package/skills/weaver-e10-builder/references/report/query-condition-api-guide.md +890 -0
- package/skills/weaver-e10-builder/references/report/ref-report-commands.md +122 -0
- package/skills/weaver-e10-builder/references/report/ref-report-pitfalls.md +226 -0
- package/skills/weaver-e10-builder/references/report/report-baseinfo-defaults-guide.md +117 -0
- package/skills/weaver-e10-builder/references/report/report-building-guide.md +511 -0
- package/skills/weaver-e10-builder/references/report/report-config-schema.md +445 -0
- package/skills/weaver-e10-builder/references/report/report-create-modes-guide.md +182 -0
- package/skills/weaver-e10-builder/references/report/report-data-model.md +447 -0
- package/skills/weaver-e10-builder/references/report/report-delivery-contract.md +101 -0
- package/skills/weaver-e10-builder/references/report/report-designer-feature-map.md +500 -0
- package/skills/weaver-e10-builder/references/report/report-internal-error-guide.md +78 -0
- package/skills/weaver-e10-builder/references/report/report-knowledge-base.md +389 -0
- package/skills/weaver-e10-builder/references/report/report-lifecycle-api-guide.md +392 -0
- package/skills/weaver-e10-builder/references/report/report-list-page-ops-guide.md +191 -0
- package/skills/weaver-e10-builder/references/report/report-permission-guide.md +365 -0
- package/skills/weaver-e10-builder/references/report/report-requirement-analysis-template.md +202 -0
- package/skills/weaver-e10-builder/references/report/report-self-check-guide.md +164 -0
- package/skills/weaver-e10-builder/references/report/safe-partial-save-guide.md +151 -0
- package/skills/weaver-e10-builder/references/report/snowflake-id-precision-guide.md +84 -0
- package/skills/weaver-e10-builder/references/report/spec-build-schema.md +294 -0
- package/skills/weaver-e10-builder/references/report/targeted-fix-guide.md +97 -0
- package/skills/weaver-e10-builder/references/report/user-request-scope-only-guide.md +82 -0
- package/skills/weaver-e10-builder/references/workflow/guide-function-management.md +154 -0
- package/skills/weaver-e10-builder/references/workflow/guide-opinion-settings.md +126 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-action.md +174 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-auth-resp.md +224 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-condition.md +447 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-node-layout.md +181 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc-setting.md +248 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow-odoc.md +68 -0
- package/skills/weaver-e10-builder/references/workflow/guide-workflow.md +527 -0
- package/skills/weaver-e10-builder/references/workflow/operator-matrix.md +76 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +7 -2
- package/skills/weaver-e10-caizhilian/references/files.md +15 -0
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +48 -3
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +99 -1
- package/skills/weaver-e10-shared/SKILL.md +8 -4
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +7 -5
- package/skills/weaver-e10-workflow/SKILL.md +23 -44
- package/skills/weaver-e10-workflow/references/source-manifest.json +27 -22
- package/skills/weaver-e10-workflow/references/workflow-create.md +238 -85
- package/skills/weaver-e10-workflow/references/workflow-edit.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -4
- package/skills/weaver-e10-workflow/references/workflow-query.md +2 -2
package/README.md
CHANGED
|
@@ -218,11 +218,19 @@ XiaoE/erpa 换票服务地址,不是 E10 登录地址。CLI 的 Node 实现会
|
|
|
218
218
|
系统 CA 校验,且只允许同源重定向或同主机 HTTP→HTTPS 升级。平台凭证不可用时,
|
|
219
219
|
CLI 会先在内部调用 npm 包自带的 `scripts/xiaoe_env.py` 兼容路径,再按顺序尝试
|
|
220
220
|
宿主 `xiaoeUserData/tokens.py`、桌面 XiaoE 客户端当前会话
|
|
221
|
-
|
|
221
|
+
(优先读取宿主注入的 `XIAOE_USER_SETTINGS_PATH`,其次查找
|
|
222
|
+
`XIAOE_ROBOT_DATA_ROOT` / `XIAOE_ROBOT_ROOT`,最后回退
|
|
223
|
+
`XiaoE/Robots/<id>/user_settings.json`)和 `WEAVER_XIAOE_*` 环境映射。只要会话文件中的
|
|
224
|
+
`session_id` 与 `erpa` 有效,Node 路径即可直接换票,不要求宿主存在 `tokens.py`。
|
|
222
225
|
`xiaoe_env.py` 由 CLI 独占执行并解析,不放进 shared Skill,也不把 stdout 凭证暴露给
|
|
223
226
|
Agent;Skill 只负责调用 `weaver-work-cli auth xiaoe`。CLI 自带脚本仅依赖 Python
|
|
224
227
|
标准库,仍保持 TLS 证书校验,不会采用关闭证书校验的回退。
|
|
225
228
|
|
|
229
|
+
XiaoE 桌面客户端不一定注入上述 Token 对;它会注入 `XIAOE_DATA_ROOT`、
|
|
230
|
+
`XIAOE_ROBOT_DATA_ROOT`、`XIAOE_USER_SETTINGS_PATH`、`XIAOE_ROBOT_ROOT` 等精确的
|
|
231
|
+
运行时路径标记,CLI 也把这些标记识别为当前 XiaoE 桌面宿主。普通 `XIAOE_SKILL_*`、
|
|
232
|
+
`WEAVER_XIAOE_*` 配置或仅在磁盘上发现客户端文件仍不构成宿主身份。
|
|
233
|
+
|
|
226
234
|
E10 目标地址按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 →
|
|
227
235
|
当前 profile → `https://www.e-cology.com.cn`”解析,绝不会把 `XIAOE_DOMAIN`
|
|
228
236
|
当作 E10 地址。匹配成功时直接保存登录态,并固定使用 `agentType=XiaoE`。业务命令
|
|
@@ -237,6 +245,7 @@ weaver-work-cli auth xiaoe
|
|
|
237
245
|
```
|
|
238
246
|
|
|
239
247
|
`auth login` / `auth oidc` 始终是纯浏览器 OAuth 入口。本机存在 `xiaoeUserData/tokens.py`、XiaoE 客户端目录、`XIAOE_SKILL_*` 或 `WEAVER_XIAOE_*` 配置,都不能单独证明当前智能体是 XiaoE,也不会让 WorkBuddy、Codex 或其他智能体切换到 XiaoE 登录。
|
|
248
|
+
`auth xiaoe` 会先输出不含凭证的 preflight 摘要(`hostDetected`、`attempted`、`tokenScriptDetected`、`clientSettingsDetected`、`baseUrl`);命中 `tokens.py` 或内置 Node 客户端会话路径时还会输出明确的尝试日志。统一登录成功后,登录结果以及后续 `auth status` 会显示 `credentialSourceStep`、`credentialSourceType`、`credentialSourceLabel`,可据此确认实际凭证来源;`3 / xiaoe_client / XiaoE client settings` 表示未依赖 `tokens.py`,由 Node 直接换票。
|
|
240
249
|
|
|
241
250
|
默认本地回调地址为 `http://127.0.0.1:19800/callback`。如果端口被占用:
|
|
242
251
|
|
package/dist/core/output.js
CHANGED
|
@@ -233,6 +233,58 @@ function fitEnvelope(value, leading, extraWarnings, budgetBytes) {
|
|
|
233
233
|
warnings: [...extraWarnings, 'stdout_compacted'],
|
|
234
234
|
};
|
|
235
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* stdout 序列化:默认 `JSON.stringify(value, null, 2)`;给了 `compactPaths` 时,**只有**命中这些
|
|
238
|
+
* 路径的子树改成单行(紧凑)输出,其余照旧缩进。
|
|
239
|
+
*
|
|
240
|
+
* 为什么需要它:像 `historyRequestData` 这种「每条都长、层级又深」的数组,缩进空白能吃掉近 1/4
|
|
241
|
+
* 体积(真机实测:该键 13,017 B → 9,835 B,整份 21,620 B → 18,438 B),而它对读模型的**可读性
|
|
242
|
+
* 收益为零**——模型要的是"哪条历史、哪个字段、什么值",不是每层两个空格。
|
|
243
|
+
*
|
|
244
|
+
* **内容一字不改**:输出仍是合法 JSON,parse 出来的对象与全缩进版**完全一致**(只是空白不同),
|
|
245
|
+
* 消费端不需要任何改动;结构也保持数组/对象原样,不会退化成"需要再 parse 一次的字符串"。
|
|
246
|
+
*
|
|
247
|
+
* 路径口径:从信封根算起的点分路径(如 `data.historyRequestData`),**精确匹配**、不递归下钻。
|
|
248
|
+
* 实现用「占位符摘出 → 紧凑序列化 → 文本替换回填」,而**不是**自己递归拼 JSON:标量转义、
|
|
249
|
+
* `undefined` 键丢弃、数组里 `undefined` 补 `null`、`toJSON` 这些细节全部沿用 `JSON.stringify`
|
|
250
|
+
* 的原生行为,避免手写序列化器在边角上与原输出分叉。
|
|
251
|
+
*/
|
|
252
|
+
export function stringifyForStdout(value, compactPaths) {
|
|
253
|
+
const wanted = new Set((compactPaths ?? []).filter((path) => typeof path === 'string' && path !== ''));
|
|
254
|
+
const plain = JSON.stringify(value, null, 2);
|
|
255
|
+
if (!wanted.size || plain === undefined)
|
|
256
|
+
return plain;
|
|
257
|
+
// 占位符必须不可能与真实内容撞车:随机盐 + 对已序列化文本做一次包含检查(撞了就换一个)。
|
|
258
|
+
let salt = '';
|
|
259
|
+
do {
|
|
260
|
+
salt = `__WEAVER_COMPACT_${Math.random().toString(36).slice(2, 12)}__`;
|
|
261
|
+
} while (plain.includes(salt));
|
|
262
|
+
const compacted = [];
|
|
263
|
+
const swap = (node, path) => {
|
|
264
|
+
if (node !== null && typeof node === 'object' && wanted.has(path)) {
|
|
265
|
+
const inline = JSON.stringify(node);
|
|
266
|
+
if (inline !== undefined) {
|
|
267
|
+
compacted.push(inline);
|
|
268
|
+
return `${salt}${compacted.length - 1}__`;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (Array.isArray(node))
|
|
272
|
+
return node.map((item, index) => swap(item, `${path}[${index}]`));
|
|
273
|
+
if (node !== null && typeof node === 'object') {
|
|
274
|
+
const out = {};
|
|
275
|
+
for (const [key, item] of Object.entries(node)) {
|
|
276
|
+
out[key] = swap(item, path ? `${path}.${key}` : key);
|
|
277
|
+
}
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
280
|
+
return node;
|
|
281
|
+
};
|
|
282
|
+
const swapped = JSON.stringify(swap(value, ''), null, 2);
|
|
283
|
+
if (typeof swapped !== 'string')
|
|
284
|
+
return swapped;
|
|
285
|
+
// 占位符在文本里是一个普通字符串字面量(`"__WEAVER_COMPACT_xxx__0__"`),整体替换成紧凑 JSON。
|
|
286
|
+
return swapped.replace(new RegExp(`"${salt}(\\d+)__"`, 'g'), (_match, index) => compacted[Number(index)] ?? 'null');
|
|
287
|
+
}
|
|
236
288
|
export class Output {
|
|
237
289
|
ctx;
|
|
238
290
|
constructor(ctx) {
|
|
@@ -245,7 +297,7 @@ export class Output {
|
|
|
245
297
|
console.log(options.text);
|
|
246
298
|
return;
|
|
247
299
|
}
|
|
248
|
-
console.log(
|
|
300
|
+
console.log(stringifyForStdout(this.prepare(value, options), options.compactPaths));
|
|
249
301
|
}
|
|
250
302
|
prepare(value, options) {
|
|
251
303
|
const threshold = resultThresholdBytes(this.ctx);
|
|
@@ -5,7 +5,7 @@ import { CliError, ExitCode } from '../../../core/errors.js';
|
|
|
5
5
|
import { clearInvoiceTokenForSession } from '../../../shortcuts/invoice/host.js';
|
|
6
6
|
import { buildE10CookieHeader, E10AuthSession, clearProfileAuthFile, extractRawSetCookie, extractSessionTicket, findAuthFile, getActiveProfile, getProfileAuthPath, getProfileDir, listProfiles, profileNameFromUrl, readProfileConfig, readTeamsCheckUserInfo, saveAuthFile, saveProfileConfig, setActiveProfile, switchActiveProfile, } from './session.js';
|
|
7
7
|
import { getE10AuthRoot } from './paths.js';
|
|
8
|
-
import { XIAOE_AGENT_TYPE, createXiaoEUnifiedLoginUnavailableError, hasXiaoEEnv, resolveXiaoEPreferredBaseUrl, shouldUseXiaoEBrowserFallback, tryXiaoEUnifiedLogin as tryXiaoEUnifiedSessionLogin, } from './xiaoe.js';
|
|
8
|
+
import { XIAOE_AGENT_TYPE, createXiaoEUnifiedLoginUnavailableError, hasXiaoEClientCredential, hasXiaoEEnv, hasXiaoETokenScript, resolveXiaoEPreferredBaseUrl, shouldUseXiaoEBrowserFallback, tryXiaoEUnifiedLogin as tryXiaoEUnifiedSessionLogin, } from './xiaoe.js';
|
|
9
9
|
export { DEFAULT_E10_BASE_URL, XIAOE_AGENT_TYPE, hasXiaoEEnv, hasXiaoETokenScript, resolveXiaoEDefaultBaseUrl, resolveXiaoEPreferredBaseUrl, resolveXiaoEUnifiedLoginCredential, shouldUseXiaoEBrowserFallback, } from './xiaoe.js';
|
|
10
10
|
const DEFAULT_AGENT_TYPE = 'weaver-work-cli';
|
|
11
11
|
const EXPLICIT_AGENT_TYPE_ENV_KEYS = [
|
|
@@ -192,6 +192,10 @@ function formatAuthStatus(status) {
|
|
|
192
192
|
'baseUrl: ' + status.baseUrl,
|
|
193
193
|
'profile: ' + status.profile,
|
|
194
194
|
'authFile: ' + status.authFile,
|
|
195
|
+
...('loginSource' in status && status.loginSource ? ['loginSource: ' + status.loginSource] : []),
|
|
196
|
+
...('credentialSourceStep' in status && status.credentialSourceStep ? ['credentialSourceStep: ' + status.credentialSourceStep] : []),
|
|
197
|
+
...('credentialSourceType' in status && status.credentialSourceType ? ['credentialSourceType: ' + status.credentialSourceType] : []),
|
|
198
|
+
...('credentialSourceLabel' in status && status.credentialSourceLabel ? ['credentialSourceLabel: ' + status.credentialSourceLabel] : []),
|
|
195
199
|
];
|
|
196
200
|
if ('valid' in status) {
|
|
197
201
|
lines.push('valid: ' + String(status.valid));
|
|
@@ -492,7 +496,8 @@ async function runBrowserLogin(ctx, options, behavior = {}) {
|
|
|
492
496
|
const profileFromGlobal = globalOptions.profile;
|
|
493
497
|
const cfg = readProfileConfig(profileFromGlobal || getActiveProfile());
|
|
494
498
|
const explicitBaseUrl = optionString(commandOpts, 'baseUrl') || globalOptions.baseUrl || '';
|
|
495
|
-
const
|
|
499
|
+
const xiaoEHostDetected = hasXiaoEEnv(ctx.env);
|
|
500
|
+
const useXiaoELogin = behavior.tryXiaoEUnifiedLogin === true && xiaoEHostDetected;
|
|
496
501
|
const baseUrl = useXiaoELogin
|
|
497
502
|
? resolveXiaoEPreferredBaseUrl({
|
|
498
503
|
explicitBaseUrl,
|
|
@@ -508,6 +513,16 @@ async function runBrowserLogin(ctx, options, behavior = {}) {
|
|
|
508
513
|
if (!Number.isInteger(port) || port <= 0 || port > 65535) {
|
|
509
514
|
throw new CliError('Invalid --port value', ExitCode.UsageError);
|
|
510
515
|
}
|
|
516
|
+
if (behavior.tryXiaoEUnifiedLogin) {
|
|
517
|
+
ctx.logger.info([
|
|
518
|
+
'XiaoE unified login preflight:',
|
|
519
|
+
`hostDetected=${String(xiaoEHostDetected)}`,
|
|
520
|
+
`attempted=${String(useXiaoELogin)}`,
|
|
521
|
+
`tokenScriptDetected=${String(hasXiaoETokenScript(ctx.env))}`,
|
|
522
|
+
`clientSettingsDetected=${String(hasXiaoEClientCredential(ctx.env))}`,
|
|
523
|
+
`baseUrl=${baseUrl || '(unresolved)'}`,
|
|
524
|
+
].join(' '));
|
|
525
|
+
}
|
|
511
526
|
if (useXiaoELogin) {
|
|
512
527
|
const xiaoEResult = await tryXiaoEUnifiedLogin(ctx, baseUrl, tenantKey, profileFromGlobal, behavior.allowXiaoETokenScript === true);
|
|
513
528
|
if (xiaoEResult)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
3
4
|
import { resolve } from 'node:path';
|
|
4
|
-
import { Entry as KeyringEntry } from '@napi-rs/keyring';
|
|
5
5
|
import { writeWithRetry } from '../../../core/write-with-retry.js';
|
|
6
6
|
import { getE10AuthRoot } from './paths.js';
|
|
7
7
|
const ALGORITHM = 'aes-256-gcm';
|
|
@@ -9,11 +9,40 @@ const IV_LENGTH = 12;
|
|
|
9
9
|
const TAG_LENGTH = 16;
|
|
10
10
|
const KEYCHAIN_SERVICE = 'weaver-work-cli';
|
|
11
11
|
const KEYCHAIN_ACCOUNT = 'auth-key';
|
|
12
|
+
const require = createRequire(import.meta.url);
|
|
12
13
|
let encKey = null;
|
|
14
|
+
let keyringEntryConstructor;
|
|
13
15
|
function getKeyFilePath() {
|
|
14
16
|
return resolve(getE10AuthRoot(), '.key');
|
|
15
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Load the native keyring binding only when auth encryption actually needs it.
|
|
20
|
+
*
|
|
21
|
+
* A top-level ESM import would dlopen the platform binary while the CLI command
|
|
22
|
+
* tree is being initialized. If a native dependency is unavailable (for
|
|
23
|
+
* example VCRUNTIME140.dll on Windows), even unrelated commands such as
|
|
24
|
+
* `--version` would terminate before the file-key fallback could run.
|
|
25
|
+
*/
|
|
26
|
+
function loadKeyringEntryConstructor() {
|
|
27
|
+
if (keyringEntryConstructor !== undefined)
|
|
28
|
+
return keyringEntryConstructor;
|
|
29
|
+
try {
|
|
30
|
+
const module = require('@napi-rs/keyring');
|
|
31
|
+
keyringEntryConstructor = typeof module.Entry === 'function'
|
|
32
|
+
? module.Entry
|
|
33
|
+
: null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Missing packages, native dlopen failures and unavailable platform
|
|
37
|
+
// backends all use the existing encrypted file-key fallback.
|
|
38
|
+
keyringEntryConstructor = null;
|
|
39
|
+
}
|
|
40
|
+
return keyringEntryConstructor;
|
|
41
|
+
}
|
|
16
42
|
function readKeychainKey(service) {
|
|
43
|
+
const KeyringEntry = loadKeyringEntryConstructor();
|
|
44
|
+
if (!KeyringEntry)
|
|
45
|
+
return null;
|
|
17
46
|
try {
|
|
18
47
|
const entry = new KeyringEntry(service, KEYCHAIN_ACCOUNT);
|
|
19
48
|
const stored = entry.getPassword();
|
|
@@ -28,6 +57,19 @@ function readKeychainKey(service) {
|
|
|
28
57
|
}
|
|
29
58
|
return null;
|
|
30
59
|
}
|
|
60
|
+
function writeKeychainKey(service, key) {
|
|
61
|
+
const KeyringEntry = loadKeyringEntryConstructor();
|
|
62
|
+
if (!KeyringEntry)
|
|
63
|
+
return false;
|
|
64
|
+
try {
|
|
65
|
+
const entry = new KeyringEntry(service, KEYCHAIN_ACCOUNT);
|
|
66
|
+
entry.setPassword(key.toString('base64'));
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
31
73
|
function readKeyFile(filePath) {
|
|
32
74
|
if (!existsSync(filePath))
|
|
33
75
|
return null;
|
|
@@ -47,23 +89,21 @@ function getEncKey() {
|
|
|
47
89
|
encKey = storedKey;
|
|
48
90
|
return encKey;
|
|
49
91
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
entry.setPassword(fresh.toString('base64'));
|
|
54
|
-
encKey = fresh;
|
|
55
|
-
return encKey;
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Keychain may be unavailable in headless environments; fall back to a 0600 file.
|
|
59
|
-
}
|
|
92
|
+
// Reuse a previously created fallback key before generating a new keychain
|
|
93
|
+
// value. This keeps existing auth files decryptable if keyring availability
|
|
94
|
+
// changes between CLI runs.
|
|
60
95
|
const keyFile = getKeyFilePath();
|
|
61
96
|
const fileKey = readKeyFile(keyFile);
|
|
62
97
|
if (fileKey) {
|
|
63
98
|
encKey = fileKey;
|
|
64
99
|
return encKey;
|
|
65
100
|
}
|
|
66
|
-
|
|
101
|
+
const fresh = randomBytes(32);
|
|
102
|
+
if (writeKeychainKey(KEYCHAIN_SERVICE, fresh)) {
|
|
103
|
+
encKey = fresh;
|
|
104
|
+
return encKey;
|
|
105
|
+
}
|
|
106
|
+
encKey = fresh;
|
|
67
107
|
mkdirSync(getE10AuthRoot(), { recursive: true });
|
|
68
108
|
writeWithRetry(keyFile, encKey.toString('base64'), { mode: 0o600 });
|
|
69
109
|
return encKey;
|
|
@@ -47,6 +47,17 @@ const XIAOE_TOKEN_SCRIPT_LEGACY_ENV_KEY = 'XIAOE_TOKEN_SCRIPT_PATH';
|
|
|
47
47
|
const XIAOE_TOKEN_SCRIPT_PYTHON_LEGACY_ENV_KEY = 'XIAOE_TOKEN_SCRIPT_PYTHON';
|
|
48
48
|
const XIAOE_TOKEN_SCRIPT_TIMEOUT_MS = 15_000;
|
|
49
49
|
const XIAOE_CLIENT_TOKEN_TIMEOUT_MS = 15_000;
|
|
50
|
+
const XIAOE_USER_SETTINGS_PATH_ENV_KEY = 'XIAOE_USER_SETTINGS_PATH';
|
|
51
|
+
const XIAOE_CLIENT_SETTINGS_ROOT_ENV_KEYS = [
|
|
52
|
+
'XIAOE_ROBOT_DATA_ROOT',
|
|
53
|
+
'XIAOE_ROBOT_ROOT',
|
|
54
|
+
];
|
|
55
|
+
const XIAOE_DESKTOP_HOST_ENV_KEYS = [
|
|
56
|
+
'XIAOE_DATA_ROOT',
|
|
57
|
+
'XIAOE_ROBOT_DATA_ROOT',
|
|
58
|
+
'XIAOE_USER_SETTINGS_PATH',
|
|
59
|
+
'XIAOE_ROBOT_ROOT',
|
|
60
|
+
];
|
|
50
61
|
export const XIAOE_SKILL_ETEAMID_API_PATH = '/spec-apps/api/app/rpachat/skill/extend/eteamId';
|
|
51
62
|
export const XIAOE_CLIENT_SETTINGS_SOURCE = 'XiaoE/Robots/user_settings.json';
|
|
52
63
|
export const XIAOE_USER_TOKEN_SOURCE = 'XIAOE_USER_TOKEN';
|
|
@@ -60,21 +71,35 @@ function envString(env, ...keys) {
|
|
|
60
71
|
return '';
|
|
61
72
|
}
|
|
62
73
|
export function hasXiaoEEnv(env = process.env) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (Object.keys(env).some((key) => key.startsWith('WORKBUDDY_') || key.startsWith('CODEX_'))) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
const explicitAgentType = envString(env, 'WORKBUDDY_AGENT_TYPE', 'CODEX_AGENT_TYPE', 'WEAVER_AGENT_TYPE');
|
|
69
|
-
if (explicitAgentType) {
|
|
70
|
-
const normalized = explicitAgentType.toLowerCase().replace(/[^a-z0-9\p{Script=Han}]+/gu, '');
|
|
74
|
+
const isXiaoEAgentType = (value) => {
|
|
75
|
+
const normalized = value.toLowerCase().replace(/[^a-z0-9\p{Script=Han}]+/gu, '');
|
|
71
76
|
return ['xiaoe', 'xiaoeclient', '小e', '智能小e'].includes(normalized);
|
|
72
|
-
}
|
|
77
|
+
};
|
|
78
|
+
// A host-specific identity is authoritative. Generic WORKBUDDY_*/CODEX_*
|
|
79
|
+
// variables are only framework markers and can also be present when XiaoE
|
|
80
|
+
// launches the CLI through a shared agent runtime.
|
|
81
|
+
const explicitHostAgentType = envString(env, 'WORKBUDDY_AGENT_TYPE', 'CODEX_AGENT_TYPE');
|
|
82
|
+
if (explicitHostAgentType)
|
|
83
|
+
return isXiaoEAgentType(explicitHostAgentType);
|
|
73
84
|
// XiaoE injects this pair into the command process for the current run. A
|
|
74
85
|
// tokens.py path, client installation, XIAOE_SKILL_* variable, or
|
|
75
86
|
// WEAVER_XIAOE_* configuration alone is credential availability, not proof
|
|
76
87
|
// that the current agent is XiaoE.
|
|
77
|
-
|
|
88
|
+
if (hasXiaoEPlatformCredential(env))
|
|
89
|
+
return true;
|
|
90
|
+
// The desktop XiaoE client injects these exact runtime paths even when it
|
|
91
|
+
// does not inject the web/sandbox XIAOE_USER_TOKEN + XIAOE_DOMAIN pair.
|
|
92
|
+
// They identify the current command host; unrelated XIAOE_SKILL_* variables
|
|
93
|
+
// and merely discovering local XiaoE files still do not.
|
|
94
|
+
if (XIAOE_DESKTOP_HOST_ENV_KEYS.some((key) => Boolean(envString(env, key))))
|
|
95
|
+
return true;
|
|
96
|
+
// Current-host framework markers win over WEAVER_AGENT_TYPE, which can be
|
|
97
|
+
// inherited from a previously saved E10 profile by `weaver-work-cli run`.
|
|
98
|
+
if (Object.keys(env).some((key) => key.startsWith('WORKBUDDY_') || key.startsWith('CODEX_'))) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const explicitAgentType = envString(env, 'WEAVER_AGENT_TYPE');
|
|
102
|
+
return explicitAgentType ? isXiaoEAgentType(explicitAgentType) : false;
|
|
78
103
|
}
|
|
79
104
|
export function describeXiaoECredentialSource(source) {
|
|
80
105
|
// Step 1 is the platform-injected credential (XIAOE_USER_TOKEN + XIAOE_DOMAIN):
|
|
@@ -537,30 +562,78 @@ export function xiaoEClientRobotsRoot(env = process.env) {
|
|
|
537
562
|
const home = envString(env, 'HOME') || homedir();
|
|
538
563
|
return home ? join(home, 'Library', 'Application Support', 'XiaoE', 'Robots') : '';
|
|
539
564
|
}
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
return '';
|
|
544
|
-
let entries = [];
|
|
565
|
+
function isFile(path) {
|
|
566
|
+
if (!path || !existsSync(path))
|
|
567
|
+
return false;
|
|
545
568
|
try {
|
|
546
|
-
|
|
569
|
+
return statSync(path).isFile();
|
|
547
570
|
}
|
|
548
571
|
catch {
|
|
549
|
-
return
|
|
572
|
+
return false;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
function isDirectory(path) {
|
|
576
|
+
if (!path || !existsSync(path))
|
|
577
|
+
return false;
|
|
578
|
+
try {
|
|
579
|
+
return statSync(path).isDirectory();
|
|
580
|
+
}
|
|
581
|
+
catch {
|
|
582
|
+
return false;
|
|
550
583
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
584
|
+
}
|
|
585
|
+
function listXiaoEClientSettingsFiles(root) {
|
|
586
|
+
if (!root)
|
|
587
|
+
return [];
|
|
588
|
+
if (isFile(root))
|
|
589
|
+
return [root];
|
|
590
|
+
if (!isDirectory(root))
|
|
591
|
+
return [];
|
|
592
|
+
const candidates = [];
|
|
593
|
+
const addCandidate = (path) => {
|
|
594
|
+
if (isFile(path))
|
|
595
|
+
candidates.push(path);
|
|
596
|
+
};
|
|
597
|
+
const addChildSettings = (directory) => {
|
|
598
|
+
if (!isDirectory(directory))
|
|
599
|
+
return;
|
|
554
600
|
try {
|
|
555
|
-
|
|
601
|
+
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
602
|
+
if (entry.isDirectory())
|
|
603
|
+
addCandidate(join(directory, entry.name, 'user_settings.json'));
|
|
604
|
+
}
|
|
556
605
|
}
|
|
557
606
|
catch {
|
|
558
|
-
|
|
607
|
+
// Treat an unreadable host directory as an unavailable credential source.
|
|
559
608
|
}
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
609
|
+
};
|
|
610
|
+
addCandidate(join(root, 'user_settings.json'));
|
|
611
|
+
addChildSettings(root);
|
|
612
|
+
// Some desktop hosts inject the XiaoE data root rather than the Robots
|
|
613
|
+
// directory itself. Keep discovery shallow and limited to the known layout.
|
|
614
|
+
const robotsRoot = join(root, 'Robots');
|
|
615
|
+
addCandidate(join(robotsRoot, 'user_settings.json'));
|
|
616
|
+
addChildSettings(robotsRoot);
|
|
617
|
+
return uniqueStrings(candidates);
|
|
618
|
+
}
|
|
619
|
+
function sortedXiaoEClientSettingsFiles(root) {
|
|
620
|
+
const files = listXiaoEClientSettingsFiles(root);
|
|
621
|
+
return files.sort((left, right) => statSync(right).mtimeMs - statSync(left).mtimeMs);
|
|
622
|
+
}
|
|
623
|
+
function xiaoEClientSettingsCandidateFiles(env) {
|
|
624
|
+
const candidates = [];
|
|
625
|
+
const explicitSettingsPath = envString(env, XIAOE_USER_SETTINGS_PATH_ENV_KEY);
|
|
626
|
+
if (isFile(explicitSettingsPath))
|
|
627
|
+
candidates.push(explicitSettingsPath);
|
|
628
|
+
for (const key of XIAOE_CLIENT_SETTINGS_ROOT_ENV_KEYS) {
|
|
629
|
+
const injectedRoot = envString(env, key);
|
|
630
|
+
candidates.push(...sortedXiaoEClientSettingsFiles(injectedRoot));
|
|
631
|
+
}
|
|
632
|
+
candidates.push(...sortedXiaoEClientSettingsFiles(xiaoEClientRobotsRoot(env)));
|
|
633
|
+
return uniqueStrings(candidates);
|
|
634
|
+
}
|
|
635
|
+
export function findXiaoEClientSettingsFile(env = process.env) {
|
|
636
|
+
return xiaoEClientSettingsCandidateFiles(env)[0] || '';
|
|
564
637
|
}
|
|
565
638
|
/**
|
|
566
639
|
* Platform-injected credential: XIAOE_USER_TOKEN (+ the XiaoE service address).
|
|
@@ -587,20 +660,19 @@ export function hasXiaoEPlatformCredential(env = process.env) {
|
|
|
587
660
|
* Kept for local desktop hosts only; sandboxes must rely on the platform credential.
|
|
588
661
|
*/
|
|
589
662
|
export function readXiaoEClientCredential(env = process.env) {
|
|
590
|
-
const settingsFile
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
catch {
|
|
602
|
-
return null;
|
|
663
|
+
for (const settingsFile of xiaoEClientSettingsCandidateFiles(env)) {
|
|
664
|
+
try {
|
|
665
|
+
const parsed = JSON.parse(readFileSync(settingsFile, 'utf8'));
|
|
666
|
+
const authToken = readString(parsed, 'session_id', 'sessionId');
|
|
667
|
+
const erpaUrl = normalizeUrl(readString(parsed, 'erpa', 'erpa_url', 'erpaUrl'));
|
|
668
|
+
if (authToken && erpaUrl)
|
|
669
|
+
return { authToken, erpaUrl, source: XIAOE_CLIENT_SETTINGS_SOURCE };
|
|
670
|
+
}
|
|
671
|
+
catch {
|
|
672
|
+
// Continue to the next injected or default client settings candidate.
|
|
673
|
+
}
|
|
603
674
|
}
|
|
675
|
+
return null;
|
|
604
676
|
}
|
|
605
677
|
export function hasXiaoEClientCredential(env = process.env) {
|
|
606
678
|
return Boolean(findXiaoEClientSettingsFile(env));
|
|
@@ -859,6 +931,7 @@ export async function tryXiaoEUnifiedLogin(options = {}) {
|
|
|
859
931
|
// client session and exchanges it for an eteamId, so Python availability
|
|
860
932
|
// no longer blocks unified login.
|
|
861
933
|
if (!credential && hasXiaoEClientCredential(env)) {
|
|
934
|
+
options.logger?.info('Trying built-in XiaoE client session credential...');
|
|
862
935
|
try {
|
|
863
936
|
credential = await resolveXiaoEClientCredential(baseUrl || DEFAULT_E10_BASE_URL, env);
|
|
864
937
|
}
|
|
@@ -3,7 +3,7 @@ import { caizhilianValidationError } from '../../errors.js';
|
|
|
3
3
|
import { updateDocBasicField } from '../api.js';
|
|
4
4
|
import { issueWriteLease } from '../confirm.js';
|
|
5
5
|
import { IMAGE_ALLOWED_EXT, assertAllowedExt, assertFileUnchanged, downloadAttachment, readFileMetadata, resolveSavePathArg, uploadFileToServer, } from '../files.js';
|
|
6
|
-
import { fingerprint, isPlainObject, pyBool, timestampToDateStr, validateRequiredParams } from '../shared.js';
|
|
6
|
+
import { fingerprint, formatVersionTimestamp, isPlainObject, pyBool, timestampToDateStr, validateRequiredParams, } from '../shared.js';
|
|
7
7
|
import { caizhilianPrepared, caizhilianSuccess } from '../types.js';
|
|
8
8
|
/**
|
|
9
9
|
* 文件域操作(1:1 对应源 scripts/document_plugins.py 的附件/封面部分
|
|
@@ -32,6 +32,8 @@ const QUERY_FILE_OBJECTS_PATH = '/api/file/queryFileObjects';
|
|
|
32
32
|
const COMPARE_SUBMIT_PATH = '/api/docCompare/uploadCompared';
|
|
33
33
|
const TO_PDF_CHECK_PATH = '/api/file/download/toPdf';
|
|
34
34
|
const DOC_UPDATE_PATH = '/api/doc/document/update';
|
|
35
|
+
/** 源 filePreview 页「附件历史版本」抽屉接口(抓包 findVersionList)。 */
|
|
36
|
+
const FIND_VERSION_LIST_PATH = '/api/file/base/upload/findVersionList';
|
|
35
37
|
/** 源 doc_compare_plugins._COMPARE_OPTIONS:13 个比对选项全部固定为 0(键序与源一致)。 */
|
|
36
38
|
const COMPARE_OPTIONS = {
|
|
37
39
|
ignoreImages: 0,
|
|
@@ -50,6 +52,7 @@ const COMPARE_OPTIONS = {
|
|
|
50
52
|
};
|
|
51
53
|
const ATTACHMENT_UPLOAD_APPLY = 'caizhilian.attachment.upload.apply';
|
|
52
54
|
const ATTACHMENT_REPLACE_APPLY = 'caizhilian.attachment.replace.apply';
|
|
55
|
+
const ATTACHMENT_VERSIONS_ACTION = 'caizhilian.attachment.list-versions';
|
|
53
56
|
const COVER_UPLOAD_APPLY = 'caizhilian.cover.upload.apply';
|
|
54
57
|
const COVER_SET_APPLY = 'caizhilian.cover.set.apply';
|
|
55
58
|
const COVER_REMOVE_APPLY = 'caizhilian.cover.remove.apply';
|
|
@@ -455,6 +458,68 @@ async function listFileObjectsHandler(args, env) {
|
|
|
455
458
|
}
|
|
456
459
|
return caizhilianSuccess(LIST_FILE_OBJECTS_ACTION, { attachments }, { doc_id: docId });
|
|
457
460
|
}
|
|
461
|
+
// ── caizhilian.attachment.list-versions ───────────────────
|
|
462
|
+
/** 源 filePreview 页「附件历史版本」抽屉请求体(抓包 findVersionList,逐字段一致)。 */
|
|
463
|
+
function buildFindVersionListBody(attachmentId, docId, pageNo, pageSize) {
|
|
464
|
+
return {
|
|
465
|
+
pageNo,
|
|
466
|
+
pageSize,
|
|
467
|
+
id: attachmentId,
|
|
468
|
+
docId,
|
|
469
|
+
startTime: '',
|
|
470
|
+
endTime: '',
|
|
471
|
+
userIds: '',
|
|
472
|
+
pauuid: randomUUID().replace(/-/gu, ''),
|
|
473
|
+
endType: process.platform === 'win32' ? 'Windows' : process.platform === 'darwin' ? 'Mac' : '',
|
|
474
|
+
module: 'document',
|
|
475
|
+
maxUploadSize: '10000',
|
|
476
|
+
mobile: false,
|
|
477
|
+
enterprisePan: false,
|
|
478
|
+
customParam: FROM_PC_DOC_PARAM,
|
|
479
|
+
authModule: 'document',
|
|
480
|
+
notLoggedIn: false,
|
|
481
|
+
autoSelect: false,
|
|
482
|
+
coordinateFlag: false,
|
|
483
|
+
deepClean: false,
|
|
484
|
+
publicFileHost: '',
|
|
485
|
+
tempFileType: '1',
|
|
486
|
+
create: false,
|
|
487
|
+
batchCollaboration: false,
|
|
488
|
+
fileId: attachmentId,
|
|
489
|
+
imgType: 'imgPlug',
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
async function listAttachmentVersionsHandler(args, env) {
|
|
493
|
+
const action = ATTACHMENT_VERSIONS_ACTION;
|
|
494
|
+
validateRequiredParams(args, ['attachment_id']);
|
|
495
|
+
const attachmentId = pyArgStripped(args, 'attachment_id');
|
|
496
|
+
const docId = pyArgStripped(args, 'doc_id');
|
|
497
|
+
const pageNo = Number(args.page_no ?? 1);
|
|
498
|
+
const pageSize = Number(args.page_size ?? 10);
|
|
499
|
+
const response = await env.host.request({
|
|
500
|
+
method: 'POST',
|
|
501
|
+
path: FIND_VERSION_LIST_PATH,
|
|
502
|
+
body: buildFindVersionListBody(attachmentId, docId, pageNo, pageSize),
|
|
503
|
+
operation: action,
|
|
504
|
+
});
|
|
505
|
+
const rawPage = nestedValue(response, 'data', 'page');
|
|
506
|
+
const rawList = Array.isArray(nestedValue(rawPage, 'result')) ? nestedValue(rawPage, 'result') : [];
|
|
507
|
+
const hasNext = pyBool(nestedValue(rawPage, 'hasNext'));
|
|
508
|
+
const versions = [];
|
|
509
|
+
for (const item of rawList) {
|
|
510
|
+
if (!isPlainObject(item))
|
|
511
|
+
continue;
|
|
512
|
+
versions.push({
|
|
513
|
+
id: item.id ?? null,
|
|
514
|
+
name: item.name ?? null,
|
|
515
|
+
versionNumber: item.versionNumber ?? null,
|
|
516
|
+
updateTime: formatVersionTimestamp(item.updateTime),
|
|
517
|
+
describe: item.describe ?? null,
|
|
518
|
+
extName: item.extName ?? null,
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
return caizhilianSuccess(action, { versions, has_next: hasNext }, { attachment_id: attachmentId, doc_id: docId });
|
|
522
|
+
}
|
|
458
523
|
// ── caizhilian.compare.upload-file ────────────────────────
|
|
459
524
|
/** 源 DocCompareUploadFilePlugin.execute 的入参解析。 */
|
|
460
525
|
async function planCompareUpload(args) {
|
|
@@ -561,6 +626,7 @@ export const caizhilianFileopsHandlers = {
|
|
|
561
626
|
'caizhilian.attachment.replace': attachmentReplaceHandler,
|
|
562
627
|
'caizhilian.attachment.download': { execute: downloadAttachmentHandler },
|
|
563
628
|
'caizhilian.attachment.download-as-pdf': { execute: downloadAsPdfHandler },
|
|
629
|
+
'caizhilian.attachment.list-versions': { execute: listAttachmentVersionsHandler },
|
|
564
630
|
'caizhilian.cover.upload': coverUploadHandler,
|
|
565
631
|
'caizhilian.cover.set': coverSetHandler,
|
|
566
632
|
'caizhilian.cover.remove': coverRemoveHandler,
|