superun-ai-cli 0.1.44 → 0.1.65

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.
Files changed (125) hide show
  1. package/README.en.md +189 -5
  2. package/README.md +208 -7
  3. package/dist/api/agent-query-api.d.ts +27 -0
  4. package/dist/api/agent-query-api.js +31 -0
  5. package/dist/api/agent-query-api.js.map +1 -1
  6. package/dist/api/bill-query-api.d.ts +61 -0
  7. package/dist/api/bill-query-api.js +92 -0
  8. package/dist/api/bill-query-api.js.map +1 -0
  9. package/dist/api/managed-agent-resource-api.d.ts +19 -0
  10. package/dist/api/managed-agent-resource-api.js +63 -0
  11. package/dist/api/managed-agent-resource-api.js.map +1 -0
  12. package/dist/api/market-query-api.d.ts +74 -0
  13. package/dist/api/market-query-api.js +145 -0
  14. package/dist/api/market-query-api.js.map +1 -0
  15. package/dist/api/order-query-api.d.ts +47 -0
  16. package/dist/api/order-query-api.js +96 -0
  17. package/dist/api/order-query-api.js.map +1 -0
  18. package/dist/api/ppt-api.d.ts +258 -0
  19. package/dist/api/ppt-api.js +111 -0
  20. package/dist/api/ppt-api.js.map +1 -0
  21. package/dist/api/publish-api.d.ts +1 -0
  22. package/dist/api/publish-api.js +3 -0
  23. package/dist/api/publish-api.js.map +1 -1
  24. package/dist/api/security-review-api.d.ts +1 -1
  25. package/dist/api/security-review-api.js +15 -1
  26. package/dist/api/security-review-api.js.map +1 -1
  27. package/dist/api/site-analysis-api.d.ts +85 -0
  28. package/dist/api/site-analysis-api.js +165 -0
  29. package/dist/api/site-analysis-api.js.map +1 -0
  30. package/dist/auth/browser-login.d.ts +1 -0
  31. package/dist/auth/browser-login.js +25 -2
  32. package/dist/auth/browser-login.js.map +1 -1
  33. package/dist/auth/credential-status.d.ts +4 -0
  34. package/dist/auth/credential-status.js +19 -0
  35. package/dist/auth/credential-status.js.map +1 -0
  36. package/dist/commands/agent/index.d.ts +3 -0
  37. package/dist/commands/agent/index.js +68 -0
  38. package/dist/commands/agent/index.js.map +1 -0
  39. package/dist/commands/auth/login.js +8 -3
  40. package/dist/commands/auth/login.js.map +1 -1
  41. package/dist/commands/auth/status.d.ts +1 -1
  42. package/dist/commands/auth/status.js +7 -2
  43. package/dist/commands/auth/status.js.map +1 -1
  44. package/dist/commands/bill/index.d.ts +3 -0
  45. package/dist/commands/bill/index.js +106 -0
  46. package/dist/commands/bill/index.js.map +1 -0
  47. package/dist/commands/chat/create.js +1 -0
  48. package/dist/commands/chat/create.js.map +1 -1
  49. package/dist/commands/chat/interaction.js +39 -6
  50. package/dist/commands/chat/interaction.js.map +1 -1
  51. package/dist/commands/chat/message.js +57 -33
  52. package/dist/commands/chat/message.js.map +1 -1
  53. package/dist/commands/chat/publish.js +72 -11
  54. package/dist/commands/chat/publish.js.map +1 -1
  55. package/dist/commands/chat/security.d.ts +1 -1
  56. package/dist/commands/chat/security.js +73 -29
  57. package/dist/commands/chat/security.js.map +1 -1
  58. package/dist/commands/independent-creation.d.ts +6 -0
  59. package/dist/commands/independent-creation.js +140 -0
  60. package/dist/commands/independent-creation.js.map +1 -0
  61. package/dist/commands/market/index.d.ts +3 -0
  62. package/dist/commands/market/index.js +111 -0
  63. package/dist/commands/market/index.js.map +1 -0
  64. package/dist/commands/order/index.d.ts +3 -0
  65. package/dist/commands/order/index.js +41 -0
  66. package/dist/commands/order/index.js.map +1 -0
  67. package/dist/commands/ppt/index.d.ts +3 -0
  68. package/dist/commands/ppt/index.js +159 -0
  69. package/dist/commands/ppt/index.js.map +1 -0
  70. package/dist/commands/session/diff.d.ts +4 -0
  71. package/dist/commands/session/diff.js +12 -0
  72. package/dist/commands/session/diff.js.map +1 -0
  73. package/dist/commands/session/history.d.ts +3 -0
  74. package/dist/commands/session/history.js +50 -0
  75. package/dist/commands/session/history.js.map +1 -0
  76. package/dist/commands/session/index.js +4 -0
  77. package/dist/commands/session/index.js.map +1 -1
  78. package/dist/commands/shared.d.ts +2 -2
  79. package/dist/commands/shared.js +5 -4
  80. package/dist/commands/shared.js.map +1 -1
  81. package/dist/commands/site/index.d.ts +3 -0
  82. package/dist/commands/site/index.js +113 -0
  83. package/dist/commands/site/index.js.map +1 -0
  84. package/dist/commands/system/version.js +13 -2
  85. package/dist/commands/system/version.js.map +1 -1
  86. package/dist/conversation/agent-friendly.js +2 -2
  87. package/dist/conversation/managed-agent-create-only.d.ts +26 -0
  88. package/dist/conversation/managed-agent-create-only.js +287 -0
  89. package/dist/conversation/managed-agent-create-only.js.map +1 -0
  90. package/dist/conversation/managed-agent-entry.d.ts +8 -8
  91. package/dist/conversation/ppt-preflight.d.ts +13 -0
  92. package/dist/conversation/ppt-preflight.js +68 -0
  93. package/dist/conversation/ppt-preflight.js.map +1 -0
  94. package/dist/conversation/project-check-preflight.d.ts +22 -0
  95. package/dist/conversation/project-check-preflight.js +89 -0
  96. package/dist/conversation/project-check-preflight.js.map +1 -0
  97. package/dist/conversation/publish-preflight.d.ts +44 -0
  98. package/dist/conversation/publish-preflight.js +123 -0
  99. package/dist/conversation/publish-preflight.js.map +1 -0
  100. package/dist/conversation/security-entry.d.ts +14 -0
  101. package/dist/conversation/security-entry.js +49 -0
  102. package/dist/conversation/security-entry.js.map +1 -0
  103. package/dist/conversation/security-review.d.ts +1 -1
  104. package/dist/conversation/security-review.js +1 -1
  105. package/dist/conversation/security-review.js.map +1 -1
  106. package/dist/conversation/snapshot-diff.d.ts +44 -0
  107. package/dist/conversation/snapshot-diff.js +134 -0
  108. package/dist/conversation/snapshot-diff.js.map +1 -0
  109. package/dist/interactions/managed-agent-model.d.ts +3 -0
  110. package/dist/interactions/managed-agent-model.js +2 -0
  111. package/dist/interactions/managed-agent-model.js.map +1 -1
  112. package/dist/interactions/managed-agent-wizard.d.ts +1 -1
  113. package/dist/interactions/managed-agent-wizard.js +38 -6
  114. package/dist/interactions/managed-agent-wizard.js.map +1 -1
  115. package/dist/program.js +12 -0
  116. package/dist/program.js.map +1 -1
  117. package/dist/runtime.d.ts +1 -1
  118. package/dist/runtime.js +2 -2
  119. package/dist/runtime.js.map +1 -1
  120. package/dist/site-analysis/pagespeed-report.d.ts +48 -0
  121. package/dist/site-analysis/pagespeed-report.js +163 -0
  122. package/dist/site-analysis/pagespeed-report.js.map +1 -0
  123. package/dist/transport/http-client.js +17 -3
  124. package/dist/transport/http-client.js.map +1 -1
  125. package/package.json +1 -1
@@ -0,0 +1,165 @@
1
+ /** 网站分析只读接口与结果投影。@author xiuyu.yi */
2
+ import { z } from 'zod';
3
+ import { parseWire } from '../contracts/node-wire.js';
4
+ import { object } from '../contracts/value.js';
5
+ import { CliError } from '../output/exit-codes.js';
6
+ import { REPORT_CATEGORIES, readPageSpeedReport } from '../site-analysis/pagespeed-report.js';
7
+ const optionalText = z.string().nullish();
8
+ const integer = z.number().int().safe();
9
+ const timestamp = integer.nullish();
10
+ const pagespeedSchema = z
11
+ .object({
12
+ sessionId: z.string().min(1),
13
+ strategy: optionalText,
14
+ status: integer.min(0).max(15),
15
+ updatedAt: timestamp,
16
+ accessibility: optionalText,
17
+ bestPractices: optionalText,
18
+ performance: optionalText,
19
+ seo: optionalText,
20
+ })
21
+ .nullish();
22
+ const monitorSchema = z.object({
23
+ sessionId: z.string().min(1),
24
+ published: z.boolean(),
25
+ currentPublishedSnapshotId: integer.nullish(),
26
+ currentPublishedVersion: optionalText,
27
+ planId: optionalText,
28
+ status: optionalText,
29
+ frequency: optionalText,
30
+ outdated: z.boolean().nullish(),
31
+ lastRunAt: timestamp,
32
+ nextRunAt: timestamp,
33
+ selectedEndpointIds: z.array(z.string()),
34
+ candidates: z.array(z.object({
35
+ id: z.string().min(1),
36
+ displayName: optionalText,
37
+ targetType: optionalText,
38
+ method: optionalText,
39
+ path: optionalText,
40
+ monitorable: z.boolean().nullish(),
41
+ blockedReasonCode: optionalText,
42
+ })),
43
+ latestResults: z.array(z.object({
44
+ endpointId: z.string().min(1),
45
+ status: z.string().min(1),
46
+ httpStatus: integer.nullish(),
47
+ latencyMs: integer.nonnegative().nullish(),
48
+ checkedAt: timestamp,
49
+ })),
50
+ notice: optionalText,
51
+ });
52
+ const reportsSchema = z.array(z.object({
53
+ id: z.string().min(1),
54
+ weekStart: integer,
55
+ weekEnd: integer,
56
+ summary: z.string(),
57
+ createdAt: integer,
58
+ }));
59
+ const trafficRowsSchema = z
60
+ .array(z.object({
61
+ date: z.string().min(1),
62
+ visits: z.number().finite().nonnegative(),
63
+ pageviews: z.number().finite().nonnegative(),
64
+ }))
65
+ .min(1);
66
+ const listRowsSchema = z
67
+ .array(z.object({ label: z.string(), value: z.number().finite().nonnegative() }))
68
+ .min(1);
69
+ const RESULT_EXPLANATIONS = {
70
+ SUCCESS: '该监测项在记录时间检查成功,不代表整个网站当前健康',
71
+ HTTP_ERROR: '该监测项返回了异常 HTTP 状态',
72
+ AUTH_FAILED: '该监测项认证失败',
73
+ TIMEOUT: '该监测项检查超时',
74
+ NETWORK_BLOCKED: '该监测项网络访问受限',
75
+ INCONCLUSIVE: '该监测项结果无法确定',
76
+ PAUSED: '该监测项已暂停',
77
+ };
78
+ export const TRAFFIC_RANGE_DESCRIPTIONS = {
79
+ today: '服务端当天零点至今;时区由服务端决定',
80
+ yesterday: '服务端昨天零点至今天零点前;时区由服务端决定',
81
+ last7Days: '服务端7天前零点至今,并非固定最近168小时;时区由服务端决定',
82
+ };
83
+ function available(conditions) {
84
+ return conditions.every(Boolean) ? 'AVAILABLE' : conditions.some(Boolean) ? 'PARTIAL' : 'UNKNOWN';
85
+ }
86
+ export class SiteAnalysisApi {
87
+ client;
88
+ constructor(client) {
89
+ this.client = client;
90
+ }
91
+ async traffic(sessionId, range) {
92
+ const params = new URLSearchParams({ timeRange: range, sessionId });
93
+ const raw = parseWire(z.record(z.unknown()), (await this.client.request(`/web-api/analysis?${params}`, undefined, { method: 'GET' })).data);
94
+ const currentAvailable = typeof raw.currentVisitors === 'number' &&
95
+ Number.isFinite(raw.currentVisitors) &&
96
+ raw.currentVisitors > 0;
97
+ const rows = trafficRowsSchema.safeParse(object(object(raw.timeSeries).result).data);
98
+ const rawLists = Array.isArray(raw.lists) ? raw.lists.map(object) : [];
99
+ const labels = { source: 'Source', page: 'Page', country: 'Country', device: 'Device' };
100
+ const lists = Object.fromEntries(Object.entries(labels).map(([key, label]) => {
101
+ const matches = rawLists.filter((entry) => entry.label === label);
102
+ const parsed = listRowsSchema.safeParse(matches.length === 1 ? matches[0]?.data : undefined);
103
+ return [
104
+ key,
105
+ {
106
+ availability: parsed.success ? 'AVAILABLE' : 'UNKNOWN',
107
+ items: parsed.success ? parsed.data.slice(0, 5) : [],
108
+ },
109
+ ];
110
+ }));
111
+ return {
112
+ availability: available([
113
+ currentAvailable,
114
+ rows.success,
115
+ ...Object.values(lists).map((entry) => entry.availability === 'AVAILABLE'),
116
+ ]),
117
+ traffic: {
118
+ currentVisitors: {
119
+ availability: currentAvailable ? 'AVAILABLE' : 'UNKNOWN',
120
+ value: currentAvailable ? raw.currentVisitors : null,
121
+ },
122
+ series: {
123
+ availability: rows.success ? 'AVAILABLE' : 'UNKNOWN',
124
+ items: rows.success ? rows.data : [],
125
+ },
126
+ lists,
127
+ },
128
+ };
129
+ }
130
+ async performance(sessionId) {
131
+ const record = parseWire(pagespeedSchema, await this.client.call('/api/uxa-center/agent/AgentQuery/querySessionPagespeed', { sessionId }));
132
+ if (!record)
133
+ return { availability: 'NO_REPORT', reports: [] };
134
+ if (record.sessionId !== sessionId)
135
+ throw new CliError('PROTOCOL_ERROR', '性能报告目标与本次作品不一致');
136
+ const reports = await Promise.all(REPORT_CATEGORIES.map((category) => readPageSpeedReport(sessionId, category, record[category.field], record.status, this.client.signal)));
137
+ return {
138
+ availability: available(reports.map((report) => report.availability === 'AVAILABLE')),
139
+ recordedAt: record.updatedAt ?? null,
140
+ strategy: record.strategy ?? null,
141
+ statusMask: record.status,
142
+ reports,
143
+ };
144
+ }
145
+ async overview(sessionId) {
146
+ const monitor = parseWire(monitorSchema, await this.client.call('/api/uxa-center/agent/RuntimeMonitor/overview', { sessionId }));
147
+ if (monitor.sessionId !== sessionId)
148
+ throw new CliError('PROTOCOL_ERROR', '巡检结果目标与本次作品不一致');
149
+ return {
150
+ ...monitor,
151
+ latestResults: monitor.latestResults.map((result) => ({
152
+ ...result,
153
+ selected: monitor.selectedEndpointIds.includes(result.endpointId),
154
+ statusExplanation: RESULT_EXPLANATIONS[result.status] ?? '未知监测状态,不能判断是否健康',
155
+ })),
156
+ };
157
+ }
158
+ async reports(sessionId, page, pageSize) {
159
+ const items = parseWire(reportsSchema, await this.client.call('/api/uxa-center/agent/RuntimeMonitor/reports', { sessionId, page, pageSize }));
160
+ if (items.length > pageSize)
161
+ throw new CliError('PROTOCOL_ERROR', '巡检周报返回数量超过请求页大小');
162
+ return items;
163
+ }
164
+ }
165
+ //# sourceMappingURL=site-analysis-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-analysis-api.js","sourceRoot":"","sources":["../../src/api/site-analysis-api.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export declare function ensurePat(options: {
8
8
  output: OutputWriter;
9
9
  signal: AbortSignal;
10
10
  allowBrowser: boolean;
11
+ verifyExisting?: boolean;
11
12
  name: string;
12
13
  }): Promise<PatCredential>;
@@ -7,6 +7,7 @@ import { object, text } from '../contracts/value.js';
7
7
  import { CliError } from '../output/exit-codes.js';
8
8
  import { ApiClient } from '../transport/api-client.js';
9
9
  import { PatStore, validatePat } from './pat-store.js';
10
+ import { isCredentialRejected, verifyCredential } from './credential-status.js';
10
11
  async function openBrowser(url, signal) {
11
12
  const [command, args] = process.platform === 'darwin'
12
13
  ? ['open', [url]]
@@ -27,8 +28,30 @@ async function openBrowser(url, signal) {
27
28
  export async function ensurePat(options) {
28
29
  const { store, config, output, signal: commandSignal, allowBrowser, name } = options;
29
30
  const existing = await store.readIfPresent();
30
- if (existing)
31
- return existing;
31
+ if (existing) {
32
+ output.registerSecret(existing.pat);
33
+ if (!options.verifyExisting)
34
+ return existing;
35
+ try {
36
+ await verifyCredential(new ApiClient(config, existing.pat, undefined, commandSignal));
37
+ return existing;
38
+ }
39
+ catch (error) {
40
+ if (!isCredentialRejected(error))
41
+ throw error;
42
+ if (existing.source === 'env')
43
+ throw new CliError('AUTH_REQUIRED', 'SUPERUN_PAT 已被拒绝,请更新或移除该环境变量后重新登录', {
44
+ authFailure: 'CREDENTIAL_REJECTED',
45
+ credentialSource: 'env',
46
+ });
47
+ if (config.endpoint !== DEFAULT_ENDPOINT)
48
+ throw new CliError('AUTH_REQUIRED', '目标环境拒绝了当前 PAT,请核对 endpoint 与对应环境的凭据', {
49
+ authFailure: 'CREDENTIAL_REJECTED',
50
+ credentialSource: 'file',
51
+ });
52
+ // 旧凭据先保留,只有完整网页登录成功后才原子替换。
53
+ }
54
+ }
32
55
  if (!allowBrowser)
33
56
  throw new CliError('AUTH_REQUIRED', '未配置 PAT,请执行 superun-ai auth login;脚本中请设置 SUPERUN_PAT 或使用 auth login --stdin');
34
57
  // 认证统一使用 superun 站点,业务地址不影响登录与凭据签发。
@@ -1 +1 @@
1
- {"version":3,"file":"browser-login.js","sourceRoot":"","sources":["../../src/auth/browser-login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-login.js","sourceRoot":"","sources":["../../src/auth/browser-login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { CliError } from '../output/exit-codes.js';
2
+ import type { ApiClient } from '../transport/api-client.js';
3
+ export declare function isCredentialRejected(error: unknown): error is CliError;
4
+ export declare function verifyCredential(client: ApiClient): Promise<void>;
@@ -0,0 +1,19 @@
1
+ /** 在线核对 PAT,不读取或选择具体作品。@author xiuyu.yi */
2
+ import { object } from '../contracts/value.js';
3
+ import { CliError } from '../output/exit-codes.js';
4
+ export function isCredentialRejected(error) {
5
+ return (error instanceof CliError &&
6
+ error.code === 'AUTH_REQUIRED' &&
7
+ (error.details.httpStatus === 401 || String(error.details.businessCode) === '1000011'));
8
+ }
9
+ export async function verifyCredential(client) {
10
+ const response = object(await client.call('/api/uxa-center/agent/AgentQuery/pageQuerySessionByLastId', {
11
+ pageSize: 1,
12
+ modes: [6],
13
+ scopes: ['mine'],
14
+ }));
15
+ // 空列表同样是有效登录;只校验结构,不输出列表或改变项目绑定。
16
+ if (![response.data, response.items, response.list].some(Array.isArray))
17
+ throw new CliError('PROTOCOL_ERROR', '登录校验未返回有效分页结构,请稍后重试');
18
+ }
19
+ //# sourceMappingURL=credential-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-status.js","sourceRoot":"","sources":["../../src/auth/credential-status.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,KAAK,YAAY,QAAQ;QACzB,KAAK,CAAC,IAAI,KAAK,eAAe;QAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CACvF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB;IACtD,MAAM,QAAQ,GAAG,MAAM,CACrB,MAAM,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE;QAC7E,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC,CAAC,CAAC;QACV,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB,CAAC,CACH,CAAC;IACF,iCAAiC;IACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QACrE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandContext } from '../shared.js';
3
+ export declare function registerAgent(program: Command, context: CommandContext): void;
@@ -0,0 +1,68 @@
1
+ /** 只搭建托管智能体配置,复用官方入口和既有向导。@author xiuyu.yi */
2
+ import { InvalidArgumentError } from 'commander';
3
+ import { z } from 'zod';
4
+ import { runtime, readInput, businessWrite } from '../shared.js';
5
+ import { object } from '../../contracts/value.js';
6
+ import { CliError } from '../../output/exit-codes.js';
7
+ import { startAgentCreation } from '../../conversation/managed-agent-create-only.js';
8
+ import { ManagedAgentResourceApi, validateManagedAgentId } from '../../api/managed-agent-resource-api.js';
9
+ import { registerIndependentCreation } from '../independent-creation.js';
10
+ function sessionValue(value) {
11
+ if (!value || /[\s,\/\\?#]/.test(value))
12
+ throw new InvalidArgumentError('请明确一个主项目sessionId,不能传分支链接或多个目标');
13
+ return value;
14
+ }
15
+ export function registerAgent(program, context) {
16
+ const agent = program.command('agent').description('搭建托管智能体配置并读回资源,不运行或部署');
17
+ registerIndependentCreation(agent.command('app').description('从需求独立搭建智能体应用'), context, 'agent-app');
18
+ agent
19
+ .command('create')
20
+ .argument('<sessionId>', '本次明确的主项目资源域', sessionValue)
21
+ .description('提交官方智能体创建入口,只创建资源;后续用chat state查看向导')
22
+ .option('--message <text>', '本次智能体工作说明,最多4000字符')
23
+ .option('--input <file>', '仅含content或message的JSON,-表示标准输入')
24
+ .action(async (sessionId, _options, command) => {
25
+ const options = command.opts();
26
+ if ((options.message !== undefined) === (options.input !== undefined))
27
+ throw new CliError('INVALID_ARGUMENT', '--message和--input必须且只能选一个');
28
+ const input = z
29
+ .object({ content: z.string().optional(), message: z.string().optional() })
30
+ .strict()
31
+ .safeParse(options.input !== undefined ? await readInput(options.input) : { message: options.message });
32
+ if (!input.success || (input.data.content !== undefined && input.data.message !== undefined))
33
+ throw new CliError('INVALID_ARGUMENT', '工作说明JSON只能包含content或message之一');
34
+ const description = (input.data.content ?? input.data.message ?? '').trim();
35
+ if (!description || description.length > 4000)
36
+ throw new CliError('INVALID_ARGUMENT', '智能体工作说明须为1至4000字符');
37
+ const service = await runtime(context, command);
38
+ const response = object(await businessWrite(context, service, sessionId, () => startAgentCreation(service, sessionId, description)));
39
+ const result = await service.accepted(response, sessionId, false, {});
40
+ context.output.write({
41
+ ...result,
42
+ managedAgentEntry: {
43
+ createOnly: true,
44
+ sessionId,
45
+ sourceMessageId: response.sourceMessageId ?? response.messageId ?? null,
46
+ reused: response.reused === true,
47
+ phase: response.entryPending ? 'ENTRY_PENDING' : 'SUBMITTED',
48
+ },
49
+ });
50
+ });
51
+ agent
52
+ .command('get')
53
+ .argument('<sessionId>', '资源所属的同一主项目', sessionValue)
54
+ .argument('<agentId>', '平台返回的公开uxagent_智能体ID', validateManagedAgentId)
55
+ .description('在指定项目资源域只读核验已创建智能体,不创建测试运行会话')
56
+ .action(async (sessionId, agentId, _options, command) => {
57
+ const service = await runtime(context, command);
58
+ const resource = await new ManagedAgentResourceApi(service.client).getAgent(sessionId, agentId);
59
+ context.output.write({
60
+ state: 'COMPLETED',
61
+ resourceSessionId: sessionId,
62
+ agentId,
63
+ verified: true,
64
+ agent: resource,
65
+ });
66
+ });
67
+ }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** 复用已有 PAT,缺失时通过网页登录领取;支持手动导入。@author xiuyu.yi */
1
+ /** 校验并复用已有 PAT,缺失或失效时通过网页登录领取;支持手动导入。@author xiuyu.yi */
2
2
  import { Option } from 'commander';
3
3
  import { readPatFromStdin } from '../../auth/pat-store.js';
4
4
  import { requireCredentials } from '../shared.js';
@@ -10,8 +10,13 @@ export function registerLogin(auth, context) {
10
10
  .option('--stdin', '从标准输入读取 PAT')
11
11
  .action(async (options, command) => {
12
12
  if (!options.pat && !options.stdin) {
13
- const { credentialSource } = await requireCredentials(context, command, true);
14
- context.output.write({ state: 'CONFIGURED', credentialSource });
13
+ const { credentialSource } = await requireCredentials(context, command, true, true);
14
+ context.output.write({
15
+ state: 'CONFIGURED',
16
+ credentialSource,
17
+ authenticated: true,
18
+ checkedOnline: true,
19
+ });
15
20
  return;
16
21
  }
17
22
  const pat = await readPatFromStdin(!options.stdin);
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IAClE,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oBAAoB,CAAC;SACjC,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAClE,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,OAA2C,EAAE,OAAgB,EAAE,EAAE;QAC9E,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IAClE,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oBAAoB,CAAC;SACjC,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAClE,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,OAA2C,EAAE,OAAgB,EAAE,EAAE;QAC9E,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBACnB,KAAK,EAAE,YAAY;gBACnB,gBAAgB;gBAChB,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,4 +1,4 @@
1
- /** 查看本地 PAT 配置状态,不额外请求业务接口。@author xiuyu.yi */
1
+ /** 默认查看本地配置,可显式在线核对已有 PAT。@author xiuyu.yi */
2
2
  import type { Command } from 'commander';
3
3
  import type { CommandContext } from '../shared.js';
4
4
  export declare function registerStatus(auth: Command, context: CommandContext): void;
@@ -1,13 +1,18 @@
1
1
  import { requireCredentials } from '../shared.js';
2
+ import { verifyCredential } from '../../auth/credential-status.js';
2
3
  export function registerStatus(auth, context) {
3
4
  auth
4
5
  .command('status')
5
6
  .description('查看本地 PAT 配置状态')
6
- .action(async (_options, command) => {
7
- const { credentialSource } = await requireCredentials(context, command);
7
+ .option('--online', '只读验证当前 PAT 是否仍有效,不打开浏览器')
8
+ .action(async (options, command) => {
9
+ const { credentialSource, service } = await requireCredentials(context, command);
10
+ if (options.online)
11
+ await verifyCredential(service.client);
8
12
  context.output.write({
9
13
  state: 'CONFIGURED',
10
14
  credentialSource,
15
+ ...(options.online ? { authenticated: true, checkedOnline: true } : {}),
11
16
  });
12
17
  });
13
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,OAAuB;IACnE,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACpD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,KAAK,EAAE,YAAY;YACnB,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,OAAuB;IACnE,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,OAAgB,EAAE,EAAE;QAChE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,KAAK,EAAE,YAAY;YACnB,gBAAgB;YAChB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandContext } from '../shared.js';
3
+ export declare function registerBill(program: Command, context: CommandContext): void;
@@ -0,0 +1,106 @@
1
+ /** 查询算力账单明细、扣减汇总和筛选目录。@author xiuyu.yi */
2
+ import { InvalidArgumentError, Option } from 'commander';
3
+ import { BillQueryApi } from '../../api/bill-query-api.js';
4
+ import { CliError } from '../../output/exit-codes.js';
5
+ import { runtime } from '../shared.js';
6
+ function positiveLong(value) {
7
+ if (value.length > 19 || !/^[1-9]\d*$/.test(value) || BigInt(value) > 9223372036854775807n)
8
+ throw new InvalidArgumentError('参数必须是 Java Long 范围内的正整数字符串,不能传 0');
9
+ return value;
10
+ }
11
+ function sessionValue(value) {
12
+ if (!value || /[\s,]/.test(value))
13
+ throw new InvalidArgumentError('请传入本次明确的单个 sessionId,不能包含空格或逗号');
14
+ return value;
15
+ }
16
+ function typeValues(value) {
17
+ const parts = value.split(',');
18
+ if (parts.some((part) => !/^\d+$/.test(part) || Number(part) > 2_147_483_647))
19
+ throw new InvalidArgumentError('消费类型必须是逗号分隔的 0 至 2147483647 整数,不能有空项');
20
+ return [...new Set(parts.map(Number))];
21
+ }
22
+ function dateValue(value) {
23
+ const milliseconds = Date.parse(`${value}T00:00:00.000Z`);
24
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(value) ||
25
+ !Number.isFinite(milliseconds) ||
26
+ new Date(milliseconds).toISOString().slice(0, 10) !== value)
27
+ throw new InvalidArgumentError('日期必须是真实有效的 YYYY-MM-DD');
28
+ return value;
29
+ }
30
+ function withWorkspace(command) {
31
+ return command.option('--workspace-id <id>', '明确的工作空间 ID;省略查询个人账单', positiveLong);
32
+ }
33
+ function withFilters(command) {
34
+ return withWorkspace(command)
35
+ .option('--session-id <id>', '在既定账单账户内筛选本次明确的单个作品', sessionValue)
36
+ .option('--related-types <codes>', '逗号分隔的业务类型 code,先通过 bill types 查询', typeValues);
37
+ }
38
+ function queryScope(filters) {
39
+ return {
40
+ currency: 'GLOW_TOKEN',
41
+ scope: filters.workspaceId === undefined ? 'personal' : 'workspace',
42
+ workspaceId: filters.workspaceId ?? null,
43
+ sessionId: filters.sessionId ?? null,
44
+ relatedTypes: filters.relatedTypes ?? [],
45
+ };
46
+ }
47
+ export function registerBill(program, context) {
48
+ const bill = program.command('bill').description('查询算力账单和扣减类统计');
49
+ withFilters(bill.command('list').description('查询算力账单明细,按服务端游标翻页,无日期或条数选项'))
50
+ .option('--cursor <scrollId>', '上次返回的 scrollId;账户或筛选变化时省略', positiveLong)
51
+ .action(async (_options, command) => {
52
+ const filters = command.opts();
53
+ const service = await runtime(context, command);
54
+ const result = await new BillQueryApi(service.client).page(filters, filters.cursor);
55
+ context.output.write({
56
+ state: 'COMPLETED',
57
+ ...queryScope(filters),
58
+ amountUnit: 'hundredth-credit',
59
+ ...result,
60
+ });
61
+ });
62
+ withFilters(bill.command('stats').description('按日期汇总扣减类账单,含负数冲正,不含充值类用量返还'))
63
+ .requiredOption('--from <date>', '开始日期 YYYY-MM-DD,按上海时区且包含当天', dateValue)
64
+ .requiredOption('--to <date>', '结束日期 YYYY-MM-DD,含首尾最多 60 天', dateValue)
65
+ .addOption(new Option('--granularity <period>', '统计粒度').choices(['DAY', 'WEEK', 'MONTH']).default('DAY'))
66
+ .action(async (_options, command) => {
67
+ const options = command.opts();
68
+ const days = (Date.parse(`${options.to}T00:00:00.000Z`) - Date.parse(`${options.from}T00:00:00.000Z`)) /
69
+ 86_400_000 +
70
+ 1;
71
+ if (days < 1 || days > 60)
72
+ throw new CliError('INVALID_ARGUMENT', '开始日期不能晚于结束日期,且含首尾最多 60 天');
73
+ const service = await runtime(context, command);
74
+ const result = await new BillQueryApi(service.client).statistics({
75
+ ...options,
76
+ startDate: options.from,
77
+ endDate: options.to,
78
+ });
79
+ context.output.write({
80
+ state: 'COMPLETED',
81
+ ...queryScope(options),
82
+ startDate: options.from,
83
+ endDate: options.to,
84
+ granularity: options.granularity,
85
+ timeZone: 'Asia/Shanghai',
86
+ amountUnit: 'credit',
87
+ statisticsScope: '仅统计扣减类账单(type=2),包含负数冲正,不包含充值类用量返还。',
88
+ ...result,
89
+ });
90
+ });
91
+ withWorkspace(bill.command('projects').description('查询账单作品筛选候选,不代表当前编辑权限')).action(async (_options, command) => {
92
+ const options = command.opts();
93
+ const service = await runtime(context, command);
94
+ const items = await new BillQueryApi(service.client).projects(options.workspaceId);
95
+ context.output.write({ state: 'COMPLETED', ...queryScope(options), items });
96
+ });
97
+ bill
98
+ .command('types')
99
+ .description('查询算力账单支持的充值和消费业务类型')
100
+ .action(async (_options, command) => {
101
+ const service = await runtime(context, command);
102
+ const items = await new BillQueryApi(service.client).types();
103
+ context.output.write({ state: 'COMPLETED', currency: 'GLOW_TOKEN', items });
104
+ });
105
+ }
106
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/bill/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export function registerCreate(chat, context) {
3
3
  messageOptions(chat.command('create').description('新建项目并发送需求'))
4
4
  .option('--model <model>', '选择模型')
5
5
  .option('--workspace-id <workspaceId>', '归属工作空间')
6
+ .option('--slides', '创建网页PPT作品;使用 --no-wait 保留独立演示流程')
6
7
  .option('--skip-question', '跳过需求问卷,创建后立即生成方案')
7
8
  .option('--advanced', '配合 --skip-question 委托高级设计师;先运行 free-quota,缺少设计师额度或查询失败时暂停,实际状态以服务端回执为准')
8
9
  .action(async (_options, command) => sendMessage(context, undefined, command));
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/chat/create.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,OAAuB;IACnE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;SAC5D,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;SACjC,MAAM,CAAC,8BAA8B,EAAE,QAAQ,CAAC;SAChD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CACL,YAAY,EACZ,wEAAwE,CACzE;SACA,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/chat/create.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,OAAuB;IACnE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;SAC5D,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;SACjC,MAAM,CAAC,8BAA8B,EAAE,QAAQ,CAAC;SAChD,MAAM,CAAC,UAAU,EAAE,iCAAiC,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CACL,YAAY,EACZ,wEAAwE,CACzE;SACA,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACrG,CAAC"}