Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5cb8326
feat(back): align db schema to linkwork_* and litellm gateway
Mar 20, 2026
bf61e2f
chore(back): include starter dependencies in pom
Mar 20, 2026
c1a66c9
feat(back): add missing linkwork backend sources for dev_0.2 build
Mar 20, 2026
0cca366
fix(back): avoid bean name conflict with k8s starter generators
Mar 20, 2026
58df01b
fix(task): keep workspace alias path aligned with general_agent
Frank980908 Mar 20, 2026
9654c33
feat(dev_0.2): include afternoon backend and deploy chain updates
Frank980908 Mar 20, 2026
2b52056
feat(runtime): align pi runtime wiring with backend build prerequisites
Mar 23, 2026
37554b4
refactor(image-build): remove sdkRepoUrl/assetSourceImage and bundle …
Frank980908 Mar 23, 2026
d76b5d7
fix(build-assets): bundle worker runtime and momo sdk compatibility
Frank980908 Mar 23, 2026
81abbf3
chore: remove accidentally committed pycache files
Frank980908 Mar 23, 2026
4cb26f2
fix(build): make pi cli optional in prerequisite check
Frank980908 Mar 23, 2026
634ec61
fix(sdk-config): accept runtime and pi_settings in config
Frank980908 Mar 23, 2026
5ac3aa4
chore(security): externalize keys and endpoints to .env
Mar 23, 2026
5bfa73f
Revert "feat(runtime): align pi runtime wiring with backend build pre…
Mar 23, 2026
cc9e633
chore(config): externalize runtime base urls in config.json
Mar 23, 2026
d6fe8aa
fix(runtime): propagate llm env to worker process and pod spec
Mar 23, 2026
109b184
chore: parameterize runtime defaults for secure env-based config
Mar 23, 2026
9736fc5
refactor: remove legacy robot/momo symbols with compatibility-safe re…
Mar 23, 2026
c6cf951
refactor: change the file name
Mar 23, 2026
e6d441c
refactor: remove file
Mar 23, 2026
932da57
refactor: rename backend maven coordinates
Mar 23, 2026
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
42 changes: 42 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copy this file to .env and fill in real values.

# Backend / LiteLLM
ROBOT_LITELLM_API_KEY=
GITLAB_CLIENT_ID=
ROBOT_LITELLM_BASE_URL=
GITLAB_BASE_URL=
GITLAB_REDIRECT_URI=
BILLING_GATEWAY_URL_TEMPLATE=
TASK_SHARE_BASE_URL=

# Database
LINKWORK_DB_URL=

# Agent runtime config.json placeholders
OPENAI_API_KEY=
LITELLM_API_KEY=
LITELLM_BASE_URL=
ANTHROPIC_AUTH_TOKEN=
ANTHROPIC_API_KEY=
ANTHROPIC_BASE_URL=

# Image / Registry
SCHEDULE_IMAGE_REGISTRY=
SCHEDULE_AGENT_IMAGE=
RUNNER_IMAGE=
DEFAULT_AGENT_BASE_IMAGE=
COMPOSE_BASE_IMAGE=
IMAGE_REGISTRY=

# Runtime gateway routes
API_BASE_URL=
WS_BASE_URL=
LLM_GATEWAY_URL=
LINKWORK_AGENT_MCP_GATEWAY_AGENT_BASE_URL=
LINKWORK_AGENT_MCP_GATEWAY_PROXY_BASE_URL=

# Other endpoints
MILVUS_URI=

# Optional local Maven/GitHub packages
GITHUB_TOKEN=
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,12 @@
# OS
.DS_Store
Thumbs.db
/db/migration/

# Local secrets
.env
.env.*
!.env.example
/back/target
/target

239 changes: 239 additions & 0 deletions back/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.linkwork</groupId>
<artifactId>linkwork-backend-service</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>LinkWork Backend Service</name>
<description>AI 员工执行环境 - 后端 Web 服务</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/>
</parent>

<properties>
<java.version>21</java.version>
<linkwork.server.version>0.1.0-SNAPSHOT</linkwork.server.version>
</properties>

<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Spring Boot WebSocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

<!-- JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
<optional>true</optional>
</dependency>

<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!-- MySQL -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>

<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>

<!-- Validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.12.5</version>
<scope>runtime</scope>
</dependency>

<!-- Spring Security Crypto (for BCrypt) -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>

<!-- Kubernetes Client -->
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>6.10.0</version>
</dependency>

<!-- LinkWork starter modules -->
<dependency>
<groupId>io.linkwork</groupId>
<artifactId>linkwork-k8s-starter</artifactId>
<version>${linkwork.server.version}</version>
</dependency>
<dependency>
<groupId>io.linkwork</groupId>
<artifactId>linkwork-storage-starter</artifactId>
<version>${linkwork.server.version}</version>
</dependency>
<dependency>
<groupId>io.linkwork</groupId>
<artifactId>linkwork-skill-starter</artifactId>
<version>${linkwork.server.version}</version>
</dependency>
<dependency>
<groupId>io.linkwork</groupId>
<artifactId>linkwork-mcp-starter</artifactId>
<version>${linkwork.server.version}</version>
</dependency>

<!-- Docker Java Client -->
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-core</artifactId>
<version>3.3.4</version>
</dependency>
<!-- Docker Java transport - zerodep 对 Unix socket 支持更好 -->
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java-transport-zerodep</artifactId>
<version>3.3.4</version>
</dependency>

<!-- Guava (覆盖 docker-java 引入的 19.0,gRPC 需要 32.x) -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>

<!-- YAML 处理 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

<!-- Milvus Java SDK -->
<dependency>
<groupId>io.milvus</groupId>
<artifactId>milvus-sdk-java</artifactId>
<version>2.5.15</version>
</dependency>

<!-- Apache Tika (document parsing: PDF/Word/HTML) -->
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers-standard-package</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.27.1</version>
</dependency>
<!-- Align transitive commons deps for commons-compress 1.27.1 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.16.0</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>21</source>
<target>21</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
18 changes: 18 additions & 0 deletions back/src/main/java/com/linkwork/LinkWorkApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.linkwork;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

import java.util.TimeZone;

@SpringBootApplication
@MapperScan("com.linkwork.mapper")
@EnableScheduling
public class LinkWorkApplication {
public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
SpringApplication.run(LinkWorkApplication.class, args);
}
}
48 changes: 48 additions & 0 deletions back/src/main/java/com/linkwork/common/ApiResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.linkwork.common;

import lombok.Data;

import java.time.Instant;
import java.util.UUID;

/**
* 统一 API 响应结构
*/
@Data
public class ApiResponse<T> {

private Integer code;
private String msg;
private T data;
private String traceId;

private String timestamp;

private ApiResponse(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
this.traceId = UUID.randomUUID().toString();
this.timestamp = Instant.now().toString();
}

public static <T> ApiResponse<T> success(T data) {
return new ApiResponse<>(0, "success", data);
}

public static <T> ApiResponse<T> success() {
return new ApiResponse<>(0, "success", null);
}

public static <T> ApiResponse<T> error(Integer code, String msg) {
return new ApiResponse<>(code, msg, null);
}

public static <T> ApiResponse<T> error(String msg) {
return new ApiResponse<>(50000, msg, null);
}

public static <T> ApiResponse<T> error(Integer code, String msg, T data) {
return new ApiResponse<>(code, msg, data);
}
}
Loading