Jingle Developers

账号连接

为扩展声明 provider、凭证需求、设置页跳转和连接状态。

账号连接让扩展访问外部服务,同时把凭证管理留给 Jingle。扩展声明 provider、secret 名称和公开配置;Jingle 负责设置页、凭证读取、连接状态和运行时上下文。

连接类型

类型用途状态
none本地能力,不需要登录,例如系统提醒事项预览可用
apiKey用户手动保存 API key,例如内部 integration token预览可用
personalAccessToken用户手动保存 personal access token预览可用
oauth平台托管 OAuth 登录和 token 生命周期规划中

Manifest 声明

connection: {
  id: "default",
  provider: "github",
  title: "GitHub",
  auth: {
    type: "personalAccessToken",
    secretNames: ["accessToken"]
  },
  publicPreferenceNames: ["apiBaseUrl"],
  connectGuide: "Create a GitHub personal access token and save it in Settings."
}

命令运行时会收到解析后的连接对象:

interface NativeExtensionResolvedConnection {
  connectionId: string
  extensionName: string
  provider: string
  publicConfig: Record<string, unknown>
  missingSecretNames: string[]
  status: "connected" | "failed" | "missing" | "unsupported"
}

Provider reuse

一个扩展可以复用另一个 provider 扩展的连接。Jingle 会读取 provider 的公开配置和 secret,并把命令需要的值注入当前执行上下文。

这适合生成版、迁移版或垂直场景扩展:用户只连接一次 provider,多个 package 可以共享同一个平台管理的连接。

Settings handoff

连接缺失时,命令应打开平台设置页:

import { openExtensionPreferences } from "@openwork/extension-api"

await openExtensionPreferences()

可用入口:

  • openExtensionPreferences()
  • openCommandPreferences()
  • openNativeExtensionSettings({ extensionName, commandName })
  • withAccessToken() 提供连接空状态和设置页动作

Provider examples

Provider预览阶段方式适用场景
GitHubpersonalAccessToken + accessToken secretissue、PR、notification、repository、workflow run
NotionapiKey + internal integration tokenpage、data source、quick capture

安全边界

账号连接应保持清晰分层:

extension code
  -> extension runtime SDK
  -> host capability request
  -> main connection service
  -> secure credential store

普通 preference 可以保存 apiBaseUrl、默认数据库、打开方式等非敏感配置。access token、refresh token、client secret 不应进入普通 settings、日志、renderer state 或 Agent prompt。