@deployxai/dxc 0.1.4 → 0.1.5

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/dist/index.js CHANGED
@@ -23293,7 +23293,7 @@ import path8 from "node:path";
23293
23293
  // apps/cli/package.json
23294
23294
  var package_default = {
23295
23295
  name: "@dxc/cli",
23296
- version: "0.1.4",
23296
+ version: "0.1.5",
23297
23297
  private: true,
23298
23298
  type: "module",
23299
23299
  bin: {
@@ -30929,6 +30929,16 @@ function userFacingDraftIntent(intent) {
30929
30929
  void status;
30930
30930
  return userFacing;
30931
30931
  }
30932
+ function writeAgentBrowserEvent(output, event) {
30933
+ output.writeStderr(
30934
+ `DXC_BROWSER_EVENT ${JSON.stringify({
30935
+ action: "open-url",
30936
+ ...event,
30937
+ surface: "agent-side-panel"
30938
+ })}
30939
+ `
30940
+ );
30941
+ }
30932
30942
  function isLoopbackHostname(hostname) {
30933
30943
  if (hostname === "localhost" || hostname === "[::1]" || hostname === "::1") {
30934
30944
  return true;
@@ -31874,12 +31884,25 @@ var WechatCli = class {
31874
31884
  async #pollLogin(session, options, output, deviceSession) {
31875
31885
  const opened = options.noOpen === true ? false : await this.#openExternal(session.authorizationUrl);
31876
31886
  const action = session.purpose === "link" ? "\u5173\u8054\u4E2A\u4EBA\u5FAE\u4FE1" : session.purpose === "start" ? "\u767B\u5F55\u6216\u521B\u5EFA DxC \u5185\u5BB9\u7A7A\u95F4" : "\u767B\u5F55 DxC";
31877
- if (opened) {
31878
- output.writeStderr(`\u5DF2\u6253\u5F00\u5FAE\u4FE1\u767B\u5F55\u9875\u9762\uFF0C\u8BF7\u626B\u7801${action}\u3002
31887
+ if (options.noOpen === true) {
31888
+ writeAgentBrowserEvent(output, {
31889
+ expiresAt: session.expiresAt,
31890
+ kind: "wechat-login",
31891
+ purpose: session.purpose,
31892
+ url: session.authorizationUrl
31893
+ });
31894
+ output.writeStderr(
31895
+ `\u8BF7\u7531\u5F53\u524D Agent \u5728\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u81EA\u52A8\u6253\u5F00\u5FAE\u4FE1\u767B\u5F55\u9875\u9762\u5E76\u7B49\u5F85\u626B\u7801${action}\uFF0C\u4E0D\u8981\u5411\u7528\u6237\u5C55\u793A\u94FE\u63A5\u6216\u8981\u6C42\u7528\u6237\u70B9\u51FB\u3002
31896
+ `
31897
+ );
31898
+ } else if (opened) {
31899
+ output.writeStderr(`\u5DF2\u5728\u7CFB\u7EDF\u6D4F\u89C8\u5668\u6253\u5F00\u5FAE\u4FE1\u767B\u5F55\u9875\u9762\uFF0C\u8BF7\u626B\u7801${action}\u3002
31879
31900
  `);
31880
31901
  } else {
31881
- output.writeStderr(`\u8BF7\u5728\u6D4F\u89C8\u5668\u6253\u5F00\u5FAE\u4FE1\u767B\u5F55\u9875\u9762\uFF1A${session.authorizationUrl}
31882
- `);
31902
+ output.writeStderr(
31903
+ `\u7CFB\u7EDF\u6D4F\u89C8\u5668\u672A\u80FD\u81EA\u52A8\u6253\u5F00\u5FAE\u4FE1\u767B\u5F55\u9875\u9762\uFF0C\u8BF7\u624B\u52A8\u6253\u5F00\uFF1A${session.authorizationUrl}
31904
+ `
31905
+ );
31883
31906
  }
31884
31907
  const deadline = Date.now() + options.timeoutSeconds * 1e3;
31885
31908
  while (Date.now() < deadline) {
@@ -31968,11 +31991,22 @@ var WechatCli = class {
31968
31991
  }
31969
31992
  async #pollAuthorization(baseUrl, session, deviceRefreshTokenToSave, deviceTokenToSave, options, output) {
31970
31993
  const opened = options.noOpen === true ? false : await this.#openExternal(session.authorizationUrl);
31971
- if (opened) {
31972
- output.writeStderr("\u5DF2\u6253\u5F00\u5FAE\u4FE1\u5B98\u65B9\u6388\u6743\u9875\u9762\uFF0C\u8BF7\u4F7F\u7528\u516C\u4F17\u53F7\u7BA1\u7406\u5458\u5FAE\u4FE1\u626B\u7801\u786E\u8BA4\u3002\n");
31994
+ if (options.noOpen === true) {
31995
+ writeAgentBrowserEvent(output, {
31996
+ expiresAt: session.expiresAt,
31997
+ kind: "wechat-account-binding",
31998
+ url: session.authorizationUrl
31999
+ });
32000
+ output.writeStderr(
32001
+ "\u8BF7\u7531\u5F53\u524D Agent \u5728\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u81EA\u52A8\u6253\u5F00\u5FAE\u4FE1\u516C\u4F17\u53F7\u7ED1\u5B9A\u9875\u9762\u5E76\u7B49\u5F85\u516C\u4F17\u53F7\u7BA1\u7406\u5458\u626B\u7801\uFF0C\u4E0D\u8981\u5411\u7528\u6237\u5C55\u793A\u94FE\u63A5\u6216\u8981\u6C42\u7528\u6237\u70B9\u51FB\u3002\n"
32002
+ );
32003
+ } else if (opened) {
32004
+ output.writeStderr("\u5DF2\u5728\u7CFB\u7EDF\u6D4F\u89C8\u5668\u6253\u5F00\u5FAE\u4FE1\u5B98\u65B9\u6388\u6743\u9875\u9762\uFF0C\u8BF7\u4F7F\u7528\u516C\u4F17\u53F7\u7BA1\u7406\u5458\u5FAE\u4FE1\u626B\u7801\u786E\u8BA4\u3002\n");
31973
32005
  } else {
31974
- output.writeStderr(`\u8BF7\u5728\u6D4F\u89C8\u5668\u6253\u5F00\u6388\u6743\u9875\u9762\uFF1A${session.authorizationUrl}
31975
- `);
32006
+ output.writeStderr(
32007
+ `\u7CFB\u7EDF\u6D4F\u89C8\u5668\u672A\u80FD\u81EA\u52A8\u6253\u5F00\u5FAE\u4FE1\u516C\u4F17\u53F7\u7ED1\u5B9A\u9875\u9762\uFF0C\u8BF7\u624B\u52A8\u6253\u5F00\uFF1A${session.authorizationUrl}
32008
+ `
32009
+ );
31976
32010
  }
31977
32011
  const deadline = Date.now() + options.timeoutSeconds * 1e3;
31978
32012
  while (Date.now() < deadline) {
@@ -32337,7 +32371,7 @@ function createProgram(context) {
32337
32371
  const skills = program2.command("skills").description("\u5B89\u88C5 DxC \u5B98\u65B9 Skills");
32338
32372
  const source = program2.command("source").description("\u5728\u672C\u673A\u91C7\u96C6\u53EF\u8FFD\u6EAF\u7684\u516C\u5F00\u7814\u7A76\u4FE1\u53F7");
32339
32373
  const sourceFetch = source.command("fetch").description("\u8BFB\u53D6 RSS\u3001HTTP API \u6216\u516C\u5F00 HTML");
32340
- program2.command("setup").description("\u9996\u6B21\u4F7F\u7528\uFF1A\u626B\u7801\u767B\u5F55\u6216\u6CE8\u518C\uFF0C\u5E76\u5728\u9700\u8981\u65F6\u7ED1\u5B9A\u516C\u4F17\u53F7").option("--no-open", "\u4E0D\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668").option("--server <url>", "DxC API \u5730\u5740\uFF1B\u9ED8\u8BA4\u5B98\u65B9 DxC Server").option("--timeout <seconds>", "\u6BCF\u6B21\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32374
+ program2.command("setup").description("\u9996\u6B21\u4F7F\u7528\uFF1A\u626B\u7801\u767B\u5F55\u6216\u6CE8\u518C\uFF0C\u5E76\u5728\u9700\u8981\u65F6\u7ED1\u5B9A\u516C\u4F17\u53F7").option("--no-open", "\u4E0D\u6253\u5F00\u7CFB\u7EDF\u6D4F\u89C8\u5668\uFF1B\u7531 Agent \u5728\u5BBF\u4E3B\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u6253\u5F00\u626B\u7801\u9875").option("--server <url>", "DxC API \u5730\u5740\uFF1B\u9ED8\u8BA4\u5B98\u65B9 DxC Server").option("--timeout <seconds>", "\u6BCF\u6B21\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32341
32375
  async (options) => runWechatAction(context, async (wechatCli) => {
32342
32376
  await wechatCli.setup(
32343
32377
  {
@@ -32704,7 +32738,7 @@ function createProgram(context) {
32704
32738
  async (knowledgeCli) => knowledgeCli.syncQuotes(options.lexicalOnly === true)
32705
32739
  )
32706
32740
  );
32707
- auth.command("start").description("\u626B\u7801\u767B\u5F55\uFF1B\u9996\u6B21\u4F7F\u7528\u65F6\u660E\u786E\u521B\u5EFA\u65B0\u7684 DxC \u5185\u5BB9\u7A7A\u95F4").option("--no-open", "\u4E0D\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668").option("--server <url>", "DxC API \u5730\u5740\uFF1B\u9ED8\u8BA4\u5B98\u65B9 DxC Server").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32741
+ auth.command("start").description("\u626B\u7801\u767B\u5F55\uFF1B\u9996\u6B21\u4F7F\u7528\u65F6\u660E\u786E\u521B\u5EFA\u65B0\u7684 DxC \u5185\u5BB9\u7A7A\u95F4").option("--no-open", "\u4E0D\u6253\u5F00\u7CFB\u7EDF\u6D4F\u89C8\u5668\uFF1B\u7531 Agent \u5728\u5BBF\u4E3B\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u6253\u5F00\u626B\u7801\u9875").option("--server <url>", "DxC API \u5730\u5740\uFF1B\u9ED8\u8BA4\u5B98\u65B9 DxC Server").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32708
32742
  async (options) => runWechatAction(context, async (wechatCli) => {
32709
32743
  await wechatCli.start(
32710
32744
  {
@@ -32716,7 +32750,7 @@ function createProgram(context) {
32716
32750
  );
32717
32751
  })
32718
32752
  );
32719
- auth.command("link-wechat").description("\u628A\u4E2A\u4EBA\u5FAE\u4FE1\u5173\u8054\u5230\u5F53\u524D DxC \u7528\u6237").option("--no-open", "\u4E0D\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668").option("--server <url>", "DxC API \u5730\u5740").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32753
+ auth.command("link-wechat").description("\u628A\u4E2A\u4EBA\u5FAE\u4FE1\u5173\u8054\u5230\u5F53\u524D DxC \u7528\u6237").option("--no-open", "\u4E0D\u6253\u5F00\u7CFB\u7EDF\u6D4F\u89C8\u5668\uFF1B\u7531 Agent \u5728\u5BBF\u4E3B\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u6253\u5F00\u626B\u7801\u9875").option("--server <url>", "DxC API \u5730\u5740").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32720
32754
  async (options) => runWechatAction(context, async (wechatCli) => {
32721
32755
  await wechatCli.linkWechat(
32722
32756
  {
@@ -32728,7 +32762,7 @@ function createProgram(context) {
32728
32762
  );
32729
32763
  })
32730
32764
  );
32731
- auth.command("login").description("\u5728\u5F53\u524D\u8BBE\u5907\u4F7F\u7528\u5DF2\u5173\u8054\u7684\u4E2A\u4EBA\u5FAE\u4FE1\u767B\u5F55").option("--no-open", "\u4E0D\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668").option("--server <url>", "DxC API \u5730\u5740").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32765
+ auth.command("login").description("\u5728\u5F53\u524D\u8BBE\u5907\u4F7F\u7528\u5DF2\u5173\u8054\u7684\u4E2A\u4EBA\u5FAE\u4FE1\u767B\u5F55").option("--no-open", "\u4E0D\u6253\u5F00\u7CFB\u7EDF\u6D4F\u89C8\u5668\uFF1B\u7531 Agent \u5728\u5BBF\u4E3B\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u6253\u5F00\u626B\u7801\u9875").option("--server <url>", "DxC API \u5730\u5740").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32732
32766
  async (options) => runWechatAction(context, async (wechatCli) => {
32733
32767
  await wechatCli.login(
32734
32768
  {
@@ -32750,7 +32784,7 @@ function createProgram(context) {
32750
32784
  await wechatCli.logout(context);
32751
32785
  })
32752
32786
  );
32753
- wechat.command("connect").description("\u6253\u5F00\u5FAE\u4FE1\u7B2C\u4E09\u65B9\u5E73\u53F0\u6388\u6743\u9875\u5E76\u7B49\u5F85\u516C\u4F17\u53F7\u7ED1\u5B9A").option("--force", "\u5373\u4F7F\u5F53\u524D\u5DF2\u6709\u516C\u4F17\u53F7\uFF0C\u4E5F\u7EE7\u7EED\u65B0\u589E\u6216\u91CD\u65B0\u6388\u6743").option("--no-open", "\u4E0D\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668").option("--server <url>", "DxC API \u5730\u5740").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32787
+ wechat.command("connect").description("\u6253\u5F00\u5FAE\u4FE1\u7B2C\u4E09\u65B9\u5E73\u53F0\u6388\u6743\u9875\u5E76\u7B49\u5F85\u516C\u4F17\u53F7\u7ED1\u5B9A").option("--force", "\u5373\u4F7F\u5F53\u524D\u5DF2\u6709\u516C\u4F17\u53F7\uFF0C\u4E5F\u7EE7\u7EED\u65B0\u589E\u6216\u91CD\u65B0\u6388\u6743").option("--no-open", "\u4E0D\u6253\u5F00\u7CFB\u7EDF\u6D4F\u89C8\u5668\uFF1B\u7531 Agent \u5728\u5BBF\u4E3B\u53F3\u4FA7\u5185\u7F6E\u6D4F\u89C8\u5668\u6253\u5F00\u626B\u7801\u9875").option("--server <url>", "DxC API \u5730\u5740").option("--timeout <seconds>", "\u7B49\u5F85\u626B\u7801\u7684\u79D2\u6570", "900").action(
32754
32788
  async (options) => runWechatAction(context, async (wechatCli) => {
32755
32789
  await wechatCli.connect(
32756
32790
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deployxai/dxc",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "DeployX 内容工作台 CLI 与官方 Skills",
5
5
  "type": "module",
6
6
  "bin": {
@@ -69,8 +69,10 @@ description: DxC 图文内容工作流的唯一公开入口。用户说“写一
69
69
  - 稍后导入或跳过:运行普通 `project init`,并展示返回的
70
70
  `knowledgeBootstrap.status` 和 `recommendedCommand`;
71
71
  - 不扫描主目录、Obsidian、云盘或浏览器。
72
- 6. 仅在进入云端预览或交付时,运行 `dxc setup`。个人微信登录和公众号管理员授权是两种不同扫码语义,
73
- 不得混为一谈。
72
+ 6. 仅在进入云端预览或交付时,运行 `dxc setup --no-open`。个人微信登录和公众号管理员授权是两种不同扫码语义,
73
+ 不得混为一谈。读取 CLI 输出的 `DXC_BROWSER_EVENT` 后,必须由当前 Agent 在右侧
74
+ `agent-side-panel`(右侧内置浏览器区域)自动打开事件中的 URL;不要向用户展示 URL、
75
+ 不要让用户点击链接。若宿主没有内置浏览器,暂停而不是切换到系统浏览器。
74
76
 
75
77
  ## 初始化历史内容记忆
76
78
 
@@ -12,9 +12,14 @@ description: 把已确认的 Markdown 文章、视觉阶段已生产的内容封
12
12
 
13
13
  1. 运行 `dxc version --json`,要求 CLI `0.1.x` 且协议兼容。
14
14
  2. 若设备尚未登录或没有公众号,取得 DxC Server 地址后运行
15
- `dxc setup --server <https-url>`。这最多出现两次不同语义的扫码:
15
+ `dxc setup --server <https-url> --no-open`。不要让 CLI 调起系统浏览器。读取命令输出的
16
+ `DXC_BROWSER_EVENT` 后,立即调用当前 Agent 宿主的内置浏览器,在右侧
17
+ `agent-side-panel`(右侧内置浏览器区域)打开事件中的 URL;不要在对话中展示 URL,也不
18
+ 要让用户点击链接。该命令最多出现两次不同语义的扫码:
16
19
  - 个人微信登录或明确注册 DxC 用户;
17
20
  - 公众号管理员授权第三方平台的草稿能力。
21
+ 页面打开后保持 CLI 轮询继续运行。若宿主没有右侧内置浏览器,暂停并说明当前环境无法
22
+ 完成扫码,不要回退为系统浏览器或手动链接。
18
23
  3. 运行 `dxc wechat accounts`。没有可用账号时停止;多个账号时向用户展示名称和
19
24
  `accountId`,要求明确选择,不能使用“上一次账号”。
20
25
  4. 运行 `dxc project status --directory <project> --json`,读取实际产物路径。要求正文