Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
161d7cb
Add pipe routing, unified plan-drag movement, and zh-CN i18n.
cofly-io May 23, 2026
ca7e9ef
perf: reduce editor runtime overhead
cofly-io May 25, 2026
5cb8400
Make generated primitives usable inside the editor
cofly-io May 28, 2026
96a4935
Keep primitive tools source parseable
cofly-io May 28, 2026
e23b742
Remove redundant model self-check pass
cofly-io May 28, 2026
4ba52cb
Improve generated geometry fidelity and canvas dragging
cofly-io May 28, 2026
abfa6e0
Enable AI geometry generation workflow
cofly-io Jun 1, 2026
491ee3b
Refine generated geometry composition
cofly-io Jun 1, 2026
2b501b0
Add DeepSeek-planned text-to-CAD generation mode
cofly-io Jun 2, 2026
4515542
Constrain factory standards to closed-form recipes
cofly-io Jun 10, 2026
da201a6
Preserve current editor workspace backup
cofly-io Jun 16, 2026
ad10c12
Stabilize AI geometry generation workspace
cofly-io Jun 18, 2026
0d96d75
Preserve AI factory generation workspace
cofly-io Jun 20, 2026
4ab720e
Honor explicit factory process intent
cofly-io Jun 20, 2026
29346ff
Enforce factory-capable profile pack contracts
cofly-io Jun 20, 2026
4d798fd
Enable reliable factory packs and primitive contracts
cofly-io Jun 21, 2026
b10e285
完成阶段一内容:AI工厂生成和设备生成
cofly-io Jun 23, 2026
ba95b1a
Preserve current editor work before dynamic data runtime
cofly-io Jun 24, 2026
6d64cce
Preserve local editor data and dynamic widget work
cofly-io Jun 27, 2026
fffc562
Preserve local factory editor progress
cofly-io Jul 1, 2026
ec9d696
Clarify app integration boundaries
cofly-io Jul 3, 2026
d862f23
Keep core free of viewer runtime types
cofly-io Jul 3, 2026
0e3af10
Describe scene selection through registry metadata
cofly-io Jul 3, 2026
ba14f5b
Route node integrations through focused APIs
cofly-io Jul 3, 2026
96c1f70
Add thermal power profile-pack support
cofly-io Jul 3, 2026
e5e19f9
Tighten lint-driven hook cleanup
cofly-io Jul 3, 2026
1c0d8df
Preserve generated geometry fidelity
cofly-io Jul 3, 2026
4fcff3e
Move editor action branches onto node definitions
cofly-io Jul 3, 2026
52c14b0
feat(plugins): plugin contract + first-party Nature pack (trees/flowe…
wass08 Jul 2, 2026
c6e2b58
Keep plugin migration aligned with local package surfaces
cofly-io Jul 3, 2026
d228808
Establish equipment plugin contracts before factory-node migration
cofly-io Jul 3, 2026
1c2a429
Make factory equipment a first-party plugin capability
cofly-io Jul 3, 2026
5be2cb9
Define industry pack v2 as equipment bindings
cofly-io Jul 3, 2026
06d36d8
Move editor affordances behind registry contracts
cofly-io Jul 3, 2026
8cfaa19
Compile equipment requests through bound factory nodes
cofly-io Jul 3, 2026
5138800
Route process lines through factory equipment nodes
cofly-io Jul 3, 2026
b035cb9
Route single equipment prompts through factory nodes
cofly-io Jul 3, 2026
389e4d9
Keep editor tests quiet in storage-limited runtimes
cofly-io Jul 3, 2026
c6aac00
Move industry pack authoring to v2 equipment bindings
cofly-io Jul 3, 2026
b4ade4d
Preserve the 3D factory 1.0 architecture baseline
cofly-io Jul 4, 2026
d006719
Document the next 3D factory product workflow
cofly-io Jul 4, 2026
03e36ed
Plan the first 3D factory v2 workflow phase
cofly-io Jul 4, 2026
77b5fa5
Route v2 AI requests through explicit intent contracts
cofly-io Jul 4, 2026
9a4d6bd
Gate AI runs with intent previews
cofly-io Jul 4, 2026
106ea79
Show intent previews before factory generation
cofly-io Jul 4, 2026
793b03e
Stabilize confirmed industry factory generation
cofly-io Jul 4, 2026
1d912db
Ground intelligent edits in object capabilities
cofly-io Jul 4, 2026
e1f260e
Let factory scenes speak in multiple structures
cofly-io Jul 4, 2026
33bc79a
Make Scene Structure the site panel's primary view
cofly-io Jul 4, 2026
29a291a
Ground AI edits in shared object capabilities
cofly-io Jul 4, 2026
3da1225
Make Scene Structure phase deliverable
cofly-io Jul 4, 2026
4b04a89
Start Canvas Lens as a non-destructive view mode
cofly-io Jul 4, 2026
5fd3806
Show process stations in Process Lens
cofly-io Jul 4, 2026
a34383c
Draw process routes in Process Lens
cofly-io Jul 4, 2026
c048901
Show semantic equipment in Equipment Lens
cofly-io Jul 4, 2026
4c28658
Show live data readiness in Data Lens
cofly-io Jul 4, 2026
72694fd
Close Canvas Lens MVP foundation
cofly-io Jul 4, 2026
3863ad1
Expose semantic object contracts in Inspector
cofly-io Jul 4, 2026
5a086ad
Unify semantic equipment edits in Inspector
cofly-io Jul 4, 2026
bee17ee
Show semantic port connections in Inspector
cofly-io Jul 4, 2026
fd34c75
Expose semantic part material controls
cofly-io Jul 4, 2026
7f9f191
Close Semantic Inspector phase
cofly-io Jul 4, 2026
3aecab0
Seed fixed live data as phase five baseline
cofly-io Jul 4, 2026
8b3a6e3
Bind semantic equipment to fixed live data
cofly-io Jul 4, 2026
a2f4343
Let AI bind selected equipment to live data
cofly-io Jul 4, 2026
52dc0b8
Complete semantic alarm data binding workflow
cofly-io Jul 4, 2026
939a855
Verify AI live data binding in browser workflows
cofly-io Jul 4, 2026
d7bc416
Close phase five data binding validation
cofly-io Jul 4, 2026
ef60eea
Enable fixed live data drag binding
cofly-io Jul 4, 2026
02aecf0
Expose AI run workflow graphs
cofly-io Jul 4, 2026
e19d4f3
Add run history workflow inspector
cofly-io Jul 4, 2026
b3a4eff
Enable station workflow reruns
cofly-io Jul 4, 2026
e65977c
Apply station reruns as replacements
cofly-io Jul 4, 2026
3925fd0
Ensure station reruns reach the canvas
cofly-io Jul 4, 2026
e7ec6ae
Unify generated asset source identity
cofly-io Jul 4, 2026
feb8239
Expose Articraft joint controls in Inspector
cofly-io Jul 5, 2026
52277ef
Preserve generated asset source during revisions
cofly-io Jul 5, 2026
6bf8aae
Add semantic contracts for recognizable generated models
cofly-io Jul 5, 2026
4560aba
Make factory run results explainable
cofly-io Jul 5, 2026
11dcbf7
Preview factory run canvas changes
cofly-io Jul 5, 2026
bfa0876
Group factory run canvas application into one undo step
cofly-io Jul 5, 2026
d383908
Sanitize live data snapshots before rendering
cofly-io Jul 5, 2026
81d3a91
Keep installed industry pack runs on template path
cofly-io Jul 5, 2026
381fa12
Add a release gate for factory pack readiness
cofly-io Jul 5, 2026
c50c39e
Write release readiness artifacts for factory v2
cofly-io Jul 5, 2026
9740883
Sequence factory v2 release-candidate QA
cofly-io Jul 5, 2026
ea5d87d
Document the Factory V2 release experience
cofly-io Jul 5, 2026
7ccbe96
Keep factory visual QA independent of remote icon services
cofly-io Jul 5, 2026
2d688e7
Close the factory v2 release evidence loop
cofly-io Jul 5, 2026
a5b098a
Mark the factory v2 first phase complete
cofly-io Jul 5, 2026
ee58e17
Keep editor capability tests aligned with port contracts
cofly-io Jul 5, 2026
36214fb
Preserve the current 3D factory v2 workspace
cofly-io Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
61 changes: 61 additions & 0 deletions .agents/skills/industry-pack-generator/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
name: industry-pack-generator
description: Generate Pascal industrial profile packs from an industry brief, factory equipment list, or request such as "make a cement/electrolytic aluminum/food processing industry pack"; create a structured pack spec, scaffold profiles and quality rules, validate with repository QA gates, and prepare the pack for the simulated cloud.
---

# Industry Pack Generator

Use this skill to create or expand installable Pascal geometry knowledge/profile packs.

## Workflow

1. Read the current project rules:
- `PROFILE_PACK_AUTHORING_STANDARD.md`
- `LLM_PRIMITIVE_GENERATION_ARCHITECTURE.md` when architecture context is needed
- `references/industry-pack-spec.md` for the scaffold spec shape
2. Identify package scope:
- Use one focused industry or extension domain per pack.
- Prefer `industry.{industry}.basic` for a self-contained base pack.
- Prefer `industry.{industry}.{extension}` with `dependsOn` for extensions.
3. Draft a v2 industry pack spec JSON with equipment profiles, parts, primary roles, aliases, visual cues, quality constraints, and equipment-node intent.
- For basic packs, include `factoryArchitectures` and `processTemplates`.
- For extension packs, include them only when the extension adds a new factory-level process.
- For recipe-backed equipment, include `recipeId`, `processPorts`, and `equipmentDefaults` so the scaffold can emit `equipmentBindings`.
4. Run the scaffold:

```bash
bun apps/editor/scripts/scaffold-industry-profile-pack.ts --spec <spec.json> --force
```

5. Validate and QA:

```bash
bun apps/editor/scripts/profile-pack-qa.ts <pack-id>@<version> --validate-only
bun apps/editor/scripts/profile-pack-qa.ts <pack-id>@<version> --limit 3
```

6. Review generated profiles:
- Ensure every `parts[].kind` exists in the Part Registry.
- Ensure `primarySemanticRole` appears in required roles.
- Ensure aliases include Chinese and English terms when useful.
- Keep `shapeCount.max` realistic; avoid bloated geometry.

## Pack Authoring Rules

- Generate data first, not TypeScript hardcoding.
- Reuse common part kinds from `packages/core/src/lib/part-registry.ts`.
- Default new packages to schema v2 with `dependsOnPlugins` and `equipmentBindings`.
- Use `generic_industrial_layout` unless a known layout family is clearly better.
- Put device-specific knowledge in profiles and quality rules.
- Do not invent a new family/layout for one equipment unless the layout is reusable.
- For unknown equipment, model major visible assemblies: body, frame, drive, ports, platforms, legs, hoppers, ducts, panels, sensors.

## Output Contract

When finishing, report:

- Pack id and output directory.
- Device count and profile ids.
- Whether factory architectures and process templates were generated.
- Validation/QA command results.
- Any low-confidence devices that need visual reference review.
4 changes: 4 additions & 0 deletions .agents/skills/industry-pack-generator/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Industry Pack Generator"
short_description: "Generate and validate Pascal industrial profile packs."
default_prompt: "Generate a Pascal industry profile pack from an industry brief, then validate it with the repository QA gates."
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
# Industry Pack Scaffold Spec

Use this JSON shape as input to `apps/editor/scripts/scaffold-industry-profile-pack.ts`.

```json
{
"industry": "cement",
"id": "industry.cement.basic",
"name": "Cement Basic Equipment Pack",
"version": "0.1.0",
"description": "Focused cement plant equipment pack.",
"schemaVersion": "2.0",
"dependsOnPlugins": ["pascal:factory-equipment"],
"capabilities": ["factory_creation"],
"factoryArchitectures": [
{
"id": "cement.factory.modular",
"label": "Cement plant modular architecture",
"industry": "cement",
"processId": "cement_plant_full",
"layoutStyle": "linear",
"defaultDimensions": { "length": 60, "width": 24 },
"modules": [
{
"id": "pyro_line",
"displayLabel": "Pyro line",
"order": 10,
"stationIds": ["rotary_kiln"]
}
]
}
],
"processTemplates": [
{
"processId": "cement_plant_full",
"processLabel": "Cement plant",
"processDisplayLabel": "Cement plant",
"domain": "industrial",
"aliases": ["cement plant", "cement factory"],
"requiredRoles": ["rotary_kiln"],
"defaultLayoutStyle": "linear",
"defaultDimensions": { "length": 60, "width": 24 },
"stations": [
{
"id": "rotary_kiln",
"label": "Rotary kiln",
"displayLabel": "Rotary kiln",
"role": "rotary_kiln",
"equipmentHint": "cement.rotary_kiln long inclined rotary kiln",
"profileId": "cement.rotary_kiln",
"footprintHint": "long"
}
]
}
],
"devices": [
{
"id": "rotary_kiln",
"name": "Rotary kiln",
"aliases": ["rotary kiln", "cement kiln", "回转窑", "水泥回转窑"],
"recipeId": "factory:storage-tank",
"layoutFamily": "vessel_layout",
"family": "tank",
"defaultDimensions": { "length": 12, "width": 2.2, "height": 2.4 },
"processPorts": [
{ "id": "inlet", "side": "left", "diameter": 0.3 },
{ "id": "outlet", "side": "right", "diameter": 0.28 }
],
"equipmentDefaults": { "orientation": "horizontal", "capacity": 30, "liquidLevel": 0.35 },
"primarySemanticRole": "kiln_shell",
"parts": [
{
"kind": "cylindrical_tank",
"semanticRole": "kiln_shell",
"required": true,
"length": 12,
"radius": 0.65,
"axis": "x"
}
],
"forbiddenRoles": ["vehicle_cabin"],
"shapeCount": { "min": 8, "max": 80 },
"visualCues": ["long inclined cylinder", "riding rings", "support rollers"]
}
]
}
```

## Top-Level Fields

- `industry`: required. Use a focused industry id such as `cement`, `food`, `fine-chemical`, or `electrolytic-aluminum`.
- `id`: optional. Defaults to `industry.{industry}.basic`.
- `name`: optional. Defaults to `{industry} Basic Equipment Pack`.
- `version`: optional. Defaults to `0.1.0`.
- `schemaVersion`: optional. Defaults to `2.0`.
- `dependsOn`: optional for extension packs, for example `[{ "id": "industry.fine-chemical.basic", "version": ">=0.1.0" }]`.
- `dependsOnPlugins`: optional. Defaults to `["pascal:factory-equipment"]` for v2 equipment-node packs.
- `capabilities`: optional. Use `["factory_creation"]` only when the pack includes factory/process knowledge.
- `factoryArchitectures`: required when `capabilities` includes `factory_creation`; otherwise optional. Defines the whole-plant module tree.
- `processTemplates`: required when `capabilities` includes `factory_creation`; otherwise optional. Defines stations, aliases, and station connections.
- `devices`: required non-empty list.

## Factory-Capable Pack Rules

When `capabilities` includes `factory_creation`, QA enforces:

- At least one `factoryArchitectures` resource.
- At least one `processTemplates` resource.
- Every station must resolve through `profileId`/`equipmentProfileId` to an `equipmentBindings[]`
entry or declare `genericFallback.reason`.
- Every process-template station must be covered by a device profile, native resolver, or catalog resolver hint.
- Every architecture module `stationIds[]` entry must exist in the matching process template.
- Factory creation is intentionally single-process-template per request. Do not add quantity expansion fields such as `parameters`, `flows`, `countParam`, `defaultCount`, `minCount`, `maxCount`, or `replicatedStationIds`.

If the pack only provides equipment profiles, omit `factory_creation`; QA will classify it as a `device-only` pack.

## Device Fields

- `id`, `name`, `aliases`, `parts`, `primarySemanticRole` are required.
- `layoutFamily` defaults to `generic_industrial_layout`.
- `family` defaults to `generic`.
- `recipeId` may reference a registered semantic equipment recipe such as `factory:centrifugal-pump`, `factory:storage-tank`, `factory:distillation-unit`, `factory:refinery-reactor-unit`, or `factory:refinery-auxiliary-unit`; otherwise the scaffold infers known equipment kinds from profile text.
- `defaultDimensions` should describe the whole equipment envelope.
- `processPorts` declares device-level ports that v2 `portMap` must cover.
- `equipmentDefaults` declares equipment-node parameters such as pump type, flow rate, motor power,
tank orientation, capacity, or liquid level.
- `parts[].kind` must exist in the Part Registry.
- `parts[].semanticRole` should be stable and domain-specific.
- `qualityRequiredRoles` can add roles beyond required parts.
- `forbiddenRoles` should prevent common wrong-domain details.
- `shapeCount` controls QA expectations.
- Control rooms, MCC rooms, labs, substations, and other occupied-building stations should use
`preferredResolver: "profile-parts"` instead of `catalog-item`, with roles for the building body,
roof cap/parapet, door/opening, windows, panels, and service entries.
- Packaged boilers can use a rectangular casing, but should also include boiler-specific process
features such as a stack, steam drum or tube bank, steam header/manifold, burner opening, platform,
and control box. Avoid profiles that are only `generic_body` plus one accessory.

## Generated Files

The scaffold writes:

- `pack.json`
- `README.md`
- `profiles/generated.json`
- `factory-architectures/generated.json` when `factoryArchitectures` is provided
- `process-templates/generated.json` when `processTemplates` is provided
- `quality-rules/generated-quality.json`
- `<pack-id>-<version>.zip` beside the generated source directory, unless `--skip-zip` is used

The generated `README.md` labels the pack as `factory-capable` or `device-only` and lists supported factory/process templates when factory creation is enabled.
The generated `pack.json` uses schema v2, includes `dependsOnPlugins`, and writes inferred
`equipmentBindings` for profiles that map to factory equipment nodes.

Run validation after generation:

```bash
bun apps/editor/scripts/profile-pack-qa.ts <pack-id>@<version> --validate-only
```
Loading