mirror of
https://github.com/larksuite/cli.git
synced 2026-07-03 14:02:43 +08:00
Emit structured validation, API, network, file, and internal error envelopes for Doc shortcuts so users and agents can recover from failed document workflows using stable type, subtype, param, and code fields. Add Doc domain errscontract and golangci guards to prevent legacy envelope and common helper regressions.
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package doc
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/larksuite/cli/errs"
|
|
"github.com/larksuite/cli/shortcuts/common"
|
|
)
|
|
|
|
// wrapDocNetworkErr returns err unchanged when it is already a typed errs.*
|
|
// error (preserving its subtype / code / log_id from the runtime boundary),
|
|
// and only wraps a raw, unclassified error as a transport-level network error.
|
|
func wrapDocNetworkErr(err error, format string, args ...any) error {
|
|
if _, ok := errs.ProblemOf(err); ok {
|
|
return err
|
|
}
|
|
return errs.NewNetworkError(errs.SubtypeNetworkTransport, format, args...).WithCause(err)
|
|
}
|
|
|
|
// wrapDocInputFileErr wraps a --file Stat/read failure via the shared typed
|
|
// helper (which sets the cause) and tags it with the --file param so agents
|
|
// learn which flag to fix. The common helper is flag-agnostic, so the param is
|
|
// attached here at the Doc call site rather than mutating shared behavior.
|
|
func wrapDocInputFileErr(err error, readMsg string) error {
|
|
wrapped := common.WrapInputStatErrorTyped(err, readMsg)
|
|
var ve *errs.ValidationError
|
|
if errors.As(wrapped, &ve) {
|
|
ve.Param = "--file"
|
|
}
|
|
return wrapped
|
|
}
|