drizzy-agent 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/platform.test.ts +20 -20
- package/dist/cli/config-manager/config-context.d.ts +1 -1
- package/dist/cli/config-manager/generate-drizzy-config.d.ts +2 -0
- package/dist/cli/config-manager/write-drizzy-config.d.ts +2 -0
- package/dist/cli/config-manager.d.ts +2 -2
- package/dist/cli/index.js +82 -84
- package/dist/hooks/keyword-detector/constants.d.ts +1 -0
- package/dist/hooks/keyword-detector/detector.d.ts +1 -1
- package/dist/hooks/keyword-detector/git/default.d.ts +12 -0
- package/dist/hooks/keyword-detector/git/index.d.ts +1 -0
- package/dist/index.js +44 -24
- package/dist/shared/opencode-config-dir-types.d.ts +1 -1
- package/dist/shared/tmux/tmux-utils/environment.d.ts +1 -0
- package/dist/shared/tmux/tmux-utils.d.ts +1 -1
- package/package.json +12 -12
- package/dist/cli/config-manager/generate-omo-config.d.ts +0 -2
- package/dist/cli/config-manager/write-omo-config.d.ts +0 -2
package/bin/platform.test.ts
CHANGED
|
@@ -12,7 +12,7 @@ describe("getPlatformPackage", () => {
|
|
|
12
12
|
const result = getPlatformPackage(input);
|
|
13
13
|
|
|
14
14
|
// #then returns correct package name
|
|
15
|
-
expect(result).toBe("
|
|
15
|
+
expect(result).toBe("drizzy-agent-darwin-arm64");
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
test("returns darwin-x64 for macOS Intel", () => {
|
|
@@ -23,7 +23,7 @@ describe("getPlatformPackage", () => {
|
|
|
23
23
|
const result = getPlatformPackage(input);
|
|
24
24
|
|
|
25
25
|
// #then returns correct package name
|
|
26
|
-
expect(result).toBe("
|
|
26
|
+
expect(result).toBe("drizzy-agent-darwin-x64");
|
|
27
27
|
});
|
|
28
28
|
// #endregion
|
|
29
29
|
|
|
@@ -36,7 +36,7 @@ describe("getPlatformPackage", () => {
|
|
|
36
36
|
const result = getPlatformPackage(input);
|
|
37
37
|
|
|
38
38
|
// #then returns correct package name
|
|
39
|
-
expect(result).toBe("
|
|
39
|
+
expect(result).toBe("drizzy-agent-linux-x64");
|
|
40
40
|
});
|
|
41
41
|
|
|
42
42
|
test("returns linux-arm64 for Linux ARM64 with glibc", () => {
|
|
@@ -47,7 +47,7 @@ describe("getPlatformPackage", () => {
|
|
|
47
47
|
const result = getPlatformPackage(input);
|
|
48
48
|
|
|
49
49
|
// #then returns correct package name
|
|
50
|
-
expect(result).toBe("
|
|
50
|
+
expect(result).toBe("drizzy-agent-linux-arm64");
|
|
51
51
|
});
|
|
52
52
|
// #endregion
|
|
53
53
|
|
|
@@ -60,7 +60,7 @@ describe("getPlatformPackage", () => {
|
|
|
60
60
|
const result = getPlatformPackage(input);
|
|
61
61
|
|
|
62
62
|
// #then returns correct package name with musl suffix
|
|
63
|
-
expect(result).toBe("
|
|
63
|
+
expect(result).toBe("drizzy-agent-linux-x64-musl");
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
test("returns linux-arm64-musl for Alpine ARM64", () => {
|
|
@@ -71,7 +71,7 @@ describe("getPlatformPackage", () => {
|
|
|
71
71
|
const result = getPlatformPackage(input);
|
|
72
72
|
|
|
73
73
|
// #then returns correct package name with musl suffix
|
|
74
|
-
expect(result).toBe("
|
|
74
|
+
expect(result).toBe("drizzy-agent-linux-arm64-musl");
|
|
75
75
|
});
|
|
76
76
|
// #endregion
|
|
77
77
|
|
|
@@ -84,7 +84,7 @@ describe("getPlatformPackage", () => {
|
|
|
84
84
|
const result = getPlatformPackage(input);
|
|
85
85
|
|
|
86
86
|
// #then returns correct package name with 'windows' not 'win32'
|
|
87
|
-
expect(result).toBe("
|
|
87
|
+
expect(result).toBe("drizzy-agent-windows-x64");
|
|
88
88
|
});
|
|
89
89
|
// #endregion
|
|
90
90
|
|
|
@@ -112,38 +112,38 @@ describe("getPlatformPackage", () => {
|
|
|
112
112
|
describe("getBinaryPath", () => {
|
|
113
113
|
test("returns path without .exe for Unix platforms", () => {
|
|
114
114
|
// #given Unix platform package
|
|
115
|
-
const pkg = "
|
|
115
|
+
const pkg = "drizzy-agent-darwin-arm64";
|
|
116
116
|
const platform = "darwin";
|
|
117
117
|
|
|
118
118
|
// #when getting binary path
|
|
119
119
|
const result = getBinaryPath(pkg, platform);
|
|
120
120
|
|
|
121
121
|
// #then returns path without extension
|
|
122
|
-
expect(result).toBe("
|
|
122
|
+
expect(result).toBe("drizzy-agent-darwin-arm64/bin/drizzy-agent");
|
|
123
123
|
});
|
|
124
124
|
|
|
125
125
|
test("returns path with .exe for Windows", () => {
|
|
126
126
|
// #given Windows platform package
|
|
127
|
-
const pkg = "
|
|
127
|
+
const pkg = "drizzy-agent-windows-x64";
|
|
128
128
|
const platform = "win32";
|
|
129
129
|
|
|
130
130
|
// #when getting binary path
|
|
131
131
|
const result = getBinaryPath(pkg, platform);
|
|
132
132
|
|
|
133
133
|
// #then returns path with .exe extension
|
|
134
|
-
expect(result).toBe("
|
|
134
|
+
expect(result).toBe("drizzy-agent-windows-x64/bin/drizzy-agent.exe");
|
|
135
135
|
});
|
|
136
136
|
|
|
137
137
|
test("returns path without .exe for Linux", () => {
|
|
138
138
|
// #given Linux platform package
|
|
139
|
-
const pkg = "
|
|
139
|
+
const pkg = "drizzy-agent-linux-x64";
|
|
140
140
|
const platform = "linux";
|
|
141
141
|
|
|
142
142
|
// #when getting binary path
|
|
143
143
|
const result = getBinaryPath(pkg, platform);
|
|
144
144
|
|
|
145
145
|
// #then returns path without extension
|
|
146
|
-
expect(result).toBe("
|
|
146
|
+
expect(result).toBe("drizzy-agent-linux-x64/bin/drizzy-agent");
|
|
147
147
|
});
|
|
148
148
|
});
|
|
149
149
|
|
|
@@ -157,8 +157,8 @@ describe("getPlatformPackageCandidates", () => {
|
|
|
157
157
|
|
|
158
158
|
// #then returns modern first then baseline fallback
|
|
159
159
|
expect(result).toEqual([
|
|
160
|
-
"
|
|
161
|
-
"
|
|
160
|
+
"drizzy-agent-linux-x64",
|
|
161
|
+
"drizzy-agent-linux-x64-baseline",
|
|
162
162
|
]);
|
|
163
163
|
});
|
|
164
164
|
|
|
@@ -171,8 +171,8 @@ describe("getPlatformPackageCandidates", () => {
|
|
|
171
171
|
|
|
172
172
|
// #then returns musl modern first then musl baseline fallback
|
|
173
173
|
expect(result).toEqual([
|
|
174
|
-
"
|
|
175
|
-
"
|
|
174
|
+
"drizzy-agent-linux-x64-musl",
|
|
175
|
+
"drizzy-agent-linux-x64-musl-baseline",
|
|
176
176
|
]);
|
|
177
177
|
});
|
|
178
178
|
|
|
@@ -185,8 +185,8 @@ describe("getPlatformPackageCandidates", () => {
|
|
|
185
185
|
|
|
186
186
|
// #then baseline package is preferred first
|
|
187
187
|
expect(result).toEqual([
|
|
188
|
-
"
|
|
189
|
-
"
|
|
188
|
+
"drizzy-agent-windows-x64-baseline",
|
|
189
|
+
"drizzy-agent-windows-x64",
|
|
190
190
|
]);
|
|
191
191
|
});
|
|
192
192
|
|
|
@@ -198,6 +198,6 @@ describe("getPlatformPackageCandidates", () => {
|
|
|
198
198
|
const result = getPlatformPackageCandidates(input);
|
|
199
199
|
|
|
200
200
|
// #then baseline fallback is not included
|
|
201
|
-
expect(result).toEqual(["
|
|
201
|
+
expect(result).toEqual(["drizzy-agent-linux-arm64"]);
|
|
202
202
|
});
|
|
203
203
|
});
|
|
@@ -10,4 +10,4 @@ export declare function resetConfigContext(): void;
|
|
|
10
10
|
export declare function getConfigDir(): string;
|
|
11
11
|
export declare function getConfigJson(): string;
|
|
12
12
|
export declare function getConfigJsonc(): string;
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function getDrizzyConfigPath(): string;
|
|
@@ -3,8 +3,8 @@ export { initConfigContext, getConfigContext, resetConfigContext, } from "./conf
|
|
|
3
3
|
export { fetchNpmDistTags } from "./config-manager/npm-dist-tags";
|
|
4
4
|
export { getPluginNameWithVersion } from "./config-manager/plugin-name-with-version";
|
|
5
5
|
export { addPluginToOpenCodeConfig } from "./config-manager/add-plugin-to-opencode-config";
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
6
|
+
export { generateDrizzyConfig } from "./config-manager/generate-drizzy-config";
|
|
7
|
+
export { writeDrizzyConfig } from "./config-manager/write-drizzy-config";
|
|
8
8
|
export { isOpenCodeInstalled, getOpenCodeVersion } from "./config-manager/opencode-binary";
|
|
9
9
|
export { detectCurrentConfig } from "./config-manager/detect-current-config";
|
|
10
10
|
export type { BunInstallResult } from "./config-manager/bun-install";
|
package/dist/cli/index.js
CHANGED
|
@@ -5960,6 +5960,7 @@ var init_agent_names = __esm(() => {
|
|
|
5960
5960
|
coder: "coder",
|
|
5961
5961
|
GPTCoder: "gptcoder",
|
|
5962
5962
|
gptcoder: "gptcoder",
|
|
5963
|
+
hephaestus: "gptcoder",
|
|
5963
5964
|
Planner: "planner",
|
|
5964
5965
|
planner: "planner",
|
|
5965
5966
|
"Prometheus (Planner)": "planner",
|
|
@@ -6107,7 +6108,7 @@ function migrateConfigFile(configPath, rawConfig) {
|
|
|
6107
6108
|
needsWrite = true;
|
|
6108
6109
|
}
|
|
6109
6110
|
if (copy.omo_agent) {
|
|
6110
|
-
copy.
|
|
6111
|
+
copy.coder_agent = copy.omo_agent;
|
|
6111
6112
|
delete copy.omo_agent;
|
|
6112
6113
|
needsWrite = true;
|
|
6113
6114
|
}
|
|
@@ -6266,7 +6267,7 @@ function getOpenCodeConfigPaths(options) {
|
|
|
6266
6267
|
configJson: join3(configDir, "opencode.json"),
|
|
6267
6268
|
configJsonc: join3(configDir, "opencode.jsonc"),
|
|
6268
6269
|
packageJson: join3(configDir, "package.json"),
|
|
6269
|
-
|
|
6270
|
+
drizzyConfig: join3(configDir, "drizzy-agent.json")
|
|
6270
6271
|
};
|
|
6271
6272
|
}
|
|
6272
6273
|
var TAURI_APP_IDENTIFIER = "ai.opencode.desktop", TAURI_APP_IDENTIFIER_DEV = "ai.opencode.desktop.dev";
|
|
@@ -6376,7 +6377,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6376
6377
|
fallbackChain: [
|
|
6377
6378
|
{
|
|
6378
6379
|
providers: ["openai", "venice", "opencode"],
|
|
6379
|
-
model: "gpt-5.
|
|
6380
|
+
model: "gpt-5.4",
|
|
6380
6381
|
variant: "medium"
|
|
6381
6382
|
},
|
|
6382
6383
|
{ providers: ["github-copilot"], model: "gpt-5.4", variant: "medium" }
|
|
@@ -6557,7 +6558,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6557
6558
|
fallbackChain: [
|
|
6558
6559
|
{
|
|
6559
6560
|
providers: ["openai", "opencode"],
|
|
6560
|
-
model: "gpt-5.
|
|
6561
|
+
model: "gpt-5.4",
|
|
6561
6562
|
variant: "medium"
|
|
6562
6563
|
},
|
|
6563
6564
|
{
|
|
@@ -6571,7 +6572,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6571
6572
|
variant: "high"
|
|
6572
6573
|
}
|
|
6573
6574
|
],
|
|
6574
|
-
requiresModel: "gpt-5.
|
|
6575
|
+
requiresModel: "gpt-5.4"
|
|
6575
6576
|
},
|
|
6576
6577
|
artistry: {
|
|
6577
6578
|
fallbackChain: [
|
|
@@ -6610,7 +6611,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6610
6611
|
},
|
|
6611
6612
|
{
|
|
6612
6613
|
providers: ["openai", "opencode"],
|
|
6613
|
-
model: "gpt-5.
|
|
6614
|
+
model: "gpt-5.4",
|
|
6614
6615
|
variant: "medium"
|
|
6615
6616
|
},
|
|
6616
6617
|
{
|
|
@@ -7140,8 +7141,8 @@ function getConfigJson() {
|
|
|
7140
7141
|
function getConfigJsonc() {
|
|
7141
7142
|
return getConfigContext().paths.configJsonc;
|
|
7142
7143
|
}
|
|
7143
|
-
function
|
|
7144
|
-
return getConfigContext().paths.
|
|
7144
|
+
function getDrizzyConfigPath() {
|
|
7145
|
+
return getConfigContext().paths.drizzyConfig;
|
|
7145
7146
|
}
|
|
7146
7147
|
var configContext = null;
|
|
7147
7148
|
var init_config_context = __esm(() => {
|
|
@@ -7381,7 +7382,7 @@ var init_model_fallback_requirements = __esm(() => {
|
|
|
7381
7382
|
fallbackChain: [
|
|
7382
7383
|
{
|
|
7383
7384
|
providers: ["openai", "opencode"],
|
|
7384
|
-
model: "gpt-5.
|
|
7385
|
+
model: "gpt-5.4",
|
|
7385
7386
|
variant: "medium"
|
|
7386
7387
|
}
|
|
7387
7388
|
],
|
|
@@ -7533,7 +7534,7 @@ var init_model_fallback_requirements = __esm(() => {
|
|
|
7533
7534
|
fallbackChain: [
|
|
7534
7535
|
{
|
|
7535
7536
|
providers: ["openai", "opencode"],
|
|
7536
|
-
model: "gpt-5.
|
|
7537
|
+
model: "gpt-5.4",
|
|
7537
7538
|
variant: "xhigh"
|
|
7538
7539
|
},
|
|
7539
7540
|
{
|
|
@@ -7552,7 +7553,7 @@ var init_model_fallback_requirements = __esm(() => {
|
|
|
7552
7553
|
fallbackChain: [
|
|
7553
7554
|
{
|
|
7554
7555
|
providers: ["openai", "opencode"],
|
|
7555
|
-
model: "gpt-5.
|
|
7556
|
+
model: "gpt-5.4",
|
|
7556
7557
|
variant: "medium"
|
|
7557
7558
|
},
|
|
7558
7559
|
{
|
|
@@ -7566,7 +7567,7 @@ var init_model_fallback_requirements = __esm(() => {
|
|
|
7566
7567
|
variant: "high"
|
|
7567
7568
|
}
|
|
7568
7569
|
],
|
|
7569
|
-
requiresModel: "gpt-5.
|
|
7570
|
+
requiresModel: "gpt-5.4"
|
|
7570
7571
|
},
|
|
7571
7572
|
artistry: {
|
|
7572
7573
|
fallbackChain: [
|
|
@@ -7608,7 +7609,7 @@ var init_model_fallback_requirements = __esm(() => {
|
|
|
7608
7609
|
},
|
|
7609
7610
|
{
|
|
7610
7611
|
providers: ["openai", "opencode"],
|
|
7611
|
-
model: "gpt-5.
|
|
7612
|
+
model: "gpt-5.4",
|
|
7612
7613
|
variant: "medium"
|
|
7613
7614
|
},
|
|
7614
7615
|
{
|
|
@@ -7675,7 +7676,7 @@ var init_openai_only_model_catalog = __esm(() => {
|
|
|
7675
7676
|
};
|
|
7676
7677
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
7677
7678
|
artistry: { model: "openai/gpt-5.4", variant: "xhigh" },
|
|
7678
|
-
quick: { model: "openai/gpt-5.
|
|
7679
|
+
quick: { model: "openai/gpt-5.4", variant: "low" },
|
|
7679
7680
|
"visual-engineering": { model: "openai/gpt-5.4", variant: "high" },
|
|
7680
7681
|
writing: { model: "openai/gpt-5.4", variant: "medium" }
|
|
7681
7682
|
};
|
|
@@ -7833,38 +7834,35 @@ var init_model_fallback = __esm(() => {
|
|
|
7833
7834
|
init_fallback_chain_resolution();
|
|
7834
7835
|
});
|
|
7835
7836
|
|
|
7836
|
-
// src/cli/config-manager/generate-
|
|
7837
|
-
function
|
|
7837
|
+
// src/cli/config-manager/generate-drizzy-config.ts
|
|
7838
|
+
function generateDrizzyConfig(installConfig) {
|
|
7838
7839
|
return generateModelConfig(installConfig);
|
|
7839
7840
|
}
|
|
7840
|
-
var
|
|
7841
|
+
var init_generate_drizzy_config = __esm(() => {
|
|
7841
7842
|
init_model_fallback();
|
|
7842
7843
|
});
|
|
7843
7844
|
|
|
7844
|
-
// src/cli/config-manager/
|
|
7845
|
-
|
|
7846
|
-
|
|
7847
|
-
|
|
7845
|
+
// src/cli/config-manager/write-drizzy-config.ts
|
|
7846
|
+
import { existsSync as existsSync7, readFileSync as readFileSync6, statSync as statSync2, writeFileSync as writeFileSync4 } from "fs";
|
|
7847
|
+
import { join as join7 } from "path";
|
|
7848
|
+
function isEmptyOrWhitespace2(content) {
|
|
7849
|
+
return content.trim().length === 0;
|
|
7850
|
+
}
|
|
7851
|
+
function mergeGeneratedConfigWithExisting(generated, existing) {
|
|
7852
|
+
const result = { ...existing };
|
|
7853
|
+
for (const [key, generatedValue] of Object.entries(generated)) {
|
|
7848
7854
|
if (key === "__proto__" || key === "constructor" || key === "prototype")
|
|
7849
7855
|
continue;
|
|
7850
|
-
const
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
7854
|
-
} else if (sourceValue !== undefined) {
|
|
7855
|
-
result[key] = sourceValue;
|
|
7856
|
+
const existingValue = existing[key];
|
|
7857
|
+
if (generatedValue !== null && typeof generatedValue === "object" && !Array.isArray(generatedValue) && existingValue !== null && typeof existingValue === "object" && !Array.isArray(existingValue)) {
|
|
7858
|
+
result[key] = mergeGeneratedConfigWithExisting(generatedValue, existingValue);
|
|
7859
|
+
continue;
|
|
7856
7860
|
}
|
|
7861
|
+
result[key] = generatedValue;
|
|
7857
7862
|
}
|
|
7858
7863
|
return result;
|
|
7859
7864
|
}
|
|
7860
|
-
|
|
7861
|
-
// src/cli/config-manager/write-omo-config.ts
|
|
7862
|
-
import { existsSync as existsSync7, readFileSync as readFileSync6, statSync as statSync2, writeFileSync as writeFileSync4 } from "fs";
|
|
7863
|
-
import { join as join7 } from "path";
|
|
7864
|
-
function isEmptyOrWhitespace2(content) {
|
|
7865
|
-
return content.trim().length === 0;
|
|
7866
|
-
}
|
|
7867
|
-
function writeOmoConfig(installConfig) {
|
|
7865
|
+
function writeDrizzyConfig(installConfig) {
|
|
7868
7866
|
try {
|
|
7869
7867
|
ensureConfigDirectoryExists();
|
|
7870
7868
|
} catch (err) {
|
|
@@ -7874,55 +7872,55 @@ function writeOmoConfig(installConfig) {
|
|
|
7874
7872
|
error: formatErrorWithSuggestion(err, "create config directory")
|
|
7875
7873
|
};
|
|
7876
7874
|
}
|
|
7877
|
-
const
|
|
7875
|
+
const drizzyConfigPath = getDrizzyConfigPath();
|
|
7878
7876
|
const legacyConfigPath = join7(getConfigDir(), "oh-my-opencode.json");
|
|
7879
|
-
const existingConfigPath = existsSync7(
|
|
7877
|
+
const existingConfigPath = existsSync7(drizzyConfigPath) ? drizzyConfigPath : existsSync7(legacyConfigPath) ? legacyConfigPath : drizzyConfigPath;
|
|
7880
7878
|
try {
|
|
7881
|
-
const newConfig =
|
|
7879
|
+
const newConfig = generateDrizzyConfig(installConfig);
|
|
7882
7880
|
if (existsSync7(existingConfigPath)) {
|
|
7883
7881
|
try {
|
|
7884
7882
|
const stat = statSync2(existingConfigPath);
|
|
7885
7883
|
const content = readFileSync6(existingConfigPath, "utf-8");
|
|
7886
7884
|
if (stat.size === 0 || isEmptyOrWhitespace2(content)) {
|
|
7887
|
-
writeFileSync4(
|
|
7885
|
+
writeFileSync4(drizzyConfigPath, JSON.stringify(newConfig, null, 2) + `
|
|
7888
7886
|
`);
|
|
7889
|
-
return { success: true, configPath:
|
|
7887
|
+
return { success: true, configPath: drizzyConfigPath };
|
|
7890
7888
|
}
|
|
7891
7889
|
const existing = parseJsonc(content);
|
|
7892
7890
|
if (!existing || typeof existing !== "object" || Array.isArray(existing)) {
|
|
7893
|
-
writeFileSync4(
|
|
7891
|
+
writeFileSync4(drizzyConfigPath, JSON.stringify(newConfig, null, 2) + `
|
|
7894
7892
|
`);
|
|
7895
|
-
return { success: true, configPath:
|
|
7893
|
+
return { success: true, configPath: drizzyConfigPath };
|
|
7896
7894
|
}
|
|
7897
|
-
const merged =
|
|
7898
|
-
writeFileSync4(
|
|
7895
|
+
const merged = mergeGeneratedConfigWithExisting(newConfig, existing);
|
|
7896
|
+
writeFileSync4(drizzyConfigPath, JSON.stringify(merged, null, 2) + `
|
|
7899
7897
|
`);
|
|
7900
7898
|
} catch (parseErr) {
|
|
7901
7899
|
if (parseErr instanceof SyntaxError) {
|
|
7902
|
-
writeFileSync4(
|
|
7900
|
+
writeFileSync4(drizzyConfigPath, JSON.stringify(newConfig, null, 2) + `
|
|
7903
7901
|
`);
|
|
7904
|
-
return { success: true, configPath:
|
|
7902
|
+
return { success: true, configPath: drizzyConfigPath };
|
|
7905
7903
|
}
|
|
7906
7904
|
throw parseErr;
|
|
7907
7905
|
}
|
|
7908
7906
|
} else {
|
|
7909
|
-
writeFileSync4(
|
|
7907
|
+
writeFileSync4(drizzyConfigPath, JSON.stringify(newConfig, null, 2) + `
|
|
7910
7908
|
`);
|
|
7911
7909
|
}
|
|
7912
|
-
return { success: true, configPath:
|
|
7910
|
+
return { success: true, configPath: drizzyConfigPath };
|
|
7913
7911
|
} catch (err) {
|
|
7914
7912
|
return {
|
|
7915
7913
|
success: false,
|
|
7916
|
-
configPath:
|
|
7914
|
+
configPath: drizzyConfigPath,
|
|
7917
7915
|
error: formatErrorWithSuggestion(err, "write drizzy-agent config")
|
|
7918
7916
|
};
|
|
7919
7917
|
}
|
|
7920
7918
|
}
|
|
7921
|
-
var
|
|
7919
|
+
var init_write_drizzy_config = __esm(() => {
|
|
7922
7920
|
init_shared();
|
|
7923
7921
|
init_config_context();
|
|
7924
7922
|
init_ensure_config_directory_exists();
|
|
7925
|
-
|
|
7923
|
+
init_generate_drizzy_config();
|
|
7926
7924
|
});
|
|
7927
7925
|
|
|
7928
7926
|
// src/shared/spawn-with-windows-hide.ts
|
|
@@ -8025,19 +8023,19 @@ var init_opencode_binary = __esm(() => {
|
|
|
8025
8023
|
import { existsSync as existsSync8, readFileSync as readFileSync7 } from "fs";
|
|
8026
8024
|
import { join as join8 } from "path";
|
|
8027
8025
|
function detectProvidersFromOmoConfig() {
|
|
8028
|
-
const
|
|
8026
|
+
const drizzyConfigPath = getDrizzyConfigPath();
|
|
8029
8027
|
const legacyConfigPath = join8(getConfigDir(), "oh-my-opencode.json");
|
|
8030
|
-
const configPath = existsSync8(
|
|
8028
|
+
const configPath = existsSync8(drizzyConfigPath) ? drizzyConfigPath : legacyConfigPath;
|
|
8031
8029
|
if (!existsSync8(configPath)) {
|
|
8032
8030
|
return { hasOpenAI: true, hasOpencodeZen: true, hasZaiCodingPlan: false, hasKimiForCoding: false };
|
|
8033
8031
|
}
|
|
8034
8032
|
try {
|
|
8035
8033
|
const content = readFileSync7(configPath, "utf-8");
|
|
8036
|
-
const
|
|
8037
|
-
if (!
|
|
8034
|
+
const drizzyConfig = parseJsonc(content);
|
|
8035
|
+
if (!drizzyConfig || typeof drizzyConfig !== "object") {
|
|
8038
8036
|
return { hasOpenAI: true, hasOpencodeZen: true, hasZaiCodingPlan: false, hasKimiForCoding: false };
|
|
8039
8037
|
}
|
|
8040
|
-
const configStr = JSON.stringify(
|
|
8038
|
+
const configStr = JSON.stringify(drizzyConfig);
|
|
8041
8039
|
const hasOpenAI = configStr.includes('"openai/');
|
|
8042
8040
|
const hasOpencodeZen = configStr.includes('"opencode/');
|
|
8043
8041
|
const hasZaiCodingPlan = configStr.includes('"zai-coding-plan/');
|
|
@@ -8186,8 +8184,8 @@ var init_config_manager = __esm(() => {
|
|
|
8186
8184
|
init_config_context();
|
|
8187
8185
|
init_plugin_name_with_version();
|
|
8188
8186
|
init_add_plugin_to_opencode_config();
|
|
8189
|
-
|
|
8190
|
-
|
|
8187
|
+
init_generate_drizzy_config();
|
|
8188
|
+
init_write_drizzy_config();
|
|
8191
8189
|
init_opencode_binary();
|
|
8192
8190
|
init_detect_current_config();
|
|
8193
8191
|
init_bun_install();
|
|
@@ -9082,7 +9080,7 @@ var {
|
|
|
9082
9080
|
// package.json
|
|
9083
9081
|
var package_default = {
|
|
9084
9082
|
name: "drizzy-agent",
|
|
9085
|
-
version: "0.1
|
|
9083
|
+
version: "0.2.1",
|
|
9086
9084
|
description: "DrizzyAgent - AI agent plugin for OpenCode",
|
|
9087
9085
|
main: "dist/index.js",
|
|
9088
9086
|
types: "dist/index.d.ts",
|
|
@@ -9158,17 +9156,17 @@ var package_default = {
|
|
|
9158
9156
|
typescript: "^5.7.3"
|
|
9159
9157
|
},
|
|
9160
9158
|
optionalDependencies: {
|
|
9161
|
-
"drizzy-agent-darwin-arm64": "0.1
|
|
9162
|
-
"drizzy-agent-darwin-x64": "0.1
|
|
9163
|
-
"drizzy-agent-darwin-x64-baseline": "0.1
|
|
9164
|
-
"drizzy-agent-linux-arm64": "0.1
|
|
9165
|
-
"drizzy-agent-linux-arm64-musl": "0.1
|
|
9166
|
-
"drizzy-agent-linux-x64": "0.1
|
|
9167
|
-
"drizzy-agent-linux-x64-baseline": "0.1
|
|
9168
|
-
"drizzy-agent-linux-x64-musl": "0.1
|
|
9169
|
-
"drizzy-agent-linux-x64-musl-baseline": "0.1
|
|
9170
|
-
"drizzy-agent-windows-x64": "0.1
|
|
9171
|
-
"drizzy-agent-windows-x64-baseline": "0.1
|
|
9159
|
+
"drizzy-agent-darwin-arm64": "0.2.1",
|
|
9160
|
+
"drizzy-agent-darwin-x64": "0.2.1",
|
|
9161
|
+
"drizzy-agent-darwin-x64-baseline": "0.2.1",
|
|
9162
|
+
"drizzy-agent-linux-arm64": "0.2.1",
|
|
9163
|
+
"drizzy-agent-linux-arm64-musl": "0.2.1",
|
|
9164
|
+
"drizzy-agent-linux-x64": "0.2.1",
|
|
9165
|
+
"drizzy-agent-linux-x64-baseline": "0.2.1",
|
|
9166
|
+
"drizzy-agent-linux-x64-musl": "0.2.1",
|
|
9167
|
+
"drizzy-agent-linux-x64-musl-baseline": "0.2.1",
|
|
9168
|
+
"drizzy-agent-windows-x64": "0.2.1",
|
|
9169
|
+
"drizzy-agent-windows-x64-baseline": "0.2.1"
|
|
9172
9170
|
},
|
|
9173
9171
|
overrides: {
|
|
9174
9172
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -9196,12 +9194,12 @@ var SYMBOLS = {
|
|
|
9196
9194
|
star: import_picocolors.default.yellow("*")
|
|
9197
9195
|
};
|
|
9198
9196
|
var DRIZZY_AGENT_BANNER = [
|
|
9199
|
-
"____ _
|
|
9200
|
-
"
|
|
9201
|
-
"
|
|
9202
|
-
"
|
|
9203
|
-
"
|
|
9204
|
-
"
|
|
9197
|
+
" ____ _ ___ __ ",
|
|
9198
|
+
" / __ \\_____(_)_______ __ __/ | ____ ____ ____ / /_",
|
|
9199
|
+
" / / / / ___/ /_ /_ / / / / / /| |/ __ `/ _ \\/ __ \\/ __/",
|
|
9200
|
+
"/ /_/ / / / / / /_/ /_/ /_/ / ___ / /_/ / __/ / / / /_ ",
|
|
9201
|
+
"/_____/_/ /_/ /___/___/\\__, /_/ |_\\__, /\\___/_/ /_/\\__/ ",
|
|
9202
|
+
" /____/ /____/ "
|
|
9205
9203
|
].join(`
|
|
9206
9204
|
`);
|
|
9207
9205
|
function formatBanner(mode) {
|
|
@@ -9378,12 +9376,12 @@ async function runCliInstaller(args, version) {
|
|
|
9378
9376
|
}
|
|
9379
9377
|
printSuccess(`Plugin ${isUpdate ? "verified" : "added"} ${SYMBOLS.arrow} ${import_picocolors2.default.dim(pluginResult.configPath)}`);
|
|
9380
9378
|
printStep(step++, totalSteps, "Writing drizzy-agent configuration...");
|
|
9381
|
-
const
|
|
9382
|
-
if (!
|
|
9383
|
-
printError(`Failed: ${
|
|
9379
|
+
const drizzyResult = writeDrizzyConfig(config);
|
|
9380
|
+
if (!drizzyResult.success) {
|
|
9381
|
+
printError(`Failed: ${drizzyResult.error}`);
|
|
9384
9382
|
return 1;
|
|
9385
9383
|
}
|
|
9386
|
-
printSuccess(`Config written ${SYMBOLS.arrow} ${import_picocolors2.default.dim(
|
|
9384
|
+
printSuccess(`Config written ${SYMBOLS.arrow} ${import_picocolors2.default.dim(drizzyResult.configPath)}`);
|
|
9387
9385
|
printBox(formatConfigSummary(config), isUpdate ? "Updated Configuration" : "Installation Complete");
|
|
9388
9386
|
if (!config.hasClaude) {
|
|
9389
9387
|
console.log();
|
|
@@ -10141,13 +10139,13 @@ async function runTuiInstaller(args, version) {
|
|
|
10141
10139
|
}
|
|
10142
10140
|
spinner.stop(`Plugin added to ${import_picocolors4.default.cyan(pluginResult.configPath)}`);
|
|
10143
10141
|
spinner.start("Writing drizzy-agent configuration");
|
|
10144
|
-
const
|
|
10145
|
-
if (!
|
|
10146
|
-
spinner.stop(`Failed to write config: ${
|
|
10142
|
+
const drizzyResult = writeDrizzyConfig(config);
|
|
10143
|
+
if (!drizzyResult.success) {
|
|
10144
|
+
spinner.stop(`Failed to write config: ${drizzyResult.error}`);
|
|
10147
10145
|
Se(import_picocolors4.default.red("Installation failed."));
|
|
10148
10146
|
return 1;
|
|
10149
10147
|
}
|
|
10150
|
-
spinner.stop(`Config written to ${import_picocolors4.default.cyan(
|
|
10148
|
+
spinner.stop(`Config written to ${import_picocolors4.default.cyan(drizzyResult.configPath)}`);
|
|
10151
10149
|
if (!config.hasClaude) {
|
|
10152
10150
|
console.log();
|
|
10153
10151
|
console.log(import_picocolors4.default.bgRed(import_picocolors4.default.white(import_picocolors4.default.bold(" CRITICAL WARNING "))));
|
|
@@ -3,6 +3,7 @@ export declare const INLINE_CODE_PATTERN: RegExp;
|
|
|
3
3
|
export { isPlannerAgent, getUltraworkMessage } from "./ultrawork";
|
|
4
4
|
export { SEARCH_PATTERN, SEARCH_MESSAGE } from "./search";
|
|
5
5
|
export { ANALYZE_PATTERN, ANALYZE_MESSAGE } from "./analyze";
|
|
6
|
+
export { GIT_PATTERN, GIT_MESSAGE } from "./git";
|
|
6
7
|
export type KeywordDetector = {
|
|
7
8
|
pattern: RegExp;
|
|
8
9
|
message: string | ((agentName?: string, modelID?: string) => string);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git mode keyword detector.
|
|
3
|
+
*
|
|
4
|
+
* Triggers on git-operation requests across multiple languages:
|
|
5
|
+
* - English: commit, commits, rebase, squash, cherry-pick, revert, blame, bisect, stash, amend
|
|
6
|
+
* - Korean: 커밋, 리베이스, 스쿼시, 체리픽, 리버트, 블레임, 비섹트, 스태시, 수정 커밋
|
|
7
|
+
* - Japanese: コミット, リベース, スカッシュ, チェリーピック, リバート, blame, bisect, stash
|
|
8
|
+
* - Chinese: 提交, 变基, 压缩提交, 挑拣, 回退, 追溯, 二分查找, 暂存
|
|
9
|
+
* - Vietnamese: commit, rebase, squash, cherry-pick, revert, blame, bisect, stash
|
|
10
|
+
*/
|
|
11
|
+
export declare const GIT_PATTERN: RegExp;
|
|
12
|
+
export declare const GIT_MESSAGE = "[git-mode]\nGit intent detected. Treat git work as specialized work:\n- Load the `git-master` skill before acting on git requests\n- For commit requests, inspect status, diff, and recent commit style first\n- Prefer atomic commits and follow existing repository commit conventions\n- Avoid destructive git commands unless the user explicitly asks for them";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { GIT_PATTERN, GIT_MESSAGE } from "./default";
|
package/dist/index.js
CHANGED
|
@@ -4828,7 +4828,7 @@ function isPlanAgent(agentName) {
|
|
|
4828
4828
|
if (!agentName)
|
|
4829
4829
|
return false;
|
|
4830
4830
|
const lowerName = agentName.toLowerCase().trim();
|
|
4831
|
-
return PLAN_AGENT_NAMES.some((name) => lowerName === name
|
|
4831
|
+
return PLAN_AGENT_NAMES.some((name) => lowerName === name);
|
|
4832
4832
|
}
|
|
4833
4833
|
function isPlanFamily(category) {
|
|
4834
4834
|
if (!category)
|
|
@@ -5343,7 +5343,7 @@ var init_constants = __esm(() => {
|
|
|
5343
5343
|
DEFAULT_CATEGORIES = {
|
|
5344
5344
|
"visual-engineering": { model: "google/gemini-3.1-pro", variant: "high" },
|
|
5345
5345
|
ultrabrain: { model: "openai/gpt-5.4", variant: "xhigh" },
|
|
5346
|
-
deep: { model: "openai/gpt-5.
|
|
5346
|
+
deep: { model: "openai/gpt-5.4", variant: "medium" },
|
|
5347
5347
|
artistry: { model: "google/gemini-3.1-pro", variant: "high" },
|
|
5348
5348
|
quick: { model: "anthropic/claude-haiku-4-5" },
|
|
5349
5349
|
"unspecified-low": { model: "anthropic/claude-sonnet-4-6" },
|
|
@@ -16493,6 +16493,7 @@ var AGENT_NAME_MAP = {
|
|
|
16493
16493
|
coder: "coder",
|
|
16494
16494
|
GPTCoder: "gptcoder",
|
|
16495
16495
|
gptcoder: "gptcoder",
|
|
16496
|
+
hephaestus: "gptcoder",
|
|
16496
16497
|
Planner: "planner",
|
|
16497
16498
|
planner: "planner",
|
|
16498
16499
|
"Prometheus (Planner)": "planner",
|
|
@@ -16640,7 +16641,7 @@ function migrateConfigFile(configPath, rawConfig) {
|
|
|
16640
16641
|
needsWrite = true;
|
|
16641
16642
|
}
|
|
16642
16643
|
if (copy.omo_agent) {
|
|
16643
|
-
copy.
|
|
16644
|
+
copy.coder_agent = copy.omo_agent;
|
|
16644
16645
|
delete copy.omo_agent;
|
|
16645
16646
|
needsWrite = true;
|
|
16646
16647
|
}
|
|
@@ -16785,7 +16786,7 @@ function getOpenCodeConfigPaths(options) {
|
|
|
16785
16786
|
configJson: join5(configDir, "opencode.json"),
|
|
16786
16787
|
configJsonc: join5(configDir, "opencode.jsonc"),
|
|
16787
16788
|
packageJson: join5(configDir, "package.json"),
|
|
16788
|
-
|
|
16789
|
+
drizzyConfig: join5(configDir, "drizzy-agent.json")
|
|
16789
16790
|
};
|
|
16790
16791
|
}
|
|
16791
16792
|
// src/shared/opencode-version.ts
|
|
@@ -17185,7 +17186,7 @@ var AGENT_MODEL_REQUIREMENTS = {
|
|
|
17185
17186
|
fallbackChain: [
|
|
17186
17187
|
{
|
|
17187
17188
|
providers: ["openai", "venice", "opencode"],
|
|
17188
|
-
model: "gpt-5.
|
|
17189
|
+
model: "gpt-5.4",
|
|
17189
17190
|
variant: "medium"
|
|
17190
17191
|
},
|
|
17191
17192
|
{ providers: ["github-copilot"], model: "gpt-5.4", variant: "medium" }
|
|
@@ -17366,7 +17367,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
17366
17367
|
fallbackChain: [
|
|
17367
17368
|
{
|
|
17368
17369
|
providers: ["openai", "opencode"],
|
|
17369
|
-
model: "gpt-5.
|
|
17370
|
+
model: "gpt-5.4",
|
|
17370
17371
|
variant: "medium"
|
|
17371
17372
|
},
|
|
17372
17373
|
{
|
|
@@ -17380,7 +17381,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
17380
17381
|
variant: "high"
|
|
17381
17382
|
}
|
|
17382
17383
|
],
|
|
17383
|
-
requiresModel: "gpt-5.
|
|
17384
|
+
requiresModel: "gpt-5.4"
|
|
17384
17385
|
},
|
|
17385
17386
|
artistry: {
|
|
17386
17387
|
fallbackChain: [
|
|
@@ -17419,7 +17420,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
17419
17420
|
},
|
|
17420
17421
|
{
|
|
17421
17422
|
providers: ["openai", "opencode"],
|
|
17422
|
-
model: "gpt-5.
|
|
17423
|
+
model: "gpt-5.4",
|
|
17423
17424
|
variant: "medium"
|
|
17424
17425
|
},
|
|
17425
17426
|
{
|
|
@@ -18412,8 +18413,12 @@ var SESSION_MISSING_GRACE_MS = 6000;
|
|
|
18412
18413
|
var SESSION_READY_POLL_INTERVAL_MS = 500;
|
|
18413
18414
|
var SESSION_READY_TIMEOUT_MS = 1e4;
|
|
18414
18415
|
// src/shared/tmux/tmux-utils/environment.ts
|
|
18416
|
+
function isInsideTmuxWithEnv(env) {
|
|
18417
|
+
const tmux = env.TMUX;
|
|
18418
|
+
return typeof tmux === "string" && tmux.length > 0;
|
|
18419
|
+
}
|
|
18415
18420
|
function isInsideTmux() {
|
|
18416
|
-
return
|
|
18421
|
+
return isInsideTmuxWithEnv(process.env);
|
|
18417
18422
|
}
|
|
18418
18423
|
function getCurrentPaneId() {
|
|
18419
18424
|
return process.env.TMUX_PANE;
|
|
@@ -42419,6 +42424,14 @@ IF COMPLEX - DO NOT STRUGGLE ALONE. Consult specialists:
|
|
|
42419
42424
|
- **Artistry**: Non-conventional problems (different approach needed)
|
|
42420
42425
|
|
|
42421
42426
|
SYNTHESIZE findings before proceeding.`;
|
|
42427
|
+
// src/hooks/keyword-detector/git/default.ts
|
|
42428
|
+
var GIT_PATTERN = /\b(commit|commits|rebase|squash|cherry[\s-]?pick|revert|blame|bisect|stash|amend)\b|\uCEE4\uBC0B|\uB9AC\uBCA0\uC774\uC2A4|\uC2A4\uCFFC\uC2DC|\uCCB4\uB9AC\uD53D|\uB9AC\uBC84\uD2B8|\uBE14\uB808\uC784|\uBE44\uC139\uD2B8|\uC2A4\uD0DC\uC2DC|\uC218\uC815\s*\uCEE4\uBC0B|\u30B3\u30DF\u30C3\u30C8|\u30EA\u30D9\u30FC\u30B9|\u30B9\u30AB\u30C3\u30B7\u30E5|\u30C1\u30A7\u30EA\u30FC\u30D4\u30C3\u30AF|\u30EA\u30D0\u30FC\u30C8|\u63D0\u4EA4|\u53D8\u57FA|\u538B\u7F29\u63D0\u4EA4|\u6311\u62E3|\u56DE\u9000|\u8FFD\u6EAF|\u4E8C\u5206\u67E5\u627E|\u6682\u5B58/i;
|
|
42429
|
+
var GIT_MESSAGE = `[git-mode]
|
|
42430
|
+
Git intent detected. Treat git work as specialized work:
|
|
42431
|
+
- Load the \`git-master\` skill before acting on git requests
|
|
42432
|
+
- For commit requests, inspect status, diff, and recent commit style first
|
|
42433
|
+
- Prefer atomic commits and follow existing repository commit conventions
|
|
42434
|
+
- Avoid destructive git commands unless the user explicitly asks for them`;
|
|
42422
42435
|
// src/hooks/keyword-detector/constants.ts
|
|
42423
42436
|
var CODE_BLOCK_PATTERN2 = /```[\s\S]*?```/g;
|
|
42424
42437
|
var INLINE_CODE_PATTERN2 = /`[^`]+`/g;
|
|
@@ -42434,6 +42447,10 @@ var KEYWORD_DETECTORS = [
|
|
|
42434
42447
|
{
|
|
42435
42448
|
pattern: ANALYZE_PATTERN,
|
|
42436
42449
|
message: ANALYZE_MESSAGE
|
|
42450
|
+
},
|
|
42451
|
+
{
|
|
42452
|
+
pattern: GIT_PATTERN,
|
|
42453
|
+
message: GIT_MESSAGE
|
|
42437
42454
|
}
|
|
42438
42455
|
];
|
|
42439
42456
|
|
|
@@ -42446,7 +42463,7 @@ function resolveMessage(message, agentName, modelID) {
|
|
|
42446
42463
|
}
|
|
42447
42464
|
function detectKeywordsWithType(text, agentName, modelID) {
|
|
42448
42465
|
const textWithoutCode = removeCodeBlocks2(text);
|
|
42449
|
-
const types6 = ["ultrawork", "search", "analyze"];
|
|
42466
|
+
const types6 = ["ultrawork", "search", "analyze", "git"];
|
|
42450
42467
|
return KEYWORD_DETECTORS.map(({ pattern, message }, index) => ({
|
|
42451
42468
|
matches: pattern.test(textWithoutCode),
|
|
42452
42469
|
type: types6[index],
|
|
@@ -48876,13 +48893,15 @@ var OhMyOpenCodeConfigSchema = exports_external.object({
|
|
|
48876
48893
|
var BASH_CODE_BLOCK_PATTERN = /```bash\r?\n([\s\S]*?)```/g;
|
|
48877
48894
|
var LEADING_GIT_COMMAND_PATTERN = /^([ \t]*(?:[A-Za-z_][A-Za-z0-9_]*=[^ \t]+\s+)*)git(?=[ \t]|$)/gm;
|
|
48878
48895
|
var INLINE_GIT_COMMAND_PATTERN = /([;&|()][ \t]*)git(?=[ \t]|$)/g;
|
|
48896
|
+
var DEFAULT_COMMIT_FOOTER = "Developed with [DrizzyAgent](https://github.com/AndreDalwin/DrizzyAgent)";
|
|
48897
|
+
var DEFAULT_CO_AUTHORED_BY = "Co-authored-by: DrizzyBot <263155900+DrizzyBot@users.noreply.github.com>";
|
|
48879
48898
|
function injectGitMasterConfig(template, config2) {
|
|
48880
48899
|
const commitFooter = config2?.commit_footer ?? true;
|
|
48881
48900
|
const includeCoAuthoredBy = config2?.include_co_authored_by ?? true;
|
|
48882
48901
|
const gitEnvPrefix = assertValidGitEnvPrefix(config2?.git_env_prefix ?? "GIT_MASTER=1");
|
|
48883
48902
|
let result = gitEnvPrefix ? injectGitEnvPrefix(template, gitEnvPrefix) : template;
|
|
48884
48903
|
if (commitFooter || includeCoAuthoredBy) {
|
|
48885
|
-
const injection = buildCommitFooterInjection(commitFooter, includeCoAuthoredBy
|
|
48904
|
+
const injection = buildCommitFooterInjection(commitFooter, includeCoAuthoredBy);
|
|
48886
48905
|
const insertionPoint = result.indexOf("```\n</execution>");
|
|
48887
48906
|
result = insertionPoint !== -1 ? result.slice(0, insertionPoint) + "```\n\n" + injection + `
|
|
48888
48907
|
</execution>` + result.slice(insertionPoint + "```\n</execution>".length) : result + `
|
|
@@ -48936,15 +48955,14 @@ function prefixGitCommandsInBashCodeBlocks(template, prefix) {
|
|
|
48936
48955
|
function prefixGitCommandsInCodeBlock(codeBlock, prefix) {
|
|
48937
48956
|
return codeBlock.replace(LEADING_GIT_COMMAND_PATTERN, `$1${prefix} git`).replace(INLINE_GIT_COMMAND_PATTERN, `$1${prefix} git`);
|
|
48938
48957
|
}
|
|
48939
|
-
function buildCommitFooterInjection(commitFooter, includeCoAuthoredBy
|
|
48958
|
+
function buildCommitFooterInjection(commitFooter, includeCoAuthoredBy) {
|
|
48940
48959
|
const sections = [];
|
|
48941
|
-
const cmdPrefix = gitEnvPrefix ? `${gitEnvPrefix} ` : "";
|
|
48942
48960
|
sections.push("### 5.5 Commit Footer & Co-Author");
|
|
48943
48961
|
sections.push("");
|
|
48944
|
-
sections.push("Add
|
|
48962
|
+
sections.push("Add DrizzyAgent attribution to EVERY commit:");
|
|
48945
48963
|
sections.push("");
|
|
48946
48964
|
if (commitFooter) {
|
|
48947
|
-
const footerText = typeof commitFooter === "string" ? commitFooter :
|
|
48965
|
+
const footerText = typeof commitFooter === "string" ? commitFooter : DEFAULT_COMMIT_FOOTER;
|
|
48948
48966
|
sections.push("1. **Footer in commit body:**");
|
|
48949
48967
|
sections.push("```");
|
|
48950
48968
|
sections.push(footerText);
|
|
@@ -48954,26 +48972,26 @@ function buildCommitFooterInjection(commitFooter, includeCoAuthoredBy, gitEnvPre
|
|
|
48954
48972
|
if (includeCoAuthoredBy) {
|
|
48955
48973
|
sections.push(`${commitFooter ? "2" : "1"}. **Co-authored-by trailer:**`);
|
|
48956
48974
|
sections.push("```");
|
|
48957
|
-
sections.push(
|
|
48975
|
+
sections.push(DEFAULT_CO_AUTHORED_BY);
|
|
48958
48976
|
sections.push("```");
|
|
48959
48977
|
sections.push("");
|
|
48960
48978
|
}
|
|
48961
48979
|
if (commitFooter && includeCoAuthoredBy) {
|
|
48962
|
-
const footerText = typeof commitFooter === "string" ? commitFooter :
|
|
48980
|
+
const footerText = typeof commitFooter === "string" ? commitFooter : DEFAULT_COMMIT_FOOTER;
|
|
48963
48981
|
sections.push("**Example (both enabled):**");
|
|
48964
48982
|
sections.push("```bash");
|
|
48965
|
-
sections.push(
|
|
48983
|
+
sections.push(`git commit -m "{Commit Message}" -m "${footerText}" -m "${DEFAULT_CO_AUTHORED_BY}"`);
|
|
48966
48984
|
sections.push("```");
|
|
48967
48985
|
} else if (commitFooter) {
|
|
48968
|
-
const footerText = typeof commitFooter === "string" ? commitFooter :
|
|
48986
|
+
const footerText = typeof commitFooter === "string" ? commitFooter : DEFAULT_COMMIT_FOOTER;
|
|
48969
48987
|
sections.push("**Example:**");
|
|
48970
48988
|
sections.push("```bash");
|
|
48971
|
-
sections.push(
|
|
48989
|
+
sections.push(`git commit -m "{Commit Message}" -m "${footerText}"`);
|
|
48972
48990
|
sections.push("```");
|
|
48973
48991
|
} else if (includeCoAuthoredBy) {
|
|
48974
48992
|
sections.push("**Example:**");
|
|
48975
48993
|
sections.push("```bash");
|
|
48976
|
-
sections.push(
|
|
48994
|
+
sections.push(`git commit -m "{Commit Message}" -m "${DEFAULT_CO_AUTHORED_BY}"`);
|
|
48977
48995
|
sections.push("```");
|
|
48978
48996
|
}
|
|
48979
48997
|
return sections.join(`
|
|
@@ -94479,7 +94497,9 @@ function getConfiguredDefaultAgent(config4) {
|
|
|
94479
94497
|
if (typeof defaultAgent !== "string")
|
|
94480
94498
|
return;
|
|
94481
94499
|
const trimmedDefaultAgent = defaultAgent.trim();
|
|
94482
|
-
|
|
94500
|
+
if (trimmedDefaultAgent.length === 0)
|
|
94501
|
+
return;
|
|
94502
|
+
return AGENT_NAME_MAP[trimmedDefaultAgent.toLowerCase()] ?? AGENT_NAME_MAP[trimmedDefaultAgent] ?? trimmedDefaultAgent;
|
|
94483
94503
|
}
|
|
94484
94504
|
async function applyAgentConfig(params) {
|
|
94485
94505
|
const migratedDisabledAgents = (params.pluginConfig.disabled_agents ?? []).map((agent) => {
|
|
@@ -94540,14 +94560,14 @@ async function applyAgentConfig(params) {
|
|
|
94540
94560
|
const shouldDemotePlan = plannerEnabled && replacePlan;
|
|
94541
94561
|
const configuredDefaultAgent = getConfiguredDefaultAgent(params.config);
|
|
94542
94562
|
const configAgent = params.config.agent;
|
|
94543
|
-
if (isCoderEnabled && builtinAgents.
|
|
94563
|
+
if (isCoderEnabled && builtinAgents.coder) {
|
|
94544
94564
|
if (configuredDefaultAgent) {
|
|
94545
94565
|
params.config.default_agent = getAgentDisplayName(configuredDefaultAgent);
|
|
94546
94566
|
} else {
|
|
94547
94567
|
params.config.default_agent = getAgentDisplayName("coder");
|
|
94548
94568
|
}
|
|
94549
94569
|
const agentConfig = {
|
|
94550
|
-
coder: builtinAgents.
|
|
94570
|
+
coder: builtinAgents.coder
|
|
94551
94571
|
};
|
|
94552
94572
|
agentConfig["coder-junior"] = createCoderJuniorAgentWithOverrides(params.pluginConfig.agents?.["coder-junior"], undefined, useTaskSystem);
|
|
94553
94573
|
if (builderEnabled) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { isInsideTmux, getCurrentPaneId } from "./tmux-utils/environment";
|
|
1
|
+
export { isInsideTmux, isInsideTmuxWithEnv, getCurrentPaneId } from "./tmux-utils/environment";
|
|
2
2
|
export type { SplitDirection } from "./tmux-utils/environment";
|
|
3
3
|
export { isServerRunning, resetServerCheck } from "./tmux-utils/server-health";
|
|
4
4
|
export { getPaneDimensions } from "./tmux-utils/pane-dimensions";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drizzy-agent",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "DrizzyAgent - AI agent plugin for OpenCode",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -76,17 +76,17 @@
|
|
|
76
76
|
"typescript": "^5.7.3"
|
|
77
77
|
},
|
|
78
78
|
"optionalDependencies": {
|
|
79
|
-
"drizzy-agent-darwin-arm64": "0.1
|
|
80
|
-
"drizzy-agent-darwin-x64": "0.1
|
|
81
|
-
"drizzy-agent-darwin-x64-baseline": "0.1
|
|
82
|
-
"drizzy-agent-linux-arm64": "0.1
|
|
83
|
-
"drizzy-agent-linux-arm64-musl": "0.1
|
|
84
|
-
"drizzy-agent-linux-x64": "0.1
|
|
85
|
-
"drizzy-agent-linux-x64-baseline": "0.1
|
|
86
|
-
"drizzy-agent-linux-x64-musl": "0.1
|
|
87
|
-
"drizzy-agent-linux-x64-musl-baseline": "0.1
|
|
88
|
-
"drizzy-agent-windows-x64": "0.1
|
|
89
|
-
"drizzy-agent-windows-x64-baseline": "0.1
|
|
79
|
+
"drizzy-agent-darwin-arm64": "0.2.1",
|
|
80
|
+
"drizzy-agent-darwin-x64": "0.2.1",
|
|
81
|
+
"drizzy-agent-darwin-x64-baseline": "0.2.1",
|
|
82
|
+
"drizzy-agent-linux-arm64": "0.2.1",
|
|
83
|
+
"drizzy-agent-linux-arm64-musl": "0.2.1",
|
|
84
|
+
"drizzy-agent-linux-x64": "0.2.1",
|
|
85
|
+
"drizzy-agent-linux-x64-baseline": "0.2.1",
|
|
86
|
+
"drizzy-agent-linux-x64-musl": "0.2.1",
|
|
87
|
+
"drizzy-agent-linux-x64-musl-baseline": "0.2.1",
|
|
88
|
+
"drizzy-agent-windows-x64": "0.2.1",
|
|
89
|
+
"drizzy-agent-windows-x64-baseline": "0.2.1"
|
|
90
90
|
},
|
|
91
91
|
"overrides": {
|
|
92
92
|
"@opencode-ai/sdk": "^1.2.24"
|