Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@
### 新增

- 组织页双向互生长:FreeOS 资产经 `/api/freeos/ingest`(共享写入令牌,无需边车登录墙)落到 openXYOS 员工/人才/插件/技能表;控制面导出再装配回 FreeOS。循环在边车健康时不再把「已推送到控制面」写成 false。
- 组织页可从本地语料或 ima / 云知识库指针一键生产同事;本地模型一键下载后会注册到 Ollama 供应商。
- 组织页可从本地语料或 ima / 云知识库指针一键生产尚未入部门的专家 / 智能助手;本地模型一键下载后会注册到 Ollama 供应商。
- 组织页用语对齐:员工=已入部门;同事=同一组织的同伴;专家 / 智能助手=尚未入部门。导入把部门员工登记为同事;导出把专家写入控制面员工。

### 变更

- 组织循环时间线的是/否改为中英文本地化,不再混用 `true`/`false`。
- 边车启动会写入并传递 `FREEOS_INGEST_TOKEN`;Python 启动器同时识别 `%LOCALAPPDATA%\FreeOS\openxyos`、`$INSTDIR\openxyos` 与 portable `org-sidecar`。
- Windows 安装包写入预构建 openXYOS 运行包(`$INSTDIR\openxyos` + `openxyos-runtime.zip`),首次启动再落到 `%LOCALAPPDATA%\FreeOS\openxyos` / `~/.freeos/openxyos`,自动拉起 `http://127.0.0.1:3780`,组织页不必再点「启动边车」。
- 项目创建用系统文件夹选择器(Wails 原生对话框,任意盘符);项目/任务/对话区默认展示实时对话列表,并提供建群/群聊入口。
- Organization OS 首页双循环:FreeOS 数据面与 openXYOS 控制面的实时状态、一键装配员工 / 打包回流 / 运行 org loop,以及边车离线时的启动恢复。
- Organization OS 首页双循环:FreeOS 数据面与 openXYOS 控制面的实时状态、一键导入部门员工为同事 / 打包专家为员工 / 运行 org loop,以及边车离线时的启动恢复。
- FreeOS 官网源码:`website/`(Vite + React 静态站,正式域名 https://freeos.cnxy.tech)。视觉与章节节奏对齐 XYAI Labs(天蓝→亮光、毛玻璃、01/02/…、底座 / 系统 / 生态),文案仍是 FreeOS 产品自己的话;圆形标志 + XYAI 机器人六姿态,无 Octop 红或章鱼形象。构建产物可整包上传到 `/www/wwwroot/freeos.cnxy.tech`。

### 变更
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
<a href="docs/architecture-integration.md">Architecture</a>
</p>

**FreeOS** is an independent open-source host. The data plane is derived from [Octop](https://github.com/TencentCloud/Octop) (MIT). The organization control plane comes from [openXYOS](https://github.com/XYAIStudio/openXYOS) (Apache-2.0). They are complementary: FreeOS **produces** AI employees, skills, plugins, and MCPs; those assets **assemble into openXYOS**; openXYOS blueprints, catalog, policies, and talent **feed back** into FreeOS to spawn or upgrade more runtime agents.
**FreeOS** is an independent open-source host. The data plane is derived from [Octop](https://github.com/TencentCloud/Octop) (MIT). The organization control plane comes from [openXYOS](https://github.com/XYAIStudio/openXYOS) (Apache-2.0). They are complementary: FreeOS **produces** experts / assistants (not yet in a department), skills, plugins, and MCPs; those assets **assemble into openXYOS** as department employees; openXYOS blueprints, catalog, policies, and talent **feed back** into FreeOS as colleagues.

The web shell, README banner, favicons, and PWA icons use the FreeOS circular mark (gray ring, yellow / green / red teardrops, blue center).

## Run the self-growth loop

This is the product path. One command compiles a blueprint into an AI employee, promotes it `draft → market → recruit → shadow → active`, registers a FreeOS chat agent, publishes an asset pack, applies that pack onto openXYOS-shaped surfaces (live HTTP when `OPENXYOS_BASE_URL` is set, otherwise a durable local mirror), imports the control plane back, and proves governance still **blocks** high-risk tools.
This is the product path. One command compiles a blueprint into a colleague, promotes it `draft → market → recruit → shadow → active`, registers a FreeOS chat agent, publishes an asset pack, applies that pack onto openXYOS-shaped surfaces as department employees (live HTTP when `OPENXYOS_BASE_URL` is set, otherwise a durable local mirror), imports the control plane back, and proves governance still **blocks** high-risk tools.

```bash
git clone https://github.com/XYAIStudio/FreeOS.git
Expand Down
24 changes: 12 additions & 12 deletions dashboard/src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"controlPlane": "Control plane",
"flowUp": "Assets back",
"flowDown": "Blueprints out",
"metricEmployees": "Digital employees",
"metricEmployees": "Colleagues / experts",
"metricSkills": "Org skills",
"metricMcp": "MCP / connectors",
"metricTasks": "Tasks",
Expand All @@ -31,50 +31,50 @@
"metricHealth": "Control-plane health",
"metricTenant": "Tenant",
"assembleTitle": "Bring openXYOS into FreeOS",
"assembleBody": "Import AI employees, skills, and plugins from the live control plane (or bundled blueprints) and register them for chat.",
"assembleBody": "Import department employees, skills, and plugins from the live control plane (or bundled blueprints) and register them as colleagues.",
"assembleAction": "Import into FreeOS",
"assembleDone": "Imported {{count}} digital employee(s) into FreeOS",
"assembleDone": "Imported {{count}} colleague(s) into FreeOS",
"packTitle": "Send FreeOS assets to openXYOS",
"packBody": "Pack FreeOS agents, skills, plugins, and MCP, then land them on the control plane. You will see what was written.",
"packBody": "Pack experts / assistants not yet in a department, plus skills, plugins, and MCP, then land them on the control plane as department employees. You will see what was written.",
"packAction": "Push to openXYOS",
"packDone": "Asset pack published",
"packRemoteYes": "Landed on the live openXYOS control plane",
"packRemoteNo": "Sidecar offline: wrote the local mirror only",
"loopTitle": "Run the growth loop",
"loopBody": "Produce on FreeOS, assemble into openXYOS, feed back, and leave durable proof below.",
"loopBody": "Produce experts / assistants on FreeOS, land them on the control plane as department employees, feed back as colleagues, and leave durable proof below.",
"loopAction": "Run growth loop",
"produceTitle": "Produce a colleague from a corpus",
"produceBody": "Distill a local folder or attach an ima / cloud knowledge URL, then compile a usable FreeOS expert.",
"produceTitle": "Produce an expert from a corpus",
"produceBody": "Distill a local folder or attach an ima / cloud knowledge URL, then compile a FreeOS expert / assistant that is not yet in a department.",
"produceAction": "Produce from corpus",
"produceDone": "Produced {{name}}",
"produceKb": "Knowledge base id (optional)",
"produceIma": "ima / cloud knowledge URL (optional)",
"produceName": "Colleague name",
"produceName": "Expert name",
"landedTitle": "What landed",
"landedEmpty": "Nothing landed on the control plane yet.",
"yes": "Yes",
"no": "No",
"progressAssemble": "Importing from openXYOS…",
"progressPack": "Packing and pushing to openXYOS…",
"progressLoop": "Running the growth loop…",
"progressProduce": "Producing a colleague from the corpus…",
"progressProduce": "Producing an expert from the corpus…",
"loopOk": "Organization loop completed",
"loopPartial": "Loop ran; some steps did not finish (see timeline)",
"timelineTitle": "Loop timeline",
"timelineEmpty": "No loop proof yet. Run the organization loop to see real results here.",
"timelineOk": "Loop result",
"timelineEmployees": "Employees",
"timelineEmployees": "Colleagues",
"timelineSkills": "Skills",
"timelineRemote": "Pushed to control plane",
"timelineGovernance": "High-risk tool blocked by governance",
"emptyTitle": "First look at Organization",
"emptyBody": "FreeOS on the left owns employees, skills, MCP, and tasks. openXYOS on the right owns blueprints, modules, and approvals. Start the sidecar, or run the loop once to see a real cycle.",
"emptyBody": "FreeOS on the left owns colleagues, experts / assistants not yet in a department, skills, MCP, and tasks. openXYOS on the right owns department employees, blueprints, modules, and approvals. Start the sidecar, or run the loop once to see a real cycle.",
"startSidecarTitle": "openXYOS sidecar is offline",
"startSidecarBody": "Live approvals and remote apply need the sidecar. Start it here; if no launcher is bundled, use the command beside the button.",
"startSidecarAction": "Start sidecar",
"sidecarStarted": "Sidecar is reachable",
"sidecarStartPending": "Start attempted; refresh in a moment",
"bridgeHint": "FreeOS produces employees, skills, plugins, and MCPs. Those assets assemble into openXYOS; org blueprints and policies feed back into FreeOS.",
"bridgeHint": "FreeOS produces experts / assistants not yet in a department, plus skills, plugins, and MCPs. Those assets assemble into openXYOS as department employees; org blueprints and policies feed back as colleagues.",
"home": "Data home",
"sidecar": "Sidecar URL",
"notesTitle": "How this module is wired",
Expand Down
24 changes: 12 additions & 12 deletions dashboard/src/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"controlPlane": "控制面",
"flowUp": "资产回流",
"flowDown": "蓝图下发",
"metricEmployees": "数字员工",
"metricEmployees": "同事 / 专家",
"metricSkills": "组织技能",
"metricMcp": "MCP / 连接器",
"metricTasks": "任务",
Expand All @@ -31,50 +31,50 @@
"metricHealth": "控制面健康",
"metricTenant": "租户",
"assembleTitle": "把 openXYOS 装进 FreeOS",
"assembleBody": "从在线控制面导入 AI 员工、技能和插件(或使用捆绑蓝图),并注册到对话。",
"assembleBody": "从在线控制面导入已入部门的员工、技能和插件(或使用捆绑蓝图),注册为本组织同事。",
"assembleAction": "导入到 FreeOS",
"assembleDone": "已导入 {{count}} 名数字员工到 FreeOS",
"assembleDone": "已导入 {{count}} 名同事到 FreeOS",
"packTitle": "把 FreeOS 资产推到 openXYOS",
"packBody": "打包 FreeOS 智能体、技能、插件与 MCP,写入控制面,并显示落地结果。",
"packBody": "打包尚未入部门的专家 / 智能助手、技能、插件与 MCP,写入控制面成为部门员工,并显示落地结果。",
"packAction": "推送到 openXYOS",
"packDone": "资产包已发布",
"packRemoteYes": "已写入在线 openXYOS 控制面",
"packRemoteNo": "边车离线:仅写入本地镜像",
"loopTitle": "运行自增长循环",
"loopBody": "在 FreeOS 生产、装配进 openXYOS、再回流,并在下方留下可核对的证据。",
"loopBody": "在 FreeOS 生产专家 / 智能助手,写入控制面成为部门员工,再回流为本组织同事,并在下方留下可核对的证据。",
"loopAction": "运行自增长循环",
"produceTitle": "从语料生产同事",
"produceBody": "蒸馏本地文件夹,或挂接 ima / 云知识库地址,编译成可用的 FreeOS 专家。",
"produceTitle": "从语料生产专家",
"produceBody": "蒸馏本地文件夹,或挂接 ima / 云知识库地址,编译成尚未入部门的 FreeOS 专家 / 智能助手。",
"produceAction": "从语料生产",
"produceDone": "已生产 {{name}}",
"produceKb": "知识库编号(可选)",
"produceIma": "ima / 云知识库地址(可选)",
"produceName": "同事名称",
"produceName": "专家名称",
"landedTitle": "落地结果",
"landedEmpty": "控制面还没有落地记录。",
"yes": "是",
"no": "否",
"progressAssemble": "正在从 openXYOS 导入…",
"progressPack": "正在打包并推送到 openXYOS…",
"progressLoop": "正在运行自增长循环…",
"progressProduce": "正在从语料生产同事…",
"progressProduce": "正在从语料生产专家…",
"loopOk": "组织循环已跑通",
"loopPartial": "循环已执行,部分步骤未完成(见时间线)",
"timelineTitle": "循环时间线",
"timelineEmpty": "还没有循环记录。运行组织循环后,这里会显示真实结果。",
"timelineOk": "循环结果",
"timelineEmployees": "员工",
"timelineEmployees": "同事",
"timelineSkills": "技能数",
"timelineRemote": "已推送到控制面",
"timelineGovernance": "高风险工具被治理拦截",
"emptyTitle": "第一次打开组织",
"emptyBody": "左侧 FreeOS 负责员工、技能、MCP 与任务;右侧 openXYOS 负责蓝图、模块与审批。先启动边车,或直接运行组织循环看一次真实闭环。",
"emptyBody": "左侧 FreeOS 负责同事、尚未入部门的专家 / 智能助手、技能、MCP 与任务;右侧 openXYOS 负责部门员工、蓝图、模块与审批。先启动边车,或直接运行组织循环看一次真实闭环。",
"startSidecarTitle": "openXYOS 边车未运行",
"startSidecarBody": "控制面离线时无法做 live 审批与远程回流。可一键启动本机边车;若启动器不在当前环境,请按旁边的命令手动启动。",
"startSidecarAction": "启动边车",
"sidecarStarted": "边车已可达",
"sidecarStartPending": "已尝试启动,请稍候再刷新",
"bridgeHint": "FreeOS 生产员工、技能、插件与 MCP;这些资产组装进 openXYOS,组织蓝图与策略再回流到 FreeOS。",
"bridgeHint": "FreeOS 生产尚未入部门的专家 / 智能助手、技能、插件与 MCP;推入 openXYOS 后成为部门员工;组织蓝图与策略再回流,登记为本组织同事。",
"home": "数据目录",
"sidecar": "边车地址",
"notesTitle": "模块如何接入",
Expand Down
6 changes: 3 additions & 3 deletions docs/asset-loop.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

FreeOS **grows its own AI workforce**. The loop is the product:

1. **Produce** runtime assets on FreeOS (the data plane): AI employees, skills, plugins, MCP connectors.
2. **Assemble** those assets into openXYOS (the control plane) so org modules get stronger.
3. **Feed back** openXYOS org structure, blueprints, governance, the module catalog, and the talent market into FreeOS to spawn or upgrade more agents and skills.
1. **Produce** runtime assets on FreeOS (the data plane): experts / assistants not yet in a department, skills, plugins, MCP connectors.
2. **Assemble** those assets into openXYOS (the control plane) as department employees so org modules get stronger.
3. **Feed back** openXYOS org structure, blueprints, governance, the module catalog, and the talent market into FreeOS as colleagues — same-organization peers you can chat with.
4. **Repeat.** Each cycle adds colleagues and capabilities that are usable in FreeOS chat and governed.

openXYOS does **not** replace FreeOS chat. FreeOS still runs the agents. Governance **blocks** high-risk tools until a human approves.
Expand Down
4 changes: 2 additions & 2 deletions src/octop/api/routers/org_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ async def org_module_start_sidecar(
return payload


@router.post("/assemble", summary="Assemble digital employees from an openXYOS blueprint")
@router.post("/assemble", summary="Import department employees from openXYOS as FreeOS colleagues")
async def org_module_assemble(
request: Request,
server: OctopServer = Depends(get_server),
Expand All @@ -154,7 +154,7 @@ class OrgProduceBody(BaseModel):
name: str = ""


@router.post("/produce", summary="Produce a FreeOS colleague from a knowledge corpus")
@router.post("/produce", summary="Produce a FreeOS expert / assistant from a knowledge corpus")
async def org_module_produce(
request: Request,
body: OrgProduceBody,
Expand Down
8 changes: 4 additions & 4 deletions src/octop/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -713,14 +713,14 @@
"generated_skills": "generated {count} module skills from the openXYOS catalog",
"compiled_blueprint": "compiled blueprint {name} → {slug}",
"compiled_workspace": "compiled blueprint → {path}",
"spawned_agent": "spawned FreeOS agent {agent_id}",
"spawned_agent": "spawned FreeOS assistant {agent_id}",
"imported_live": "imported openXYOS catalog/policies from the live sidecar",
"sidecar_offline_compile": "sidecar offline; compiling bundled openXYOS blueprint fixtures",
"wrote_policies": "wrote imported governance policies (fail-closed; engine loads them)",
"local_mirror": "Local mirror is the durable record. HTTP apply is best-effort.",
"nothing_auto_enabled": "Nothing is auto-enabled on the control plane.",
"hero": "FreeOS does the work. openXYOS owns organization and governance.",
"planes": "Data plane: employees / skills / MCP / tasks. Control plane: blueprints / modules / governance.",
"planes": "Data plane: colleagues / experts / skills / MCP / tasks. Control plane: department employees / blueprints / modules / governance.",
"sidecar_offline": "openXYOS sidecar is offline — start it to sync blueprints and approvals.",
"mirror_only": "OPENXYOS_BASE_URL unset; applied to local mirror only.",
"local_mirror_short": "Local mirror is the durable record.",
Expand All @@ -732,13 +732,13 @@
"ingest_denied_mirror": "sidecar rejected the ingest token; mirror is complete",
"public_ok": "control plane accepted drafts on public routes",
"control_rejected": "control plane at {url} did not accept drafts; mirror is complete",
"loop_done": "Loop produced employees, published an asset pack, applied it, and imported back.",
"loop_done": "Loop produced colleagues, published an asset pack, applied department employees, and imported back.",
"pack_review": "Not installed into the sidecar. Review openxyos/ then enable per tenant.",
"pack_tenant": "One tenant = one workspace; do not unpack this pack into a shared sandbox.",
"pack_redact": "Agent .env values are redacted except tenant/slug/schema keys.",
"corpus_pointer": "attached cloud corpus pointer → {path}",
"corpus_distilled": "distilled {count} corpus files → {path}",
"corpus_empty": "no knowledge mount; producing a corpus-ready colleague workspace",
"corpus_empty": "no knowledge mount; producing a corpus-ready expert workspace",
"permissions_unreachable": "sidecar permissions unreachable; pass --policies or retry when signed in"
},
"sidecar": {
Expand Down
Loading
Loading