@playcraft/common 0.0.27 → 0.0.29

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 (29) hide show
  1. package/dist/recommend/atom-graph/basic-atom-graph.d.ts +3 -0
  2. package/dist/recommend/atom-graph/basic-atom-graph.d.ts.map +1 -0
  3. package/dist/recommend/atom-graph/basic-atom-graph.js +291 -0
  4. package/dist/recommend/atom-graph/basic-atom-graph.js.map +1 -0
  5. package/dist/recommend/atom-graph/basic-atom-skill-graph.d.ts +3 -0
  6. package/dist/recommend/atom-graph/basic-atom-skill-graph.d.ts.map +1 -0
  7. package/dist/recommend/atom-graph/basic-atom-skill-graph.js +130 -0
  8. package/dist/recommend/atom-graph/basic-atom-skill-graph.js.map +1 -0
  9. package/dist/recommend/atom-graph/index.d.ts +6 -0
  10. package/dist/recommend/atom-graph/index.d.ts.map +1 -0
  11. package/dist/recommend/atom-graph/index.js +6 -0
  12. package/dist/recommend/atom-graph/index.js.map +1 -0
  13. package/dist/recommend/atom-graph/remix-examples.d.ts +6 -0
  14. package/dist/recommend/atom-graph/remix-examples.d.ts.map +1 -0
  15. package/dist/recommend/atom-graph/remix-examples.js +192 -0
  16. package/dist/recommend/atom-graph/remix-examples.js.map +1 -0
  17. package/dist/recommend/atom-graph/types.d.ts +323 -0
  18. package/dist/recommend/atom-graph/types.d.ts.map +1 -0
  19. package/dist/recommend/atom-graph/types.js +2 -0
  20. package/dist/recommend/atom-graph/types.js.map +1 -0
  21. package/dist/recommend/atom-graph/validate.d.ts +7 -0
  22. package/dist/recommend/atom-graph/validate.d.ts.map +1 -0
  23. package/dist/recommend/atom-graph/validate.js +140 -0
  24. package/dist/recommend/atom-graph/validate.js.map +1 -0
  25. package/dist/recommend/index.d.ts +1 -0
  26. package/dist/recommend/index.d.ts.map +1 -1
  27. package/dist/recommend/index.js +1 -0
  28. package/dist/recommend/index.js.map +1 -1
  29. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ /** 与 `basicAtomGraph` 对齐的示意 Remix:每条为一条 plausible 生产闭包(引擎→玩法→素材/音频/配置→包装→校验)。 */
2
+ export const basicAtomRemixExamples = [
3
+ {
4
+ id: 'remix_fake_game_match3',
5
+ label: { zh: 'FakeGame 三消稿', en: 'FakeGame match-3 creative' },
6
+ primaryGameplayId: 'match3',
7
+ atomIds: [
8
+ 'phaser',
9
+ 'grid_puzzle_framework',
10
+ 'match3',
11
+ 'jewel_tile_set',
12
+ 'background_image',
13
+ 'ui_button_set',
14
+ 'win_lose_panel',
15
+ 'casual_bgm',
16
+ 'match_sfx',
17
+ 'win_sfx',
18
+ 'board_size',
19
+ 'move_limit',
20
+ 'scoring_rule',
21
+ 'camera_preset',
22
+ 'fake_game_packaging',
23
+ 'asset_reference_check',
24
+ 'creative_size_check',
25
+ 'semantic_consistency_check',
26
+ 'build_smoke_test',
27
+ 'playable_runtime_check',
28
+ ],
29
+ },
30
+ {
31
+ id: 'remix_runner_collect_fake',
32
+ label: { zh: '跑酷收集 FakeGame', en: 'Runner collect FakeGame' },
33
+ primaryGameplayId: 'runner_collect',
34
+ atomIds: [
35
+ 'phaser',
36
+ 'casual_2d_framework',
37
+ 'runner_collect',
38
+ 'character_sprite',
39
+ 'background_image',
40
+ 'ui_button_set',
41
+ 'win_lose_panel',
42
+ 'casual_bgm',
43
+ 'collision_sfx',
44
+ 'win_sfx',
45
+ 'level_timer',
46
+ 'scoring_rule',
47
+ 'camera_preset',
48
+ 'fake_game_packaging',
49
+ 'asset_reference_check',
50
+ 'creative_size_check',
51
+ 'semantic_consistency_check',
52
+ 'build_smoke_test',
53
+ 'playable_runtime_check',
54
+ ],
55
+ },
56
+ {
57
+ id: 'remix_iq_sort_puzzle',
58
+ label: { zh: 'IQ 分类排序稿', en: 'IQ sort puzzle' },
59
+ primaryGameplayId: 'sort_puzzle',
60
+ atomIds: [
61
+ 'phaser',
62
+ 'grid_puzzle_framework',
63
+ 'sort_puzzle',
64
+ 'fruit_tile_set',
65
+ 'background_image',
66
+ 'ui_button_set',
67
+ 'win_lose_panel',
68
+ 'casual_bgm',
69
+ 'match_sfx',
70
+ 'win_sfx',
71
+ 'board_size',
72
+ 'move_limit',
73
+ 'difficulty_curve',
74
+ 'camera_preset',
75
+ 'iq_test_packaging',
76
+ 'asset_reference_check',
77
+ 'creative_size_check',
78
+ 'semantic_consistency_check',
79
+ 'build_smoke_test',
80
+ 'playable_runtime_check',
81
+ ],
82
+ },
83
+ {
84
+ id: 'remix_iq_pin_puzzle',
85
+ label: { zh: 'IQ 拉针稿', en: 'IQ pin puzzle' },
86
+ primaryGameplayId: 'pin_puzzle',
87
+ atomIds: [
88
+ 'phaser',
89
+ 'casual_2d_framework',
90
+ 'pin_puzzle',
91
+ 'direction_arrow_sprite',
92
+ 'background_image',
93
+ 'ui_button_set',
94
+ 'win_lose_panel',
95
+ 'tension_bgm',
96
+ 'collision_sfx',
97
+ 'win_sfx',
98
+ 'difficulty_curve',
99
+ 'level_timer',
100
+ 'camera_preset',
101
+ 'iq_test_packaging',
102
+ 'asset_reference_check',
103
+ 'creative_size_check',
104
+ 'semantic_consistency_check',
105
+ 'build_smoke_test',
106
+ 'playable_runtime_check',
107
+ ],
108
+ },
109
+ {
110
+ id: 'remix_doctor_word_puzzle',
111
+ label: { zh: '医生建议 文字解谜', en: 'Doctor advice word puzzle' },
112
+ primaryGameplayId: 'word_puzzle',
113
+ atomIds: [
114
+ 'phaser',
115
+ 'grid_puzzle_framework',
116
+ 'word_puzzle',
117
+ 'ui_button_set',
118
+ 'background_image',
119
+ 'win_lose_panel',
120
+ 'casual_bgm',
121
+ 'win_sfx',
122
+ 'move_limit',
123
+ 'board_size',
124
+ 'scoring_rule',
125
+ 'camera_preset',
126
+ 'doctor_advice_packaging',
127
+ 'asset_reference_check',
128
+ 'creative_size_check',
129
+ 'semantic_consistency_check',
130
+ 'build_smoke_test',
131
+ 'playable_runtime_check',
132
+ ],
133
+ },
134
+ {
135
+ id: 'remix_showcase_eight_ball',
136
+ label: { zh: '玩法展示 台球', en: 'Gameplay showcase 8-ball' },
137
+ primaryGameplayId: 'eight_ball',
138
+ atomIds: [
139
+ 'phaser',
140
+ 'physics_ball_framework',
141
+ 'eight_ball',
142
+ 'billiard_ball_set',
143
+ 'pool_table_skin',
144
+ 'background_image',
145
+ 'ui_button_set',
146
+ 'win_lose_panel',
147
+ 'casual_bgm',
148
+ 'collision_sfx',
149
+ 'win_sfx',
150
+ 'scoring_rule',
151
+ 'camera_preset',
152
+ 'gameplay_showcase_packaging',
153
+ 'asset_reference_check',
154
+ 'creative_size_check',
155
+ 'semantic_consistency_check',
156
+ 'build_smoke_test',
157
+ 'playable_runtime_check',
158
+ ],
159
+ },
160
+ {
161
+ id: 'remix_showcase_tetris',
162
+ label: { zh: '玩法展示 方块', en: 'Gameplay showcase Tetris-like' },
163
+ primaryGameplayId: 'tetris',
164
+ atomIds: [
165
+ 'phaser',
166
+ 'grid_puzzle_framework',
167
+ 'tetris',
168
+ 'block_skin_set',
169
+ 'background_image',
170
+ 'ui_button_set',
171
+ 'win_lose_panel',
172
+ 'tension_bgm',
173
+ 'collision_sfx',
174
+ 'win_sfx',
175
+ 'gravity_mode',
176
+ 'difficulty_curve',
177
+ 'camera_preset',
178
+ 'gameplay_showcase_packaging',
179
+ 'asset_reference_check',
180
+ 'creative_size_check',
181
+ 'semantic_consistency_check',
182
+ 'build_smoke_test',
183
+ 'playable_runtime_check',
184
+ ],
185
+ },
186
+ ];
187
+ /** 返回 `atomIds` 中在图中不存在的 id(用于测试或导入校验)。 */
188
+ export function collectUnknownRemixAtomIds(graph, example) {
189
+ const ids = new Set(graph.nodes.map((n) => n.id));
190
+ return example.atomIds.filter((id) => !ids.has(id));
191
+ }
192
+ //# sourceMappingURL=remix-examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remix-examples.js","sourceRoot":"","sources":["../../../src/recommend/atom-graph/remix-examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,323 @@
1
+ export type AtomCategory = 'engine' | 'gameplay' | 'visual' | 'audio' | 'config' | 'packaging' | 'validator' | 'layout' | 'scene' | 'state' | 'component' | 'build' | 'util';
2
+ export type AtomMode = 'fixed' | 'parametric' | 'generative';
3
+ export type AtomEdgeKind = 'requires' | 'compatibleWith' | 'semanticallyRelatedTo' | 'alternativeTo';
4
+ export type AtomBindingRole = 'gameEngine' | 'playableSdk' | 'buildPipeline' | 'responsiveLayout' | 'gridBoardLayout' | 'sceneLifecycle' | 'preloaderScene' | 'gameMainScene' | 'userSettings' | 'themeManager' | 'levelProgress' | 'runContext' | 'gameplayRule' | 'levelDataFormat' | 'pathBatchRenderer' | 'pathAnimationDirector' | 'boardInputHandler' | 'levelLifecycleController' | 'directionalIndicator' | 'boardBackgroundTexture' | 'successFeedbackPanel' | 'failFeedbackPanel' | 'dangerFlashOverlay' | 'appLogo' | 'tutorialPointer' | 'clockIcon' | 'winParticleAsset' | 'normalParticleAsset' | 'bgMusic' | 'sfxClick' | 'sfxAppear' | 'sfxSuccess' | 'sfxFail' | 'sfxLose' | 'sfxMistake' | 'sfxWinAnim' | 'sfxArrowMoveError' | 'sfxButtonClick' | 'loadingScreen' | 'topUiBar' | 'countdownTimer' | 'livesIndicator' | 'comboDisplay' | 'comboPraiseText' | 'progressBar' | 'downloadCta' | 'gameOverDialog' | 'tutorialOverlay' | 'digitGlyphRenderer' | 'audioPlayHelper' | 'levelDataPack' | 'themeVariantConfig' | 'appMetadata' | 'engineRuntime' | 'frameworkRuntime' | 'backgroundTexture' | 'tileTextureSet' | 'vehicleSpriteSet' | 'billiardBallSet' | 'poolTableSkin' | 'blockSkinSet' | 'bubbleSkinSet' | 'characterSprite' | 'uiButtonSet' | 'resultPanel' | 'backgroundMusic' | 'soundEffect' | 'gameConfig' | 'packagingPattern' | 'validationGate';
5
+ export type AtomNode = {
6
+ id: string;
7
+ category: AtomCategory;
8
+ mode: AtomMode;
9
+ label: {
10
+ zh: string;
11
+ en: string;
12
+ };
13
+ description?: string;
14
+ bindingRoles?: AtomBindingRole[];
15
+ tags?: string[];
16
+ skillRefs?: string[];
17
+ };
18
+ export type AtomEdge = {
19
+ from: string;
20
+ to: string;
21
+ kind: AtomEdgeKind;
22
+ label?: string;
23
+ weight?: number;
24
+ };
25
+ export type AtomGraph = {
26
+ id: string;
27
+ version: number;
28
+ status: 'prototype' | 'active' | 'deprecated';
29
+ description: string;
30
+ nodes: AtomNode[];
31
+ edges: AtomEdge[];
32
+ };
33
+ /** 示意性 Remix(试玩实例)原子闭包:用于可视化高亮或交付清单,非线上投放事实源。 */
34
+ export type AtomRemixExample = {
35
+ id: string;
36
+ label: {
37
+ zh: string;
38
+ en: string;
39
+ };
40
+ /** 该实例主玩法 atom id(便于说明与排序) */
41
+ primaryGameplayId: string;
42
+ /** 属于该 Remix 的全部 Atom id */
43
+ atomIds: readonly string[];
44
+ };
45
+ export type AtomGraphValidationErrorCode = 'duplicate_node_id' | 'edge_missing_source' | 'edge_missing_target' | 'cycle_detected';
46
+ export type AtomGraphValidationError = {
47
+ code: AtomGraphValidationErrorCode;
48
+ message: string;
49
+ nodeId?: string;
50
+ edge?: AtomEdge;
51
+ };
52
+ export type AtomGraphValidationWarningCode = 'gameplay_without_engine_path' | 'isolated_node' | 'invalid_edge_weight';
53
+ export type AtomGraphValidationWarning = {
54
+ code: AtomGraphValidationWarningCode;
55
+ message: string;
56
+ nodeId?: string;
57
+ edge?: AtomEdge;
58
+ };
59
+ export type AtomGraphValidationResult = {
60
+ valid: boolean;
61
+ errors: AtomGraphValidationError[];
62
+ warnings: AtomGraphValidationWarning[];
63
+ topologicalOrder: string[];
64
+ };
65
+ /**
66
+ * 封包后缀类型,对应 asset-library 的 BUNDLE_SUFFIXES
67
+ *
68
+ * - aiimage / aiaudio / aiconfig / aigameplay:资源/配置/玩法,同原有用法
69
+ * - aicomponent:通用代码 skill(引擎/布局/场景/UI/状态/构建/工具等)
70
+ * - prefab:已废除,不要再使用,现有 prefab skill 已拆解为多个具体 skill
71
+ */
72
+ export type AtomBundleType = 'aiimage' | 'aiaudio' | 'aiconfig' | 'aigameplay' | 'aicomponent';
73
+ /**
74
+ * Recipe:怎么来的——生成过程的完整记录,支持复用和 fork。
75
+ * Agent 读取历史决策,修改后重新生成时写回。
76
+ */
77
+ export type AtomRecipe = {
78
+ /** 生成类型(image / sfx / bgm / sprite-sheet / config-patch / level-data / theme-config / scaffold / pgs / ...) */
79
+ kind: string;
80
+ /**
81
+ * 关联的 Platform Skill 名称(在 packages/skills/platform-skills/ 下)。
82
+ * Agent 应读取该 skill 了解 CLI 用法,再结合本 manifest 的其他字段生成内容。
83
+ * - aiimage: "playcraft-image-generation"
84
+ * - aiaudio (bgm): "playcraft-audio-generation"
85
+ * - aiaudio (sfx): "playcraft-audio-generation"(同一 skill,命令不同)
86
+ */
87
+ platformSkill?: string;
88
+ /** 生成 prompt(generative 模式必填) */
89
+ prompt?: string;
90
+ /**
91
+ * AI 模型标识(使用 Platform Skill 中的 modelRef 格式,如 google/imagen-3.0-generate-002)
92
+ * 留空则使用平台默认配置
93
+ */
94
+ model?: string;
95
+ /** 参考图片路径(相对于 skill 目录,用于图生图) */
96
+ referenceImage?: string;
97
+ /** 参考音频路径(相对于 skill 目录,用于音频生成参考) */
98
+ referenceAudio?: string;
99
+ /** 随机种子,用于可复现生成 */
100
+ seed?: number;
101
+ /** 宽高比(图像封包),如 "1:1" | "9:16" | "16:9" */
102
+ aspectRatio?: string;
103
+ /** 风格约束(图像封包) */
104
+ style?: string;
105
+ /** 时长秒数(音频封包) */
106
+ duration?: number;
107
+ /** 是否循环(音频封包) */
108
+ loop?: boolean;
109
+ /** BGM 风格(bgm 类型) */
110
+ bgmStyle?: string;
111
+ /** BGM 节奏(bpm) */
112
+ bpm?: number;
113
+ /** parametric/fixed 模式的参数键值对 */
114
+ params?: Record<string, string | number | boolean>;
115
+ /** 其他扩展字段 */
116
+ [key: string]: unknown;
117
+ };
118
+ /**
119
+ * Result:是什么——生成产物的规格与引用。
120
+ * Agent 可直接引用,不必重新生成。
121
+ */
122
+ export type AtomResult = {
123
+ /** 产物主文件名(相对于封包目录) */
124
+ outputFile?: string;
125
+ /** 文件格式 */
126
+ format?: string;
127
+ /** 尺寸与格式约束 */
128
+ constraints?: Record<string, number | string>;
129
+ /** 参数化配置的键路径(config 封包) */
130
+ configKey?: string;
131
+ /** 参数化配置的值 */
132
+ configValue?: string | number | boolean;
133
+ /** 其他扩展字段 */
134
+ [key: string]: unknown;
135
+ };
136
+ /**
137
+ * Binding:怎么用——接入 Prefab/DAG 的契约。
138
+ * Binding 由容器(Prefab)定义,不由 Atom 自身定义。
139
+ * Recipe + Result 可跨容器复用,Binding 需在新容器下重新生成。
140
+ */
141
+ export type AtomBinding = {
142
+ /** binding role,对应 AtomBindingRole */
143
+ role: AtomBindingRole;
144
+ /** 目标挂载路径(scene:// URI 或文件路径) */
145
+ target: string;
146
+ /** 引用类型 */
147
+ type: string;
148
+ /** 约束条件(格式、尺寸等) */
149
+ constraints?: Record<string, number | string>;
150
+ /** 其他扩展字段 */
151
+ [key: string]: unknown;
152
+ };
153
+ /** Atom 实例在生产流水线中的状态 */
154
+ export type AtomInstanceStatus = 'planned' | 'generating' | 'generated' | 'bound' | 'validated' | 'failed';
155
+ /**
156
+ * AtomInstance:某次 Remix 生产中的具体 Atom。
157
+ * 对应一个已实例化(或待实例化)的封包。
158
+ */
159
+ export type AtomInstance = {
160
+ /** 实例唯一 id */
161
+ instanceId: string;
162
+ /** 对应图节点 id(= skill 名称,例如 forest.aiimage) */
163
+ atomId: string;
164
+ /** 所属 Remix id */
165
+ remixId?: string;
166
+ /** 三要素:生成方式 */
167
+ recipe?: AtomRecipe;
168
+ /** 三要素:产物规格 */
169
+ result?: AtomResult;
170
+ /** 三要素:接入契约 */
171
+ binding?: AtomBinding;
172
+ /** 实例状态 */
173
+ status: AtomInstanceStatus;
174
+ };
175
+ /**
176
+ * Scaffold 文件贡献:描述一个 skill 向 Remix 项目贡献的某个文件的来源与合并策略。
177
+ * 文件路径 key 为相对 Remix 项目根目录的目标路径。
178
+ */
179
+ export type ScaffoldContribution = {
180
+ /** scaffold 来源:Atom ref/ 目录内的相对路径,例如 "ref/PathRenderer.ts" */
181
+ source: string;
182
+ /**
183
+ * 贡献权重:组装时同一目标文件有多个贡献者时,按权重降序,最高者胜出。
184
+ * 默认 0。
185
+ */
186
+ weight?: number;
187
+ /**
188
+ * 贡献模式(默认 "full"):
189
+ * - full:完整提供该文件
190
+ * - merge-json:JSON 文件按 deep-merge 合并(package.json / tsconfig.json 等)
191
+ * - anchor-insert:在已有文件的指定 anchor 注入代码片段
192
+ * - patch:提供 unified diff,应用到上一版本
193
+ */
194
+ mode?: 'full' | 'merge-json' | 'anchor-insert' | 'patch';
195
+ /** anchor-insert 模式时使用,如 "// @atom-insert: imports" */
196
+ anchor?: string;
197
+ };
198
+ /**
199
+ * Import 声明:此 skill 需要什么。
200
+ *
201
+ * 双形态:
202
+ * - 硬依赖(pinAtomId):目标 skill 已知,无候选,组装时直接引入
203
+ * - 软槽位(matchBindingRoles + constraints):目标从图谱候选实例中按权重选出
204
+ *
205
+ * 注意:具体如何根据声明选实例是图谱组装机制的职责(后续讨论)。
206
+ * manifest 中只需写清楚"要什么"即可。
207
+ */
208
+ export type ImportDeclaration = {
209
+ /** 槽位名,在本 skill manifest 中唯一标识此 import */
210
+ slot: string;
211
+ /** 自然语言描述(给 LLM 和人理解用) */
212
+ description?: string;
213
+ /** scaffold 中引用此槽位选中实例的占位符标识 */
214
+ bindAs: string;
215
+ /** 是否必需,默认 true */
216
+ required?: boolean;
217
+ /** 边类型(默认:硬依赖用 requires,软槽位用 compatibleWith) */
218
+ edgeKind?: AtomEdgeKind;
219
+ /** 锁定具体 atomId(已知唯一目标)。与软槽位字段互斥。 */
220
+ pinAtomId?: string;
221
+ /** 候选筛选:实例必须有这些 bindingRoles 之一 */
222
+ matchBindingRoles?: AtomBindingRole[];
223
+ /** 候选筛选:实例的 category 限定 */
224
+ allowedCategories?: AtomCategory[];
225
+ /** 候选筛选:实例的 bundleType 限定 */
226
+ allowedBundleTypes?: AtomBundleType[];
227
+ /** 规格约束:用于过滤不合规候选 + LLM 验证(如 { directions: 4, minSize: {...} }) */
228
+ constraints?: Record<string, unknown>;
229
+ /** 选几个候选(默认 1) */
230
+ cardinality?: number | 'many';
231
+ };
232
+ /**
233
+ * AtomSkillManifest:packages/skills/skills/<atomId>/manifest.json 的 TypeScript 映射。
234
+ * 每个 Skill 目录下的 manifest 必须满足此类型。
235
+ *
236
+ * 字段分两类:
237
+ * - 身份信息(必填):schemaVersion / atomId / bundleType / category / mode / label / tags / files
238
+ * - 内容描述(按 bundleType 选填):
239
+ * - aiimage / aiaudio / aiconfig / aigameplay 用 generation + result + binding(旧三要素)
240
+ * - aicomponent 用 scaffold + imports + exports(新机制)
241
+ * - 任意类型均可附 neutralDescriptor + usageHints + bindingRoles
242
+ */
243
+ export type AtomSkillManifest = {
244
+ schemaVersion: 1;
245
+ /** 等于目录名,等于图节点 id,例如 forest.aiimage */
246
+ atomId: string;
247
+ /** 封包后缀类型 */
248
+ bundleType: AtomBundleType;
249
+ /** Atom 分类 */
250
+ category: AtomCategory;
251
+ /** 操作模式 */
252
+ mode: AtomMode;
253
+ /** 双语标签 */
254
+ label: {
255
+ zh: string;
256
+ en: string;
257
+ };
258
+ /** 索引和过滤标签(至少 1 个) */
259
+ tags: string[];
260
+ /** 语义角色标签:标识该 skill 是哪一类节点,用于候选召回和同类替代簇识别 */
261
+ bindingRoles?: AtomBindingRole[];
262
+ /** Recipe(生成方式模板)——aiimage / aiaudio / aiconfig / aigameplay 使用 */
263
+ generation?: AtomRecipe;
264
+ /** Result(产物规格模板)——aiimage / aiaudio / aiconfig / aigameplay 使用 */
265
+ result?: AtomResult;
266
+ /** Binding(接入契约模板)——aiimage / aiaudio / aiconfig / aigameplay 使用 */
267
+ binding?: AtomBinding;
268
+ /**
269
+ * Scaffold:该 skill 向 Remix 项目贡献的文件骨架。
270
+ * key 为相对 Remix 项目根目录的目标路径,value 为贡献描述。
271
+ */
272
+ scaffold?: {
273
+ files: Record<string, ScaffoldContribution>;
274
+ /** 合并到 package.json 的依赖与脚本 */
275
+ packageJson?: {
276
+ dependencies?: Record<string, {
277
+ version: string;
278
+ weight?: number;
279
+ }>;
280
+ devDependencies?: Record<string, {
281
+ version: string;
282
+ weight?: number;
283
+ }>;
284
+ scripts?: Record<string, {
285
+ command: string;
286
+ weight?: number;
287
+ }>;
288
+ };
289
+ };
290
+ /**
291
+ * Imports:声明该 skill 需要什么(双形态)。
292
+ * 具体候选实例如何选取由图谱组装机制决定(后续落地)。
293
+ */
294
+ imports?: ImportDeclaration[];
295
+ /** Exports:暴露给其他 skill 使用的符号 */
296
+ exports?: Array<{
297
+ /** 导出标识(其他 skill 通过 imports.bindAs 引用) */
298
+ name: string;
299
+ /** 符号类型:class / function / asset-key / route / scene-name 等 */
300
+ kind: string;
301
+ /** 在 scaffold 中的位置(用于编译期解析) */
302
+ location: string;
303
+ }>;
304
+ /**
305
+ * 中性描述:避免情境名词锁死 LLM 关联范围,提供纯几何/功能性描述。
306
+ * 见 agent-decision-mechanism.md §3。
307
+ */
308
+ neutralDescriptor?: {
309
+ geometry?: string;
310
+ layers?: string[];
311
+ replaceable?: string[];
312
+ material?: string;
313
+ [key: string]: unknown;
314
+ };
315
+ /** 使用提示(给人看,不进入 LLM 提示词) */
316
+ usageHints?: string[];
317
+ /** 关联文件 */
318
+ files: {
319
+ skill: 'SKILL.md';
320
+ [key: string]: string;
321
+ };
322
+ };
323
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/recommend/atom-graph/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/recommend/atom-graph/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { AtomEdge, AtomEdgeKind, AtomGraph, AtomGraphValidationResult, AtomNode } from './types.js';
2
+ export declare function getAtomNode(graph: AtomGraph, nodeId: string): AtomNode | undefined;
3
+ export declare function getAtomEdges(graph: AtomGraph, edgeKinds?: AtomEdgeKind[]): AtomEdge[];
4
+ export declare function findAtomAncestors(graph: AtomGraph, nodeId: string, edgeKinds?: AtomEdgeKind[]): string[];
5
+ export declare function topologicalSortAtomGraph(graph: AtomGraph, edgeKinds?: AtomEdgeKind[]): string[];
6
+ export declare function validateAtomGraph(graph: AtomGraph): AtomGraphValidationResult;
7
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/recommend/atom-graph/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EAET,yBAAyB,EAEzB,QAAQ,EACT,MAAM,YAAY,CAAC;AAIpB,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAElF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,CAIrF;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,YAAY,EAAgC,GACtD,MAAM,EAAE,CAoBV;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,YAAY,EAAgC,GACtD,MAAM,EAAE,CAoCV;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,yBAAyB,CA4F7E"}