mirror of
https://github.com/larksuite/cli.git
synced 2026-09-14 18:42:53 +08:00
5919e861cc
* feat: accept frontend app-type in apps +create * feat: accept frontend app-type filter in apps +list * docs: clarify frontend app-type handling in apps +init * docs: note FRONTEND in queryAppType comment * docs: add frontend app-type guidance to lark-apps skill * docs: add frontend app-type to lark-apps command references SKILL.md's routing table already covered frontend, but the per-command reference docs still enumerated only html/full_stack. Update create/list/get enum values, add a frontend local-dev section, and note frontend in the release-create entry so agents document the third app type consistently. * docs: address CodeRabbit feedback on frontend app-type refs - create.md: state the app-type enum is matched exactly (lowercase), drop the incorrect claim that the CLI normalizes case - local-dev.md: scope database debugging to full_stack (frontend/html have no DB) and add the +release-get finished-status poll to the frontend flow * docs: align app-type enum in apps E2E coverage and test comments The E2E coverage table and two test comments still described the --app-type enum as html/full_stack after frontend was added. Update them to html/frontend/full_stack for consistency; assertions are unaffected (they match on substrings, not the full enum set). * docs(lark-apps): cloud-dev honors routed app_type instead of hardcoding full_stack The main SKILL.md router declares app_type and dev-method orthogonal and routes no-database interactive tools to frontend, but cloud-dev/create references still hardcoded `+create --app-type full_stack` for cloud generation. This forced a frontend-routed request into a full_stack app (unrecoverable since apps have no +delete). Align with the 2026-07-24 design decision: cloud generation also splits by database need — full_stack when persistence is required, frontend by default when unstated. Verified on BOE that a frontend app runs the full cloud session+chat pipeline to completed.
38 lines
1.4 KiB
Go
38 lines
1.4 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package apps
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/larksuite/cli/internal/validate"
|
|
"github.com/larksuite/cli/shortcuts/common"
|
|
)
|
|
|
|
// queryAppType fetches the app's type string from the server via
|
|
// GET /open-apis/spark/v1/apps/{identifier}. The identifier can be either
|
|
// an app_id or a meta_token — the server resolves both. The server returns
|
|
// uppercase app_type values ("HTML", "FRONTEND", "FULL_STACK", "MODERN_HTML");
|
|
// this function normalizes to lowercase. Returns an error when the API
|
|
// is unavailable or the response is malformed — callers must not proceed
|
|
// with a fallback type to avoid creating the wrong project scaffold.
|
|
func queryAppType(ctx context.Context, rctx *common.RuntimeContext, identifier string) (string, error) {
|
|
path := fmt.Sprintf("%s/apps/%s", apiBasePath, validate.EncodePathSegment(identifier))
|
|
data, err := rctx.CallAPITyped("GET", path, nil, nil)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
appRaw, _ := data["app"].(map[string]interface{})
|
|
if appRaw == nil {
|
|
return "", appsSubprocessEnvelopeError("query app type: response missing app object")
|
|
}
|
|
appType, _ := appRaw["app_type"].(string)
|
|
if strings.TrimSpace(appType) == "" {
|
|
return "", appsSubprocessEnvelopeError("query app type: response missing app_type")
|
|
}
|
|
return strings.ToLower(appType), nil
|
|
}
|