Prompt file imported from steedos/steedos-platform (
.github/prompts/STEEDOS_PACKAGE_CONTEXT.prompt.md). Fill in{{doc_name_length}},{{doc_name}}before use. Copyright stays with the author.
Steedos Package Creation - AI Assistant Context
⚠️ IMPORTANT: THIS IS STEEDOS PLATFORM (Node.js), NOT PYTHON!
When the user asks to create a Steedos package, you MUST:
-
Use the correct technology stack:
- Platform: Steedos (华炎魔方)
- Language: JavaScript/TypeScript (NOT Python)
- Metadata: YAML files
- Backend: Node.js + Moleculer
- Package Manager: NPM/Yarn
-
Generate these file types:
- ✅
.object.yml- Object definitions - ✅
.trigger.js- Business logic (JavaScript) - ✅
.action.js- Custom actions (JavaScript) - ✅
package.json- NPM package configuration - ✅
package.service.js- Moleculer service
- ✅
-
DO NOT generate:
- ❌
.pyfiles - ❌
requirements.txt - ❌ Django/Flask files
- ❌ Any Python code
- ❌
Standard Steedos Package Structure
steedos-packages/
└── [package-name]/
├── package.json # NPM package config
├── package.service.js # Moleculer service (JavaScript)
└── main/default/
├── objects/
│ ├── [object-name].object.yml # Object definition (YAML)
│ └── [object-name].action.js # Custom actions (JavaScript)
├── triggers/
│ └── [object-name].trigger.js # Server-side validation (JavaScript)
├── applications/
│ └── [app-name].app.yml # Application (created based on requirements)
└── pages/
└── [page-name].page.yml # Custom pages (optional)
Critical: Folder Structure Rules
- ✅ Triggers:
main/default/triggers/[object-name].trigger.js - ✅ Objects:
main/default/objects/[object-name].object.yml - ✅ Actions:
main/default/objects/[object-name].action.js - ❌ NOT:
objects/[object-name]/[object-name].trigger.js(WRONG!) - ✅ Applications: Create when user requests an app or management interface
Example: Contract Management Package
package.json (NPM, NOT Python)
{
"name": "@steedos-packages/contract-management",
"version": "1.0.0",
"main": "package.service.js"
}
package.service.js (Moleculer Service, JavaScript)
"use strict";
const project = require('./package.json');
const packageLoader = require('@steedos/service-package-loader');
module.exports = {
name: project.name,
namespace: "steedos",
mixins: [packageLoader],
settings: {
packageInfo: {
path: __dirname,
name: project.name,
isPackage: true
}
}
};
contracts.object.yml (Object Definition)
name: contracts
label: 合同
icon: contract
enable_api: true
fields:
name:
type: text
label: 合同名称
required: true
contract_no:
type: autonumber
label: 合同编号
formula: 'HT-{YYYY}{MM}{DD}-{0000}'
amount:
type: currency
label: 合同金额
required: true
status:
type: select
label: 状态
options:
- label: 草稿
value: draft
- label: 已签署
value: signed
list_views:
all:
label: 所有合同
columns:
- name
- contract_no
- amount
- status
filter_scope: space
sort:
- field_name: created
order: desc
permission_set:
user:
allowCreate: true
allowRead: true
allowEdit: true
allowDelete: false
modifyAllRecords: false
viewAllRecords: true
admin:
allowCreate: true
allowRead: true
allowEdit: true
allowDelete: true
modifyAllRecords: true
viewAllRecords: true
contracts.trigger.js (Server-Side Validation, JavaScript)
/**
* Server-side validation for contracts
* JavaScript trigger file
*/
module.exports = {
listenTo: 'contracts',
beforeInsert: async function() {
const { doc } = this;
// Validate: Contract name length <= 20 characters
if (doc.name && doc.name.length > 20) {
throw new Error(
`合同名称长度不能超过20个字符,当前长度: {{doc_name_length}}。` +
`Contract name cannot exceed 20 characters, current: {{doc_name_length}}.`
);
}
// Validate: Amount must be positive
if (doc.amount && doc.amount <= 0) {
throw new Error('合同金额必须大于0。Amount must be positive.');
}
console.log(`[Contract Created] Validated: {{doc_name}}`);
},
beforeUpdate: async function() {
const { doc, previousDoc } = this;
// Validate: Contract name length <= 20 characters
if (doc.name && doc.name.length > 20) {
throw new Error(
`合同名称长度不能超过20个字符,当前长度: {{doc_name_length}}。` +
`Contract name cannot exceed 20 characters, current: {{doc_name_length}}.`
);
}
console.log(`[Contract Updated] Validated: ${doc.name || previousDoc.name}`);
}
};
Key Validation Points
When creating a Steedos package with server-side validation:
- Validation Location: Implement in
.trigger.jsfile (JavaScript) - Validation Hooks:
beforeInsert- Validates before creating new recordsbeforeUpdate- Validates before updating records
- Error Handling: Use
throw new Error()with clear messages - Context Variables:
this.doc- Current document datathis.previousDoc- Original data (in beforeUpdate)this.userId- Current user IDthis.object_name- Object name
Complete Directory Creation Commands
# Create package structure (Unix/Mac)
mkdir -p steedos-packages/contract-management/main/default/objects/contracts
mkdir -p steedos-packages/contract-management/main/default/applications
# Windows PowerShell
New-Item -ItemType Directory -Path steedos-packages/contract-management/main/default/objects/contracts -Force
New-Item -ItemType Directory -Path steedos-packages/contract-management/main/default/applications -Force
Usage Instructions for Users
Tell users to provide this context to you:
使用 Steedos 平台(Node.js + JavaScript)创建合同管理软件包。
参考 .github/prompts/customer/05-package-development.md
要求:
1. 创建完整的 Steedos 软件包结构
2. 使用 JavaScript .trigger.js 文件实现服务端校验
3. 合同名称长度不能超过20个字符
4. 生成所有必需文件: package.json, package.service.js, .object.yml, .trigger.js
请生成完整的代码文件。
Remember:
- ✅ Steedos = Node.js + JavaScript + YAML
- ✅ Triggers = .trigger.js files (JavaScript)
- ✅ Package config = package.json (NPM)
- ❌ NOT Python, NOT Django, NOT Flask
- ❌ NOT .py files, NOT requirements.txt
When in doubt, always use JavaScript/Node.js syntax for Steedos packages!