openxiangda-devkit-core 2.0.0-alpha.97 → 2.0.0

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -9
  3. package/dist/app-spec.d.ts +30 -12
  4. package/dist/app-spec.d.ts.map +1 -1
  5. package/dist/app-spec.js +238 -57
  6. package/dist/app-spec.js.map +1 -1
  7. package/dist/application-services.d.ts +625 -42
  8. package/dist/application-services.d.ts.map +1 -1
  9. package/dist/application-services.js +321 -85
  10. package/dist/application-services.js.map +1 -1
  11. package/dist/application-ui-contract.d.ts +5 -0
  12. package/dist/application-ui-contract.d.ts.map +1 -0
  13. package/dist/application-ui-contract.js +149 -0
  14. package/dist/application-ui-contract.js.map +1 -0
  15. package/dist/backend-image-build.js +6 -11
  16. package/dist/backend-image-build.js.map +1 -1
  17. package/dist/command-process.d.ts +14 -0
  18. package/dist/command-process.d.ts.map +1 -0
  19. package/dist/command-process.js +51 -0
  20. package/dist/command-process.js.map +1 -0
  21. package/dist/command-registry.d.ts +44 -4
  22. package/dist/command-registry.d.ts.map +1 -1
  23. package/dist/command-registry.js +10 -6
  24. package/dist/command-registry.js.map +1 -1
  25. package/dist/compiler/ai-catalog.d.ts.map +1 -1
  26. package/dist/compiler/ai-catalog.js +2 -1
  27. package/dist/compiler/ai-catalog.js.map +1 -1
  28. package/dist/compiler/application-model.d.ts +60 -0
  29. package/dist/compiler/application-model.d.ts.map +1 -0
  30. package/dist/compiler/application-model.js +141 -0
  31. package/dist/compiler/application-model.js.map +1 -0
  32. package/dist/compiler/bundle.d.ts.map +1 -1
  33. package/dist/compiler/bundle.js +196 -98
  34. package/dist/compiler/bundle.js.map +1 -1
  35. package/dist/compiler/config.d.ts +36 -10
  36. package/dist/compiler/config.d.ts.map +1 -1
  37. package/dist/compiler/config.js +536 -171
  38. package/dist/compiler/config.js.map +1 -1
  39. package/dist/compiler/field-surface.js +1 -1
  40. package/dist/compiler/field-surface.js.map +1 -1
  41. package/dist/compiler/package-compiler.d.ts.map +1 -1
  42. package/dist/compiler/package-compiler.js +12 -0
  43. package/dist/compiler/package-compiler.js.map +1 -1
  44. package/dist/compiler/permission-review.d.ts +139 -0
  45. package/dist/compiler/permission-review.d.ts.map +1 -0
  46. package/dist/compiler/permission-review.js +131 -0
  47. package/dist/compiler/permission-review.js.map +1 -0
  48. package/dist/configuration-preflight.d.ts +7 -0
  49. package/dist/configuration-preflight.d.ts.map +1 -0
  50. package/dist/configuration-preflight.js +13 -0
  51. package/dist/configuration-preflight.js.map +1 -0
  52. package/dist/control-plane-client.d.ts +56 -61
  53. package/dist/control-plane-client.d.ts.map +1 -1
  54. package/dist/control-plane-client.js +89 -8
  55. package/dist/control-plane-client.js.map +1 -1
  56. package/dist/delivery-cache.d.ts +34 -0
  57. package/dist/delivery-cache.d.ts.map +1 -0
  58. package/dist/delivery-cache.js +186 -0
  59. package/dist/delivery-cache.js.map +1 -0
  60. package/dist/delivery-source.d.ts +17 -0
  61. package/dist/delivery-source.d.ts.map +1 -0
  62. package/dist/delivery-source.js +85 -0
  63. package/dist/delivery-source.js.map +1 -0
  64. package/dist/deployment-observer.d.ts +14 -0
  65. package/dist/deployment-observer.d.ts.map +1 -0
  66. package/dist/deployment-observer.js +68 -0
  67. package/dist/deployment-observer.js.map +1 -0
  68. package/dist/deployment.d.ts +17 -1
  69. package/dist/deployment.d.ts.map +1 -1
  70. package/dist/deployment.js +55 -15
  71. package/dist/deployment.js.map +1 -1
  72. package/dist/design-readiness.d.ts +24 -0
  73. package/dist/design-readiness.d.ts.map +1 -0
  74. package/dist/design-readiness.js +102 -0
  75. package/dist/design-readiness.js.map +1 -0
  76. package/dist/developer-errors.d.ts +11 -0
  77. package/dist/developer-errors.d.ts.map +1 -0
  78. package/dist/developer-errors.js +16 -0
  79. package/dist/developer-errors.js.map +1 -0
  80. package/dist/developer-operations.d.ts +190 -0
  81. package/dist/developer-operations.d.ts.map +1 -0
  82. package/dist/developer-operations.js +65 -0
  83. package/dist/developer-operations.js.map +1 -0
  84. package/dist/development-lifecycle.d.ts +75 -0
  85. package/dist/development-lifecycle.d.ts.map +1 -0
  86. package/dist/development-lifecycle.js +189 -0
  87. package/dist/development-lifecycle.js.map +1 -0
  88. package/dist/documentation.d.ts +111 -0
  89. package/dist/documentation.d.ts.map +1 -0
  90. package/dist/documentation.js +112 -0
  91. package/dist/documentation.js.map +1 -0
  92. package/dist/index.d.ts +10 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +10 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/operation-progress.d.ts +26 -0
  97. package/dist/operation-progress.d.ts.map +1 -0
  98. package/dist/operation-progress.js +92 -0
  99. package/dist/operation-progress.js.map +1 -0
  100. package/dist/optional-backend.d.ts +14 -0
  101. package/dist/optional-backend.d.ts.map +1 -0
  102. package/dist/optional-backend.js +145 -0
  103. package/dist/optional-backend.js.map +1 -0
  104. package/dist/session.d.ts +22 -0
  105. package/dist/session.d.ts.map +1 -1
  106. package/dist/session.js +36 -0
  107. package/dist/session.js.map +1 -1
  108. package/dist/workspace-loader.d.ts.map +1 -1
  109. package/dist/workspace-loader.js +17 -2
  110. package/dist/workspace-loader.js.map +1 -1
  111. package/dist/workspace-operation.d.ts +3 -0
  112. package/dist/workspace-operation.d.ts.map +1 -0
  113. package/dist/workspace-operation.js +45 -0
  114. package/dist/workspace-operation.js.map +1 -0
  115. package/dist/workspace.d.ts.map +1 -1
  116. package/dist/workspace.js +1 -0
  117. package/dist/workspace.js.map +1 -1
  118. package/package.json +18 -4
  119. package/templates/backend/Dockerfile +20 -0
  120. package/templates/backend/package.json +27 -0
  121. package/templates/backend/src/app.module.ts +23 -0
  122. package/templates/backend/src/main.ts +5 -0
  123. package/templates/backend/tsconfig.json +9 -0
@@ -0,0 +1,189 @@
1
+ import { inspectDesignReadiness } from './design-readiness.js';
2
+ import { execFileSync } from 'node:child_process';
3
+ import { existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join, relative, resolve } from 'node:path';
5
+ import { tmpdir } from 'node:os';
6
+ import { SCHEMA_VERSIONS } from 'openxiangda-contracts';
7
+ import { inspectAppSpec } from './app-spec.js';
8
+ const APP_SECTIONS = ['业务目标', '角色', '架构与数据关系', '业务任务与页面', '权限矩阵与确认', '性能与容量预算'];
9
+ const CHANGE_SECTIONS = ['为什么', '需求依据', '方案与影响', '任务与实现', '验收', '性能与容量预算'];
10
+ function issue(code, message, path) {
11
+ return { schemaVersion: SCHEMA_VERSIONS.diagnostic, severity: 'error', retryable: false, code, message, path, remediation: '依据实际业务补齐对应记录;运行 openxiangda spec context --json 查看阶段缺口,不能填写虚假确认或通过结果' };
12
+ }
13
+ function section(content, title) {
14
+ const source = content.replace(/<!--[\s\S]*?-->/g, '');
15
+ const start = source.indexOf(`\n## ${title}\n`);
16
+ if (start < 0)
17
+ return '';
18
+ return source.slice(start + title.length + 5).split(/\n## /)[0] || '';
19
+ }
20
+ function meaningful(content) {
21
+ return content.split('\n').map(line => line.replace(/^\s*[-*]\s*(?:\[[ x]\]\s*)?/, '').trim())
22
+ .filter(line => line && !line.startsWith('|') && !line.startsWith('#') && !/^(待补充|待确认|TBD|TODO|无。?|一个可观察的正向结果|需要时补充拒绝、异常或权限反例)$/.test(line)).join('\n').length >= 8
23
+ || content.split('\n').filter(line => line.trim().startsWith('|') && !/^[|\s:-]+$/.test(line)).length >= 2;
24
+ }
25
+ function boundedGit(root, args, maxBuffer = 2 * 1024 * 1024) {
26
+ return execFileSync('git', ['-C', root, ...args], { encoding: 'utf8', timeout: 10_000, maxBuffer, stdio: ['ignore', 'pipe', 'pipe'] }).trim();
27
+ }
28
+ function headMessage(root) {
29
+ try {
30
+ return boundedGit(root, ['log', '-1', '--format=%B']);
31
+ }
32
+ catch {
33
+ return '';
34
+ }
35
+ }
36
+ /** 按发布阶段评估事实完整性;不推断用户确认,也不将章节存在当作业务验收。 */
37
+ export function developmentLifecycle(root, contract, message = headMessage(root), selector) {
38
+ const index = inspectAppSpec(root, contract);
39
+ const explicit = message.match(/^AppSpec:\s*([a-z0-9]+(?:-[a-z0-9]+)*)\s*$/m)?.[1];
40
+ const changeId = selector || explicit || (index.index.activeChanges.length === 1 ? index.index.activeChanges[0]?.id : undefined);
41
+ const context = changeId ? inspectAppSpec(root, contract, changeId) : index;
42
+ const change = [...context.activeChanges, ...context.archivedChanges].find(item => item.id === changeId);
43
+ const diagnostics = context.diagnostics.filter(item => item.severity === 'error');
44
+ const app = context.application;
45
+ if (!app)
46
+ diagnostics.push(issue('APPSPEC_APPLICATION_REQUIRED', '正式发布需要应用总纲;运行 openxiangda spec init 后填写实际目标、权限、架构和容量', 'appspec/app.md'));
47
+ else
48
+ for (const title of APP_SECTIONS) {
49
+ if (!meaningful(section(app.content, title)))
50
+ diagnostics.push(issue('APPSPEC_APPLICATION_SECTION_INCOMPLETE', `应用总纲“${title}”尚无具体记录`, `${app.path}#${title}`));
51
+ }
52
+ const design = inspectDesignReadiness(context, change);
53
+ diagnostics.push(...design.diagnostics);
54
+ const designDiagnostics = [...diagnostics];
55
+ if (!change)
56
+ diagnostics.push(issue('APPSPEC_DELIVERY_CHANGE_REQUIRED', '需要关联本轮变更;有多个活动变更或引用历史记录时,在提交说明加入 AppSpec: <变更ID>', 'appspec/changes/active'));
57
+ else {
58
+ for (const title of CHANGE_SECTIONS) {
59
+ if (!meaningful(section(change.content, title)))
60
+ diagnostics.push(issue('APPSPEC_CHANGE_SECTION_INCOMPLETE', `变更“${title}”尚无具体记录`, `${change.path}#${title}`));
61
+ }
62
+ if (change.status === 'draft' || change.status === 'cancelled')
63
+ diagnostics.push(issue('APPSPEC_CHANGE_NOT_READY', '变更仍是草稿或已取消;先澄清业务含义并记录实际依据,再进入 implementing', change.path));
64
+ }
65
+ for (const document of [app, change].filter((item) => !!item)) {
66
+ if (/^\s*[-*] \[ \]/m.test(section(document.content, '未确认问题'))) {
67
+ const blocking = issue('APPSPEC_BLOCKING_QUESTIONS', '仍有影响正式交付的未确认问题;非阻断假设单独记录,不冒充用户确认', `${document.path}#未确认问题`);
68
+ diagnostics.push(blocking);
69
+ designDiagnostics.push(blocking);
70
+ }
71
+ }
72
+ const acceptanceIds = [...new Set([...(app?.acceptanceIds || []), ...(change?.acceptanceIds || []), ...context.capabilities.flatMap(item => item.acceptanceIds), ...context.designs.flatMap(item => item.acceptanceIds)])];
73
+ if (change && !acceptanceIds.length)
74
+ diagnostics.push(issue('APPSPEC_ACCEPTANCE_PLAN_REQUIRED', '至少定义一个 #### AC-* 可观察验收场景,供测试部署后逐项验证', `${change.path}#验收`));
75
+ const readyForImplementation = design.readyForImplementation && !designDiagnostics.length;
76
+ return {
77
+ schemaVersion: 'openxiangda.development-lifecycle/v2',
78
+ stage: !readyForImplementation ? 'design-incomplete' : diagnostics.length ? 'ready-for-implementation' : 'ready-for-test',
79
+ readyForImplementation, design,
80
+ readyForTest: !diagnostics.length, changeId: change?.id || null, acceptanceIds,
81
+ currentSpecDigest: context.selectionDigest,
82
+ diagnostics,
83
+ nextCommand: changeId ? `openxiangda spec context ${changeId} --json` : 'openxiangda spec context --json',
84
+ context,
85
+ };
86
+ }
87
+ export function summarizeLifecycle(value) {
88
+ const { context, ...summary } = value;
89
+ return summary;
90
+ }
91
+ /** 生产验收按测试版本中的需求计划核对,当前主线后来增加的规则不会冒充已测规则。 */
92
+ export function lifecycleAtCommit(root, commit, contract) {
93
+ if (!/^[a-f0-9]{40,64}$/.test(commit))
94
+ throw new Error('APPSPEC_SOURCE_COMMIT_INVALID');
95
+ const scratch = mkdtempSync(join(tmpdir(), 'openxiangda-spec-source-'));
96
+ try {
97
+ const message = boundedGit(root, ['log', '-1', '--format=%B', commit]);
98
+ const selected = message.match(/^AppSpec:\s*([a-z0-9]+(?:-[a-z0-9]+)*)\s*$/m)?.[1];
99
+ const paths = boundedGit(root, ['ls-tree', '-r', '--name-only', commit, '--', 'appspec']).split('\n').filter(path => /^appspec\/(?:app\.md|capabilities\/[^/]+\.md|(?:decisions|product|experience|design|reviews)\/[^/]+\.md|changes\/active\/[^/]+\.md)$/.test(path)
100
+ || (selected && new RegExp(`^appspec/changes/history/[^/]+/${selected}\\.md$`).test(path)));
101
+ if (paths.length > 128)
102
+ throw new Error('APPSPEC_SOURCE_FILE_LIMIT');
103
+ let bytes = 0;
104
+ for (const path of paths) {
105
+ const content = execFileSync('git', ['-C', root, 'show', `${commit}:${path}`], { encoding: 'utf8', timeout: 10_000, maxBuffer: 256 * 1024, stdio: ['ignore', 'pipe', 'pipe'] });
106
+ bytes += Buffer.byteLength(content);
107
+ if (bytes > 2 * 1024 * 1024)
108
+ throw new Error('APPSPEC_SOURCE_SIZE_LIMIT');
109
+ const target = join(scratch, path);
110
+ mkdirSync(dirname(target), { recursive: true });
111
+ writeFileSync(target, content);
112
+ }
113
+ return developmentLifecycle(scratch, contract, message);
114
+ }
115
+ finally {
116
+ rmSync(scratch, { recursive: true, force: true });
117
+ }
118
+ }
119
+ export function verifyBusinessAcceptance(root, run, expected, pathInput) {
120
+ const defaultPath = `appspec/verification/${run.id}.json`;
121
+ const path = resolve(root, pathInput || defaultPath);
122
+ const local = relative(root, path).replaceAll('\\', '/');
123
+ const diagnostics = [];
124
+ function evidenceExists(value) {
125
+ if (typeof value !== 'string' || !value.trim())
126
+ return false;
127
+ if (value.startsWith('https://')) {
128
+ try {
129
+ return !!new URL(value).hostname;
130
+ }
131
+ catch {
132
+ return false;
133
+ }
134
+ }
135
+ const path = resolve(root, value);
136
+ const local = relative(root, path);
137
+ if (!local || local.startsWith('..'))
138
+ return false;
139
+ try {
140
+ let current = root;
141
+ for (const name of local.split(/[\\/]/)) {
142
+ current = join(current, name);
143
+ if (lstatSync(current).isSymbolicLink())
144
+ return false;
145
+ }
146
+ return lstatSync(path).isFile();
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ try {
153
+ if (!/^appspec\/verification\/[a-zA-Z0-9._-]+\.json$/.test(local))
154
+ throw new Error('验收报告应位于 appspec/verification/ 中');
155
+ for (const part of ['appspec', 'appspec/verification', local]) {
156
+ if (lstatSync(join(root, part)).isSymbolicLink())
157
+ throw new Error('验收报告路径不能使用符号链接');
158
+ }
159
+ if (!existsSync(path) || lstatSync(path).size > 1024 * 1024)
160
+ throw new Error('验收报告缺失或超过 1 MiB');
161
+ const report = JSON.parse(readFileSync(path, 'utf8'));
162
+ if (report.schemaVersion !== 'openxiangda.business-verification/v1' || report.appCode !== run.appCode || report.sourceDeploymentId !== run.id || report.packageDigest !== run.packageDigest || !expected.changeId || report.changeId !== expected.changeId || run.status !== 'succeeded' || run.environment.kind !== 'preproduction')
163
+ throw new Error('验收报告未绑定指定成功测试运行、包摘要与变更');
164
+ if (!Number.isFinite(Date.parse(report.recordedAt)) || !Array.isArray(report.scenarios) || !report.scenarios.length || report.scenarios.length > 500 || !Array.isArray(report.performance) || !report.performance.length || report.performance.length > 100)
165
+ throw new Error('报告需要记录时间、具体场景与性能测量');
166
+ const seen = new Set();
167
+ for (const scenario of report.scenarios) {
168
+ if (!/^AC-[A-Z0-9-]+$/.test(scenario.id) || seen.has(scenario.id) || scenario.status !== 'passed' || !meaningful(String(scenario.observation || '')) || !String(scenario.actor || '').trim() || !Array.isArray(scenario.evidence) || !scenario.evidence.some((value) => typeof value === 'string' && value.trim().length >= 4))
169
+ throw new Error('验收场景必须有唯一 AC ID、已通过结果、实际角色、观察与证据引用;失败或未测场景不能晋级');
170
+ seen.add(scenario.id);
171
+ if (!scenario.evidence.every(evidenceExists))
172
+ throw new Error('场景证据需要工作区内实际存在的文件或 HTTPS 引用');
173
+ }
174
+ if (expected.acceptanceIds.some(id => !seen.has(id)))
175
+ throw new Error('测试版本计划中的验收场景尚未全部覆盖');
176
+ for (const measurement of report.performance) {
177
+ if (!meaningful(String(measurement.scenario || '')) || !meaningful(String(measurement.sample || '')) || typeof measurement.targetMs !== 'number' || !Number.isFinite(measurement.targetMs) || measurement.targetMs <= 0 || typeof measurement.observedMs !== 'number' || !Number.isFinite(measurement.observedMs) || measurement.observedMs < 0 || measurement.observedMs > measurement.targetMs || !Array.isArray(measurement.evidence) || !measurement.evidence.length)
178
+ throw new Error('性能记录需要真实样本、目标毫秒数、实测毫秒数及证据;超出目标时先评估并修复');
179
+ if (!measurement.evidence.every(evidenceExists))
180
+ throw new Error('性能证据需要工作区内实际存在的文件或 HTTPS 引用');
181
+ }
182
+ return { ok: true, path: local, sourceDeploymentId: run.id, packageDigest: run.packageDigest, scenarios: report.scenarios.length, diagnostics };
183
+ }
184
+ catch (error) {
185
+ diagnostics.push(issue('APPSPEC_BUSINESS_ACCEPTANCE_REQUIRED', `生产晋级前需要该测试版本的实际验收报告:${error.message}`, local));
186
+ return { ok: false, path: local, sourceDeploymentId: run.id, packageDigest: run.packageDigest, scenarios: 0, diagnostics };
187
+ }
188
+ }
189
+ //# sourceMappingURL=development-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-lifecycle.js","sourceRoot":"","sources":["../src/development-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /** 使用指南的唯一主题目录;正文从同版本根包读取。 */
2
+ export declare const DOCUMENTATION_TOPICS: readonly [{
3
+ readonly id: "getting-started";
4
+ readonly title: "安装与开始开发";
5
+ readonly file: "getting-started.md";
6
+ }, {
7
+ readonly id: "product-design";
8
+ readonly title: "对话发现与详细产品设计";
9
+ readonly file: "product-design.md";
10
+ }, {
11
+ readonly id: "interaction-patterns";
12
+ readonly title: "页面交互模式与体验评审";
13
+ readonly file: "interaction-patterns.md";
14
+ }, {
15
+ readonly id: "development";
16
+ readonly title: "需求与开发流程";
17
+ readonly file: "development.md";
18
+ }, {
19
+ readonly id: "application-foundation";
20
+ readonly title: "业务模型与标准 CRUD";
21
+ readonly file: "application-foundation.md";
22
+ }, {
23
+ readonly id: "appspec";
24
+ readonly title: "需求、设计与交付记录";
25
+ readonly file: "appspec.md";
26
+ }, {
27
+ readonly id: "concepts";
28
+ readonly title: "架构与能力所有者";
29
+ readonly file: "concepts.md";
30
+ }, {
31
+ readonly id: "frontend";
32
+ readonly title: "页面与标准组件扩展";
33
+ readonly file: "frontend.md";
34
+ }, {
35
+ readonly id: "field-components";
36
+ readonly title: "字段、表单与移动控件";
37
+ readonly file: "field-components.md";
38
+ }, {
39
+ readonly id: "data-authz";
40
+ readonly title: "数据查询与权限";
41
+ readonly file: "data-authz.md";
42
+ }, {
43
+ readonly id: "public-access";
44
+ readonly title: "无账号的匿名公开访问";
45
+ readonly file: "public-access.md";
46
+ }, {
47
+ readonly id: "workflow-events";
48
+ readonly title: "审批、事件与通知";
49
+ readonly file: "workflow-events.md";
50
+ }, {
51
+ readonly id: "backend";
52
+ readonly title: "按需后端与业务动作";
53
+ readonly file: "backend.md";
54
+ }, {
55
+ readonly id: "administration";
56
+ readonly title: "应用管理与有效配置";
57
+ readonly file: "administration.md";
58
+ }, {
59
+ readonly id: "testing";
60
+ readonly title: "检查与真实业务验收";
61
+ readonly file: "testing.md";
62
+ }, {
63
+ readonly id: "delivery";
64
+ readonly title: "部署、生产晋级与恢复";
65
+ readonly file: "delivery.md";
66
+ }, {
67
+ readonly id: "upgrading";
68
+ readonly title: "版本升级与资料刷新";
69
+ readonly file: "upgrading.md";
70
+ }, {
71
+ readonly id: "cli";
72
+ readonly title: "CLI 命令参考";
73
+ readonly file: "reference/cli.md";
74
+ }, {
75
+ readonly id: "mcp";
76
+ readonly title: "MCP 配置与工具参考";
77
+ readonly file: "reference/mcp.md";
78
+ }];
79
+ /** Skill 参考文件名直接使用主题 ID,正文由同一中文主题生成。 */
80
+ export declare function documentationReferenceFile(id: string): string;
81
+ export declare function documentationRoot(): string;
82
+ export declare function documentationIndex(root?: string): {
83
+ schemaVersion: string;
84
+ topics: {
85
+ id: "appspec" | "delivery" | "frontend" | "backend" | "getting-started" | "product-design" | "interaction-patterns" | "development" | "application-foundation" | "concepts" | "field-components" | "data-authz" | "public-access" | "workflow-events" | "administration" | "testing" | "upgrading" | "cli" | "mcp";
86
+ title: "CLI 命令参考" | "安装与开始开发" | "对话发现与详细产品设计" | "页面交互模式与体验评审" | "需求与开发流程" | "业务模型与标准 CRUD" | "需求、设计与交付记录" | "架构与能力所有者" | "页面与标准组件扩展" | "字段、表单与移动控件" | "数据查询与权限" | "无账号的匿名公开访问" | "审批、事件与通知" | "按需后端与业务动作" | "应用管理与有效配置" | "检查与真实业务验收" | "部署、生产晋级与恢复" | "版本升级与资料刷新" | "MCP 配置与工具参考";
87
+ uri: string;
88
+ version: string;
89
+ sha256: string;
90
+ bytes: number;
91
+ sections: {
92
+ id: string;
93
+ title: string;
94
+ }[];
95
+ }[];
96
+ };
97
+ export declare function readDocumentation(id: string, section?: string, root?: string): {
98
+ schemaVersion: string;
99
+ topic: string;
100
+ title: "CLI 命令参考" | "安装与开始开发" | "对话发现与详细产品设计" | "页面交互模式与体验评审" | "需求与开发流程" | "业务模型与标准 CRUD" | "需求、设计与交付记录" | "架构与能力所有者" | "页面与标准组件扩展" | "字段、表单与移动控件" | "数据查询与权限" | "无账号的匿名公开访问" | "审批、事件与通知" | "按需后端与业务动作" | "应用管理与有效配置" | "检查与真实业务验收" | "部署、生产晋级与恢复" | "版本升级与资料刷新" | "MCP 配置与工具参考";
101
+ version: string;
102
+ sha256: string;
103
+ uri: string;
104
+ sections: {
105
+ id: string;
106
+ title: string;
107
+ }[];
108
+ content: string;
109
+ };
110
+ export declare function workspaceGuidanceTemplatePath(): string;
111
+ //# sourceMappingURL=documentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"AAIA,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBvB,CAAC;AAEX,wCAAwC;AACxC,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,UAEpD;AAID,wBAAgB,iBAAiB,WAEhC;AA4CD,wBAAgB,kBAAkB,CAAC,IAAI,SAAsB;;;;;;;;;;;;;;EAW5D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,SAAsB;;;;;;;;;;;;EAWzF;AAED,wBAAgB,6BAA6B,WAI5C"}
@@ -0,0 +1,112 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, readFileSync, realpathSync, statSync } from 'node:fs';
3
+ import { isAbsolute, relative, resolve } from 'node:path';
4
+ /** 使用指南的唯一主题目录;正文从同版本根包读取。 */
5
+ export const DOCUMENTATION_TOPICS = [
6
+ { id: 'getting-started', title: '安装与开始开发', file: 'getting-started.md' },
7
+ { id: 'product-design', title: '对话发现与详细产品设计', file: 'product-design.md' },
8
+ { id: 'interaction-patterns', title: '页面交互模式与体验评审', file: 'interaction-patterns.md' },
9
+ { id: 'development', title: '需求与开发流程', file: 'development.md' },
10
+ { id: 'application-foundation', title: '业务模型与标准 CRUD', file: 'application-foundation.md' },
11
+ { id: 'appspec', title: '需求、设计与交付记录', file: 'appspec.md' },
12
+ { id: 'concepts', title: '架构与能力所有者', file: 'concepts.md' },
13
+ { id: 'frontend', title: '页面与标准组件扩展', file: 'frontend.md' },
14
+ { id: 'field-components', title: '字段、表单与移动控件', file: 'field-components.md' },
15
+ { id: 'data-authz', title: '数据查询与权限', file: 'data-authz.md' },
16
+ { id: 'public-access', title: '无账号的匿名公开访问', file: 'public-access.md' },
17
+ { id: 'workflow-events', title: '审批、事件与通知', file: 'workflow-events.md' },
18
+ { id: 'backend', title: '按需后端与业务动作', file: 'backend.md' },
19
+ { id: 'administration', title: '应用管理与有效配置', file: 'administration.md' },
20
+ { id: 'testing', title: '检查与真实业务验收', file: 'testing.md' },
21
+ { id: 'delivery', title: '部署、生产晋级与恢复', file: 'delivery.md' },
22
+ { id: 'upgrading', title: '版本升级与资料刷新', file: 'upgrading.md' },
23
+ { id: 'cli', title: 'CLI 命令参考', file: 'reference/cli.md' },
24
+ { id: 'mcp', title: 'MCP 配置与工具参考', file: 'reference/mcp.md' },
25
+ ];
26
+ /** Skill 参考文件名直接使用主题 ID,正文由同一中文主题生成。 */
27
+ export function documentationReferenceFile(id) {
28
+ return `${id}.md`;
29
+ }
30
+ const MAX_TOPIC_BYTES = 128 * 1024;
31
+ export function documentationRoot() {
32
+ return resolve(process.env.OPENXIANGDA_DOCUMENTATION_ROOT || resolve(import.meta.dirname, '../../../docs'));
33
+ }
34
+ function topicSource(id, root) {
35
+ const topic = DOCUMENTATION_TOPICS.find(item => item.id === id);
36
+ if (!topic)
37
+ throw new Error(`DOCUMENTATION_TOPIC_NOT_FOUND: 未知主题 ${id}。CLI 运行 pnpm openxiangda docs,MCP 调用 docs_read 并省略 topic,按目录中的 id 读取正文`);
38
+ const path = resolve(root, topic.file);
39
+ if (!existsSync(path))
40
+ throw new Error(`DOCUMENTATION_NOT_INSTALLED: 当前安装缺少 ${id},请通过同版本 openxiangda 根包启动`);
41
+ const resolved = realpathSync(path);
42
+ const local = relative(realpathSync(root), resolved);
43
+ if (local.startsWith('..') || isAbsolute(local))
44
+ throw new Error('DOCUMENTATION_PATH_FORBIDDEN: 文档不能越过资料目录');
45
+ if (!statSync(resolved).isFile() || statSync(resolved).size > MAX_TOPIC_BYTES) {
46
+ throw new Error('DOCUMENTATION_SIZE_EXCEEDED: 单个主题必须是大小不超过 128 KiB 的文本文档');
47
+ }
48
+ const text = readFileSync(resolved, 'utf8');
49
+ const sha256 = createHash('sha256').update(text).digest('hex');
50
+ const manifestPath = resolve(root, 'manifest.json');
51
+ const manifest = existsSync(manifestPath)
52
+ ? JSON.parse(readFileSync(manifestPath, 'utf8'))
53
+ : undefined;
54
+ if (manifest && manifest.topics.find(item => item.id === id)?.sha256 !== sha256) {
55
+ throw new Error(`DOCUMENTATION_DIGEST_MISMATCH: ${id} 与当前根包资料摘要不一致,请重新安装该精确版本`);
56
+ }
57
+ return { ...topic, text, sha256, version: manifest?.version || 'development' };
58
+ }
59
+ function sections(text) {
60
+ const lines = text.split('\n');
61
+ const found = [];
62
+ let fenced = false;
63
+ const used = new Map();
64
+ lines.forEach((line, index) => {
65
+ if (/^\s*(```|~~~)/.test(line)) {
66
+ fenced = !fenced;
67
+ return;
68
+ }
69
+ const match = !fenced && line.match(/^##\s+(.+?)(?:\s+\{#([\w-]+)\})?\s*$/);
70
+ if (!match)
71
+ return;
72
+ const title = match[1];
73
+ const base = match[2] || title.toLowerCase().replace(/[^\p{L}\p{N}]+/gu, '-').replace(/^-|-$/g, '');
74
+ const count = used.get(base) || 0;
75
+ used.set(base, count + 1);
76
+ if (found.length)
77
+ found[found.length - 1].end = index;
78
+ found.push({ id: count ? `${base}-${count + 1}` : base, title, start: index, end: lines.length });
79
+ });
80
+ return { lines, found };
81
+ }
82
+ export function documentationIndex(root = documentationRoot()) {
83
+ const topics = DOCUMENTATION_TOPICS.map(({ id }) => {
84
+ const source = topicSource(id, root);
85
+ return {
86
+ id, title: source.title, uri: `openxiangda://docs/${id}`,
87
+ version: source.version, sha256: source.sha256,
88
+ bytes: Buffer.byteLength(source.text),
89
+ sections: sections(source.text).found.map(({ id, title }) => ({ id, title })),
90
+ };
91
+ });
92
+ return { schemaVersion: 'openxiangda.documentation/v1', topics };
93
+ }
94
+ export function readDocumentation(id, section, root = documentationRoot()) {
95
+ const source = topicSource(id, root);
96
+ const parsed = sections(source.text);
97
+ const selected = section ? parsed.found.find(item => item.id === section) : undefined;
98
+ if (section && !selected)
99
+ throw new Error(`DOCUMENTATION_SECTION_NOT_FOUND: ${id} 没有章节 ${section},先读取该主题的章节目录`);
100
+ return {
101
+ schemaVersion: 'openxiangda.documentation/v1', topic: id, title: source.title,
102
+ version: source.version, sha256: source.sha256, uri: `openxiangda://docs/${id}`,
103
+ sections: parsed.found.map(({ id, title }) => ({ id, title })),
104
+ content: selected ? parsed.lines.slice(selected.start, selected.end).join('\n') : source.text,
105
+ };
106
+ }
107
+ export function workspaceGuidanceTemplatePath() {
108
+ return process.env.OPENXIANGDA_DOCUMENTATION_ROOT
109
+ ? resolve(documentationRoot(), 'AGENTS.md')
110
+ : resolve(import.meta.dirname, '../../../templates/application/AGENTS.md');
111
+ }
112
+ //# sourceMappingURL=documentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,8BAA8B;AAC9B,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACvE,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACzE,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACrF,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC/D,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,2BAA2B,EAAE;IAC1F,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE;IAC1D,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE;IAC1D,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE;IAC3D,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC5E,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE;IAC7D,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACtE,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACxE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;IACzD,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACvE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;IACzD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE;IAC5D,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;IAC7D,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE;IAC1D,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE;CACrD,CAAC;AAEX,wCAAwC;AACxC,MAAM,UAAU,0BAA0B,CAAC,EAAU;IACnD,OAAO,GAAG,EAAE,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC;AAEnC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,WAAW,CAAC,EAAU,EAAE,IAAY;IAC3C,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,wEAAwE,CAAC,CAAC;IAC/I,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,0BAA0B,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7G,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAuE;QACtH,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,0BAA0B,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,aAAa,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAqE,EAAE,CAAC;IACnF,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,GAAG,KAAK,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAI,GAAG,iBAAiB,EAAE;IAC3D,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE;YACxD,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;YAC9C,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;SAC9E,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,aAAa,EAAE,8BAA8B,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAU,EAAE,OAAgB,EAAE,IAAI,GAAG,iBAAiB,EAAE;IACxF,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,IAAI,OAAO,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,SAAS,OAAO,cAAc,CAAC,CAAC;IAChH,OAAO;QACL,aAAa,EAAE,8BAA8B,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;QAC7E,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE;QAC/E,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;KAC9F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,8BAA8B;QAC/C,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,WAAW,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,0CAA0C,CAAC,CAAC;AAC/E,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './application-services.js';
2
2
  export * from './app-spec.js';
3
3
  export * from './connected-development.js';
4
4
  export * from './compiler/bundle.js';
5
+ export * from './compiler/permission-review.js';
5
6
  export * from './command-registry.js';
6
7
  export * from './config.js';
7
8
  export * from './control-plane-client.js';
@@ -9,9 +10,18 @@ export * from './deployment.js';
9
10
  export * from './package-compiler.js';
10
11
  export * from './compiler/ai-catalog.js';
11
12
  export * from './compiler/schema-composition.js';
13
+ export * from './compiler/application-model.js';
12
14
  export * from './workspace.js';
13
15
  export * from './workspace-loader.js';
14
16
  export * from './session.js';
15
17
  export * from './version.js';
16
18
  export * from './toolchain-capsule.js';
19
+ export * from './application-ui-contract.js';
20
+ export * from './optional-backend.js';
21
+ export * from './developer-operations.js';
22
+ export * from './operation-progress.js';
23
+ export * from './deployment-observer.js';
24
+ export * from './documentation.js';
25
+ export { developerError } from './developer-errors.js';
26
+ export { withWorkspaceOperation } from './workspace-operation.js';
17
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AAEvC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ export * from './application-services.js';
2
2
  export * from './app-spec.js';
3
3
  export * from './connected-development.js';
4
4
  export * from './compiler/bundle.js';
5
+ export * from './compiler/permission-review.js';
5
6
  export * from './command-registry.js';
6
7
  export * from './config.js';
7
8
  export * from './control-plane-client.js';
@@ -9,9 +10,18 @@ export * from './deployment.js';
9
10
  export * from './package-compiler.js';
10
11
  export * from './compiler/ai-catalog.js';
11
12
  export * from './compiler/schema-composition.js';
13
+ export * from './compiler/application-model.js';
12
14
  export * from './workspace.js';
13
15
  export * from './workspace-loader.js';
14
16
  export * from './session.js';
15
17
  export * from './version.js';
16
18
  export * from './toolchain-capsule.js';
19
+ export * from './application-ui-contract.js';
20
+ export * from './optional-backend.js';
21
+ export * from './developer-operations.js';
22
+ export * from './operation-progress.js';
23
+ export * from './deployment-observer.js';
24
+ export * from './documentation.js';
25
+ export { developerError } from './developer-errors.js';
26
+ export { withWorkspaceOperation } from './workspace-operation.js';
17
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AAEvC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface OperationStage {
2
+ stage: string;
3
+ label: string;
4
+ state: 'running' | 'passed' | 'failed' | 'skipped';
5
+ startedAt: string;
6
+ durationMs: number;
7
+ details?: Record<string, unknown>;
8
+ }
9
+ export interface OperationProgress extends OperationStage {
10
+ schemaVersion: 'openxiangda.operation-progress/v1';
11
+ operationId: string;
12
+ operation: string;
13
+ sequence: number;
14
+ elapsedMs: number;
15
+ heartbeat: boolean;
16
+ }
17
+ export type OperationProgressListener = (event: OperationProgress) => void | Promise<void>;
18
+ /** 每次调用独立;并发 MCP 请求不会共享当前阶段或监听器。 */
19
+ export declare function withOperationProgress<T extends {
20
+ data?: unknown;
21
+ }>(operation: string, listener: OperationProgressListener | undefined, execute: () => Promise<T>, heartbeatMs?: number): Promise<T>;
22
+ export declare function operationStage<T>(stage: string, label: string, execute: () => Promise<T>): Promise<T>;
23
+ export declare function skippedOperationStage(stage: string, label: string): void;
24
+ /** 平台仍是运行状态权威;此处只刷新本次观察的标题和运行指针。 */
25
+ export declare function updateOperationStage(stage: string, label: string, details: Record<string, unknown>): void;
26
+ //# sourceMappingURL=operation-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-progress.d.ts","sourceRoot":"","sources":["../src/operation-progress.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AACD,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,aAAa,EAAE,mCAAmC,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAY3F,oCAAoC;AACpC,wBAAsB,qBAAqB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACtE,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,WAAW,SAAS,GACnB,OAAO,CAAC,CAAC,CAAC,CAuBZ;AAYD,wBAAsB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAwB3G;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAKjE;AAED,oCAAoC;AACpC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAQlG"}