Skip to content

Commit c2e6bb2

Browse files
committed
chore: phase1 pre-flight cleanup before 3.0.x branch normalization
1 parent c183857 commit c2e6bb2

20 files changed

Lines changed: 953 additions & 29 deletions

‎README.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ Multi-adapter CLI integration SDK for OpenCLI: browser / desktop / public-API ad
88
[简体中文](./README.zh-CN.md)
99

1010
> **Current branch**: `feature/3.0.x`
11-
> **Version**: `3.0.x.x.20260630-SNAPSHOT`
12-
> **JDK baseline**: 8
13-
> **Project status**: stable (1.0.x line). Not yet published to Maven Central; artifacts are distributed via the Aliyun Maven repository and GitHub Releases.
11+
> **Version**: `3.0.x.20260630-SNAPSHOT`
12+
> **JDK baseline**: 21
13+
> **Project status**: stable (3.0.x line). Not yet published to Maven Central; artifacts are distributed via the Aliyun Maven repository and GitHub Releases.
1414
1515
## Table of Contents
1616

@@ -81,7 +81,7 @@ Version-line matrix:
8181

8282
| Version line | Branch | JDK | Version pattern | Purpose |
8383
|---|---|---:|---|---|
84-
| 1.0.x | `feature/3.0.x` (this branch) | 8 | `1.0.x.*` | For Boot 2.x starters and legacy projects |
84+
| 1.0.x | `feature/1.0.x` | 8 | `1.0.x.*` | For Boot 2.x starters and legacy projects |
8585
| 2.0.x | `feature/2.0.x` | 17 | `2.0.x.*` | For Boot 3.x starters |
8686
| 3.0.x | `feature/3.0.x` | 21 | `3.0.x.*` | For Boot 4.x starters / new projects |
8787

@@ -133,7 +133,7 @@ Maven:
133133
<dependency>
134134
<groupId>io.github.easy4j</groupId>
135135
<artifactId>opencli-java-sdk</artifactId>
136-
<version>3.0.x.x.20260630-SNAPSHOT</version>
136+
<version>3.0.x.20260630-SNAPSHOT</version>
137137
</dependency>
138138
```
139139

@@ -231,7 +231,7 @@ Protocol: edge sends `register`; center replies `registered`; center sends `coll
231231
mvn clean verify
232232
```
233233

234-
- Unit tests cover the adapter registry, core execution, browser/meta/remote paths and WS helpers (14 test sources under `src/test`).
234+
- Unit tests cover the adapter registry, core execution, browser/meta/remote paths and WS helpers (19 Java test sources under `src/test`).
235235
- JaCoCo runs `prepare-agent`, `report` and `check` on the `verify` phase with a **90% line-coverage** rule (`haltOnFailure=false`).
236236
- `scripts/generate_opencli_adapter_ids.py` regenerates `OpenCliAdapterIds` / `OpenCliAdapterTaxonomy` from the upstream `opencli/docs/adapters/index.md` + `cli-manifest.json` (set `OPENCLI_ROOT` to point at the upstream tree).
237237
- Release packaging (`mvn -Prelease deploy`) attaches sources and javadoc jars, GPG-signs artifacts and is wired for Sonatype Central Publishing; plain `mvn deploy` routes SNAPSHOT/release artifacts to the Aliyun Maven repository per `distributionManagement`.
@@ -243,7 +243,7 @@ mvn clean verify
243243
|---|---|---|---|
244244
| `feature/1.0.x` (this branch) | `1.0.x.*` | 8 | Compatibility fixes and JDK-8-safe dependency upgrades only |
245245
| `feature/2.0.x` | `2.0.x.*` | 17 | JDK 17 line |
246-
| `feature/3.0.x` | `3.0.x.*` | 21 | JDK 21 line |
246+
| `feature/3.0.x` (this branch) | `3.0.x.*` | 21 | JDK 21 line |
247247

248248
Branch POMs (JDK and dependency stack per line) are rendered by `scripts/render-branch-pom.py`.
249249

‎README.zh-CN.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
面向 OpenCLI 多适配器体系的 Java SDK:browser / desktop / public-api 适配器、远程 Agent 与中心 WebSocket
88

99
> **当前分支**:`feature/3.0.x`
10-
> **版本**:`3.0.x.x.20260630-SNAPSHOT`
11-
> **JDK 基线**:8
12-
> **项目状态**:稳定(1.0.x 线)。尚未发布 Maven Central;制品通过 Aliyun Maven 仓库与 GitHub Releases 分发。
10+
> **版本**:`3.0.x.20260630-SNAPSHOT`
11+
> **JDK 基线**:21
12+
> **项目状态**:稳定(3.0.x 线)。尚未发布 Maven Central;制品通过 Aliyun Maven 仓库与 GitHub Releases 分发。
1313
1414
## 目录
1515

@@ -80,7 +80,7 @@
8080

8181
| 版本线 | 分支 | JDK | 版本模式 | 用途 |
8282
|---|---|---:|---|---|
83-
| 1.0.x | `feature/3.0.x`(当前分支) | 8 | `1.0.x.*` | 供 Boot 2.x Starter 与存量项目使用 |
83+
| 1.0.x | `feature/1.0.x` | 8 | `1.0.x.*` | 供 Boot 2.x Starter 与存量项目使用 |
8484
| 2.0.x | `feature/2.0.x` | 17 | `2.0.x.*` | 供 Boot 3.x Starter 使用 |
8585
| 3.0.x | `feature/3.0.x` | 21 | `3.0.x.*` | 供 Boot 4.x Starter / 新项目使用 |
8686

@@ -132,7 +132,7 @@ Maven:
132132
<dependency>
133133
<groupId>io.github.easy4j</groupId>
134134
<artifactId>opencli-java-sdk</artifactId>
135-
<version>3.0.x.x.20260630-SNAPSHOT</version>
135+
<version>3.0.x.20260630-SNAPSHOT</version>
136136
</dependency>
137137
```
138138

@@ -230,7 +230,7 @@ agent.close();
230230
mvn clean verify
231231
```
232232

233-
- 单元测试覆盖适配器注册表、核心执行、browser / meta / remote 路径与 WS 工具(`src/test` 下 14 个测试源文件)。
233+
- 单元测试覆盖适配器注册表、核心执行、browser / meta / remote 路径与 WS 工具(`src/test` 下 19 个 Java 测试源文件)。
234234
- JaCoCo 在 `verify` 阶段执行 `prepare-agent`、`report` 与 `check`,行覆盖率规则为 **90%**(`haltOnFailure=false`)。
235235
- `scripts/generate_opencli_adapter_ids.py` 依据上游 `opencli/docs/adapters/index.md` + `cli-manifest.json` 重新生成 `OpenCliAdapterIds` / `OpenCliAdapterTaxonomy`(可用 `OPENCLI_ROOT` 指定上游源码树)。
236236
- 发布打包(`mvn -Prelease deploy`)附带 sources 与 javadoc 构件并执行 GPG 签名,对接 Sonatype Central Publishing;普通 `mvn deploy` 按版本后缀路由到 Aliyun Maven 仓库(见 `distributionManagement`)。
@@ -242,7 +242,7 @@ mvn clean verify
242242
|---|---|---|---|
243243
| `feature/1.0.x`(当前分支) | `1.0.x.*` | 8 | 仅接受兼容性修复与 JDK 8 安全的依赖升级 |
244244
| `feature/2.0.x` | `2.0.x.*` | 17 | JDK 17 线 |
245-
| `feature/3.0.x` | `3.0.x.*` | 21 | JDK 21 线 |
245+
| `feature/3.0.x`(当前分支) | `3.0.x.*` | 21 | JDK 21 线 |
246246

247247
各分支 POM(JDK 与依赖栈随线变化)由 `scripts/render-branch-pom.py` 渲染。
248248

‎pom.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@
343343
<configuration>
344344
<skip>false</skip>
345345
<skipTests>false</skipTests>
346-
<argLine>-Xmx1024m -Dfile.encoding=UTF-8</argLine>
346+
<argLine>@{argLine} -Xmx1024m -Dfile.encoding=UTF-8</argLine>
347347
<additionalClasspathElements>
348348
<additionalClasspathElement>${basedir}/target/test-classes</additionalClasspathElement>
349349
</additionalClasspathElements>

‎scripts/generate_opencli_adapter_ids.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ def main() -> None:
7979
# 重新划分 browser:未命中 desktop 的 manifest / index 条目一律视为 browser 类。
8080
browser = {x for x in all_ids if x not in desktop}
8181

82-
out = root / "src/main/java/io/github/hiwepy/opencli/registry/OpenCliAdapterIds.java"
82+
out = root / "src/main/java/io/github/easy4j/opencli/registry/OpenCliAdapterIds.java"
8383
out.parent.mkdir(parents=True, exist_ok=True)
8484

8585
lines = [
86-
"package io.github.hiwepy.opencli.registry;",
86+
"package io.github.easy4j.opencli.registry;",
8787
"",
8888
"/**",
8989
" * OpenCLI 适配器标识常量(由脚本从 docs/adapters/index.md + cli-manifest.json 生成)。",
@@ -126,7 +126,7 @@ def main() -> None:
126126
desk_sorted = sorted(desktop)
127127
brows_sorted = sorted(browser)
128128
tax_lines = [
129-
"package io.github.hiwepy.opencli.registry;",
129+
"package io.github.easy4j.opencli.registry;",
130130
"",
131131
"import java.util.Collections;",
132132
"import java.util.Arrays;",

‎scripts/generate_opencli_command_tests.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
os.environ.get("OPENCLI_MANIFEST", _DEFAULT_MANIFEST)
3434
).resolve()
3535

36-
COVERAGE_PKG = "io.github.hiwepy.opencli.coverage"
37-
COVERAGE_DIR = _SDK_ROOT / "src/test/java/io/github/hiwepy/opencli/coverage"
36+
COVERAGE_PKG = "io.github.easy4j.opencli.coverage"
37+
COVERAGE_DIR = _SDK_ROOT / "src/test/java/io/github/easy4j/opencli/coverage"
3838
RESOURCES_DIR = _SDK_ROOT / "src/test/resources/opencli"
3939

4040
PLACEHOLDER_STR = "__coverage__"

‎scripts/render-branch-pom.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,13 +270,13 @@ def write_pom(
270270
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
271271
<modelVersion>4.0.0</modelVersion>
272272
273-
<groupId>io.github.hiwepy</groupId>
273+
<groupId>io.github.easy4j</groupId>
274274
<artifactId>opencli-java-sdk</artifactId>
275275
<version>{version}</version>
276276
<packaging>jar</packaging>
277277
<name>${{project.groupId}}:${{project.artifactId}}</name>
278278
<description>{description}</description>
279-
<url>https://github.com/hiwepy/${{project.artifactId}}</url>
279+
<url>https://github.com/easy-4-java/${{project.artifactId}}</url>
280280
281281
{COMMON_META}
282282
{ALIYUN_DM}

‎src/main/java/io/github/easy4j/opencli/adapter/browser/chatgpt/ChatgptOpenCliClient.java‎

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,22 @@ public static class ChatgptCommonOptions {
3535

3636
private Integer historyLimit;
3737

38+
private Integer stableSeconds;
39+
3840
private Boolean readAsMarkdown;
3941

40-
/** 文档:{@code --new} 开启新会话。 */
4142
private Boolean newConversation;
4243

44+
private String conversation;
45+
46+
private String project;
47+
48+
private Boolean waitForResponse;
49+
50+
private Boolean deepResearch;
51+
52+
private Boolean webSearch;
53+
4354
private Boolean jsonOutput;
4455

4556
public void appendTo(List<String> target) {
@@ -52,9 +63,27 @@ public void appendTo(List<String> target) {
5263
if (historyLimit != null) {
5364
OpenCliArgSupport.addOptionPair(target, "--limit", String.valueOf(historyLimit));
5465
}
66+
if (stableSeconds != null) {
67+
OpenCliArgSupport.addOptionPair(target, "--stable", String.valueOf(stableSeconds));
68+
}
5569
if (readAsMarkdown != null) {
5670
OpenCliArgSupport.addOptionPair(target, "--markdown", String.valueOf(readAsMarkdown));
5771
}
72+
if (conversation != null) {
73+
OpenCliArgSupport.addOptionPair(target, "--conversation", conversation);
74+
}
75+
if (project != null) {
76+
OpenCliArgSupport.addOptionPair(target, "--project", project);
77+
}
78+
if (waitForResponse != null) {
79+
OpenCliArgSupport.addOptionPair(target, "--wait", String.valueOf(waitForResponse));
80+
}
81+
if (Boolean.TRUE.equals(deepResearch)) {
82+
target.add("--deep-research");
83+
}
84+
if (Boolean.TRUE.equals(webSearch)) {
85+
target.add("--web-search");
86+
}
5887
if (Boolean.TRUE.equals(jsonOutput)) {
5988
target.add("-f");
6089
target.add("json");
@@ -118,6 +147,63 @@ public OpenCliResult status(List<String> more) {
118147
return ch().invoke(OpenCliArgSupport.merge(OpenCliLists.of("status"), more));
119148
}
120149

150+
public OpenCliResult deepResearchResult(String id, Boolean wait, Integer timeoutSeconds,
151+
Integer stableSeconds, List<String> more) {
152+
List<String> args = new ArrayList<>();
153+
args.add("deep-research-result");
154+
args.add(id);
155+
if (wait != null) {
156+
OpenCliArgSupport.addOptionPair(args, "--wait", String.valueOf(wait));
157+
}
158+
if (timeoutSeconds != null) {
159+
OpenCliArgSupport.addOptionPair(args, "--timeout", String.valueOf(timeoutSeconds));
160+
}
161+
if (stableSeconds != null) {
162+
OpenCliArgSupport.addOptionPair(args, "--stable", String.valueOf(stableSeconds));
163+
}
164+
return ch().invoke(OpenCliArgSupport.merge(args, more));
165+
}
166+
167+
public OpenCliResult login(Integer timeoutSeconds, List<String> more) {
168+
List<String> args = new ArrayList<>();
169+
args.add("login");
170+
if (timeoutSeconds != null) {
171+
OpenCliArgSupport.addOptionPair(args, "--timeout", String.valueOf(timeoutSeconds));
172+
}
173+
return ch().invoke(OpenCliArgSupport.merge(args, more));
174+
}
175+
176+
public OpenCliResult model(String model, String project, List<String> more) {
177+
List<String> args = new ArrayList<>();
178+
args.add("model");
179+
args.add(model);
180+
if (project != null) {
181+
OpenCliArgSupport.addOptionPair(args, "--project", project);
182+
}
183+
return ch().invoke(OpenCliArgSupport.merge(args, more));
184+
}
185+
186+
public OpenCliResult projectFileAdd(String file, String id, List<String> more) {
187+
List<String> args = new ArrayList<>();
188+
args.add("project-file-add");
189+
args.add(file);
190+
OpenCliArgSupport.addOptionPair(args, "--id", id);
191+
return ch().invoke(OpenCliArgSupport.merge(args, more));
192+
}
193+
194+
public OpenCliResult projectList(Integer limit, List<String> more) {
195+
List<String> args = new ArrayList<>();
196+
args.add("project-list");
197+
if (limit != null) {
198+
OpenCliArgSupport.addOptionPair(args, "--limit", String.valueOf(limit));
199+
}
200+
return ch().invoke(OpenCliArgSupport.merge(args, more));
201+
}
202+
203+
public OpenCliResult whoami(List<String> more) {
204+
return ch().invoke(OpenCliArgSupport.merge(OpenCliLists.of("whoami"), more));
205+
}
206+
121207
/**
122208
* {@code chatgpt image} 文生图参数。
123209
*/
@@ -144,7 +230,7 @@ public void appendTo(List<String> target) {
144230
OpenCliArgSupport.addOptionPair(target, "--op", outputDir);
145231
}
146232
if (Boolean.TRUE.equals(skipDownload)) {
147-
OpenCliArgSupport.addOptionPair(target, "--sd", "true");
233+
target.add("--sd");
148234
}
149235
if (timeoutSeconds != null) {
150236
OpenCliArgSupport.addOptionPair(target, "--timeout", String.valueOf(timeoutSeconds));

‎src/main/java/io/github/easy4j/opencli/adapter/browser/claude/ClaudeOpenCliClient.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ public OpenCliResult send(String prompt, ClaudeAskOptions options, List<String>
9898
return ch().invoke(OpenCliArgSupport.merge(args, more));
9999
}
100100

101+
public OpenCliResult login(Integer timeoutSeconds, List<String> more) {
102+
List<String> args = new ArrayList<>();
103+
args.add("login");
104+
if (timeoutSeconds != null) {
105+
OpenCliArgSupport.addOptionPair(args, "--timeout", String.valueOf(timeoutSeconds));
106+
}
107+
return ch().invoke(OpenCliArgSupport.merge(args, more));
108+
}
109+
110+
public OpenCliResult whoami(List<String> more) {
111+
return ch().invoke(OpenCliArgSupport.merge(OpenCliLists.of("whoami"), more));
112+
}
101113
public OpenCliResult newChat(List<String> more) {
102114
return ch().invoke(OpenCliArgSupport.merge(OpenCliLists.of("new"), more));
103115
}

‎src/main/java/io/github/easy4j/opencli/adapter/browser/deepseek/DeepseekOpenCliClient.java‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,20 @@ public OpenCliResult send(String conversationId, String prompt, DeepseekAskOptio
103103
return ch().invoke(OpenCliArgSupport.merge(args, more));
104104
}
105105

106-
/** {@code deepseek new}。 */
106+
public OpenCliResult login(Integer timeoutSeconds, List<String> more) {
107+
List<String> args = new ArrayList<>();
108+
args.add("login");
109+
if (timeoutSeconds != null) {
110+
OpenCliArgSupport.addOptionPair(args, "--timeout", String.valueOf(timeoutSeconds));
111+
}
112+
return ch().invoke(OpenCliArgSupport.merge(args, more));
113+
}
114+
115+
public OpenCliResult whoami(List<String> more) {
116+
return ch().invoke(OpenCliArgSupport.merge(OpenCliLists.of("whoami"), more));
117+
}
118+
119+
107120
public OpenCliResult newChat(List<String> more) {
108121
return ch().invoke(OpenCliArgSupport.merge(OpenCliLists.of("new"), more));
109122
}

0 commit comments

Comments
 (0)