harness-engineering-agent 0.2.3 → 0.3.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.
Files changed (32) hide show
  1. package/README.md +0 -0
  2. package/dist/config/config-merge.d.ts +2 -1
  3. package/dist/config/config-merge.d.ts.map +1 -1
  4. package/dist/config/config-merge.js +40 -10
  5. package/dist/config/config-merge.js.map +1 -1
  6. package/dist/config/global-config-init.d.ts +2 -0
  7. package/dist/config/global-config-init.d.ts.map +1 -0
  8. package/dist/config/global-config-init.js +85 -0
  9. package/dist/config/global-config-init.js.map +1 -0
  10. package/dist/config/global-config-path.d.ts +3 -0
  11. package/dist/config/global-config-path.d.ts.map +1 -0
  12. package/dist/config/global-config-path.js +10 -0
  13. package/dist/config/global-config-path.js.map +1 -0
  14. package/dist/config/harness-config.d.ts +2 -0
  15. package/dist/config/harness-config.d.ts.map +1 -1
  16. package/dist/config/harness-config.js +2 -0
  17. package/dist/config/harness-config.js.map +1 -1
  18. package/dist/config/index.d.ts +1 -1
  19. package/dist/config/index.d.ts.map +1 -1
  20. package/dist/config/index.js +1 -1
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/load-harness-config.d.ts.map +1 -1
  23. package/dist/config/load-harness-config.js +21 -3
  24. package/dist/config/load-harness-config.js.map +1 -1
  25. package/dist/plugin/harness-chat-hook.d.ts.map +1 -1
  26. package/dist/plugin/harness-chat-hook.js +2 -1
  27. package/dist/plugin/harness-chat-hook.js.map +1 -1
  28. package/dist/plugin/harness-chat-protocol.d.ts +2 -0
  29. package/dist/plugin/harness-chat-protocol.d.ts.map +1 -1
  30. package/dist/plugin/harness-chat-protocol.js +2 -58
  31. package/dist/plugin/harness-chat-protocol.js.map +1 -1
  32. package/package.json +1 -1
package/README.md CHANGED
File without changes
@@ -1,7 +1,8 @@
1
1
  import type { HarnessConfig, HarnessConfigInput } from "./config-schema.js";
2
2
  import type { MergedHarnessConfig } from "./config-types.js";
3
- export declare const mergeHarnessConfig: ({ defaults, projectConfig, runOverride, }: {
3
+ export declare const mergeHarnessConfig: ({ defaults, globalConfig, projectConfig, runOverride, }: {
4
4
  readonly defaults: HarnessConfig;
5
+ readonly globalConfig: HarnessConfigInput | undefined;
5
6
  readonly projectConfig: HarnessConfigInput | undefined;
6
7
  readonly runOverride: HarnessConfigInput | undefined;
7
8
  }) => MergedHarnessConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../src/config/config-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EACb,kBAAkB,EAEnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAwB,MAAM,mBAAmB,CAAA;AAElF,eAAO,MAAM,kBAAkB,GAAI,2CAIhC;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAA;CACrD,KAAG,mBA4DH,CAAA"}
1
+ {"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../src/config/config-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EACb,kBAAkB,EAEnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAwB,MAAM,mBAAmB,CAAA;AAElF,eAAO,MAAM,kBAAkB,GAAI,yDAKhC;IACD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAA;CACrD,KAAG,mBA+EH,CAAA"}
@@ -1,86 +1,113 @@
1
- export const mergeHarnessConfig = ({ defaults, projectConfig, runOverride, }) => {
1
+ export const mergeHarnessConfig = ({ defaults, globalConfig, projectConfig, runOverride, }) => {
2
+ const globalValue = globalConfig ?? {};
2
3
  const projectValue = projectConfig ?? {};
3
4
  const overrideValue = runOverride ?? {};
4
5
  return {
5
- schemaVersion: projectValue.schemaVersion ?? defaults.schemaVersion,
6
- enabled: overrideValue.enabled ?? projectValue.enabled ?? defaults.enabled,
6
+ schemaVersion: projectValue.schemaVersion ?? globalValue.schemaVersion ?? defaults.schemaVersion,
7
+ enabled: overrideValue.enabled ?? projectValue.enabled ?? globalValue.enabled ?? defaults.enabled,
7
8
  harness: mergeHarnessProfile({
8
9
  defaults: defaults.harness,
10
+ globalProfile: globalValue.harness,
9
11
  projectProfile: projectValue.harness,
10
12
  runOverride: overrideValue.harness,
11
13
  }),
12
14
  planner: mergeHarnessProfile({
13
15
  defaults: defaults.planner,
16
+ globalProfile: globalValue.planner,
14
17
  projectProfile: projectValue.planner,
15
18
  runOverride: overrideValue.planner,
16
19
  }),
17
20
  worker: mergeHarnessProfile({
18
21
  defaults: defaults.worker,
22
+ globalProfile: globalValue.worker,
19
23
  projectProfile: projectValue.worker,
20
24
  runOverride: overrideValue.worker,
21
25
  }),
22
26
  verifier: mergeHarnessProfile({
23
27
  defaults: defaults.verifier,
28
+ globalProfile: globalValue.verifier,
24
29
  projectProfile: projectValue.verifier,
25
30
  runOverride: overrideValue.verifier,
26
31
  }),
27
32
  acceptance: mergeHarnessProfile({
28
33
  defaults: defaults.acceptance,
34
+ globalProfile: globalValue.acceptance ?? globalValue.verifier,
29
35
  projectProfile: projectValue.acceptance ?? projectValue.verifier,
30
36
  runOverride: overrideValue.acceptance,
31
37
  }),
32
38
  failureAnalyzer: mergeHarnessProfile({
33
39
  defaults: defaults.failureAnalyzer,
40
+ globalProfile: globalValue.failureAnalyzer ?? globalValue.planner,
34
41
  projectProfile: projectValue.failureAnalyzer ?? projectValue.planner,
35
42
  runOverride: overrideValue.failureAnalyzer,
36
43
  }),
37
44
  executionCategories: mergeExecutionCategoryProfiles({
38
45
  defaults: defaults.executionCategories,
46
+ globalProfiles: globalValue.executionCategories,
39
47
  projectProfiles: projectValue.executionCategories,
40
48
  runOverride: overrideValue.executionCategories,
41
49
  }),
42
50
  complexityTiers: mergeComplexityTierProfiles({
43
51
  defaults: defaults.complexityTiers,
52
+ globalProfiles: globalValue.complexityTiers,
44
53
  projectProfiles: projectValue.complexityTiers,
45
54
  runOverride: overrideValue.complexityTiers,
46
55
  }),
47
56
  verificationCommands: overrideValue.verificationCommands ??
48
57
  projectValue.verificationCommands ??
58
+ globalValue.verificationCommands ??
49
59
  defaults.verificationCommands,
50
- maxRunAttempts: overrideValue.maxRunAttempts ?? projectValue.maxRunAttempts ?? defaults.maxRunAttempts,
51
- stateDirectory: overrideValue.stateDirectory ?? projectValue.stateDirectory ?? defaults.stateDirectory,
60
+ maxRunAttempts: overrideValue.maxRunAttempts ??
61
+ projectValue.maxRunAttempts ??
62
+ globalValue.maxRunAttempts ??
63
+ defaults.maxRunAttempts,
64
+ stateDirectory: overrideValue.stateDirectory ??
65
+ projectValue.stateDirectory ??
66
+ globalValue.stateDirectory ??
67
+ defaults.stateDirectory,
52
68
  allowNonGitWorkspace: overrideValue.allowNonGitWorkspace ??
53
69
  projectValue.allowNonGitWorkspace ??
70
+ globalValue.allowNonGitWorkspace ??
54
71
  defaults.allowNonGitWorkspace,
55
72
  };
56
73
  };
57
- const mergeHarnessProfile = ({ defaults, projectProfile, runOverride, }) => {
74
+ const mergeHarnessProfile = ({ defaults, globalProfile, projectProfile, runOverride, }) => {
58
75
  return {
59
- provider: runOverride?.provider ?? projectProfile?.provider ?? defaults.provider,
60
- model: runOverride?.model ?? projectProfile?.model ?? defaults.model,
61
- ...((runOverride?.skill ?? projectProfile?.skill ?? defaults.skill) === undefined
76
+ provider: runOverride?.provider ??
77
+ projectProfile?.provider ??
78
+ globalProfile?.provider ??
79
+ defaults.provider,
80
+ model: runOverride?.model ?? projectProfile?.model ?? globalProfile?.model ?? defaults.model,
81
+ ...((runOverride?.skill ?? projectProfile?.skill ?? globalProfile?.skill ?? defaults.skill) ===
82
+ undefined
62
83
  ? {}
63
- : { skill: runOverride?.skill ?? projectProfile?.skill ?? defaults.skill }),
84
+ : {
85
+ skill: runOverride?.skill ?? projectProfile?.skill ?? globalProfile?.skill ?? defaults.skill,
86
+ }),
64
87
  };
65
88
  };
66
89
  const mergeExecutionCategoryProfiles = (input) => ({
67
90
  quick: mergeHarnessProfile({
68
91
  defaults: input.defaults.quick,
92
+ globalProfile: input.globalProfiles?.quick,
69
93
  projectProfile: input.projectProfiles?.quick,
70
94
  runOverride: input.runOverride?.quick,
71
95
  }),
72
96
  deep: mergeHarnessProfile({
73
97
  defaults: input.defaults.deep,
98
+ globalProfile: input.globalProfiles?.deep,
74
99
  projectProfile: input.projectProfiles?.deep,
75
100
  runOverride: input.runOverride?.deep,
76
101
  }),
77
102
  "visual-engineering": mergeHarnessProfile({
78
103
  defaults: input.defaults["visual-engineering"],
104
+ globalProfile: input.globalProfiles?.["visual-engineering"],
79
105
  projectProfile: input.projectProfiles?.["visual-engineering"],
80
106
  runOverride: input.runOverride?.["visual-engineering"],
81
107
  }),
82
108
  ultrabrain: mergeHarnessProfile({
83
109
  defaults: input.defaults.ultrabrain,
110
+ globalProfile: input.globalProfiles?.ultrabrain,
84
111
  projectProfile: input.projectProfiles?.ultrabrain,
85
112
  runOverride: input.runOverride?.ultrabrain,
86
113
  }),
@@ -88,16 +115,19 @@ const mergeExecutionCategoryProfiles = (input) => ({
88
115
  const mergeComplexityTierProfiles = (input) => ({
89
116
  trivial: mergeHarnessProfile({
90
117
  defaults: input.defaults.trivial,
118
+ globalProfile: input.globalProfiles?.trivial,
91
119
  projectProfile: input.projectProfiles?.trivial,
92
120
  runOverride: input.runOverride?.trivial,
93
121
  }),
94
122
  standard: mergeHarnessProfile({
95
123
  defaults: input.defaults.standard,
124
+ globalProfile: input.globalProfiles?.standard,
96
125
  projectProfile: input.projectProfiles?.standard,
97
126
  runOverride: input.runOverride?.standard,
98
127
  }),
99
128
  complex: mergeHarnessProfile({
100
129
  defaults: input.defaults.complex,
130
+ globalProfile: input.globalProfiles?.complex,
101
131
  projectProfile: input.projectProfiles?.complex,
102
132
  runOverride: input.runOverride?.complex,
103
133
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"config-merge.js","sourceRoot":"","sources":["../../src/config/config-merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-merge.js","sourceRoot":"","sources":["../../src/config/config-merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ensureGlobalHarnessConfig: () => Promise<string>;
2
+ //# sourceMappingURL=global-config-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config-init.d.ts","sourceRoot":"","sources":["../../src/config/global-config-init.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB,QAAa,OAAO,CAAC,MAAM,CA0BhE,CAAA"}
@@ -0,0 +1,85 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { stringify as stringifyYaml } from "yaml";
4
+ import { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
5
+ import { resolveGlobalHarnessConfigPath } from "./global-config-path.js";
6
+ export const ensureGlobalHarnessConfig = async () => {
7
+ const configPath = resolveGlobalHarnessConfigPath();
8
+ try {
9
+ const { access } = await import("node:fs/promises");
10
+ await access(configPath);
11
+ return configPath;
12
+ }
13
+ catch {
14
+ // 文件不存在,需要创建
15
+ }
16
+ try {
17
+ const configDir = dirname(configPath);
18
+ await mkdir(configDir, { recursive: true });
19
+ const defaultYaml = serializeDefaultConfig(HARNESS_CONFIG_DEFAULTS);
20
+ await writeFile(configPath, defaultYaml, "utf8");
21
+ }
22
+ catch (error) {
23
+ // 初始化失败不阻塞启动,仅记录警告
24
+ console.warn(`[harness] Failed to initialize global config at ${configPath}:`, error instanceof Error ? error.message : error);
25
+ }
26
+ return configPath;
27
+ };
28
+ const serializeDefaultConfig = (defaults) => {
29
+ const header = `# Harness Engineering Agent - 全局配置
30
+ # 此文件由系统自动生成,用于管理所有项目的 harness 默认配置。
31
+ #
32
+ # 配置优先级(从低到高):
33
+ # 1. 此文件(全局默认)
34
+ # 2. .harness/config.yaml(项目级配置)
35
+ # 3. runOverride(运行时覆盖)
36
+ #
37
+ # 修改此文件后,重启 opencode 生效。
38
+
39
+ `;
40
+ const configObject = {
41
+ schemaVersion: defaults.schemaVersion,
42
+ enabled: defaults.enabled,
43
+ harness: {
44
+ provider: defaults.harness.provider,
45
+ model: defaults.harness.model,
46
+ },
47
+ planner: {
48
+ provider: defaults.planner.provider,
49
+ model: defaults.planner.model,
50
+ },
51
+ worker: {
52
+ provider: defaults.worker.provider,
53
+ model: defaults.worker.model,
54
+ },
55
+ verifier: {
56
+ provider: defaults.verifier.provider,
57
+ model: defaults.verifier.model,
58
+ },
59
+ acceptance: {
60
+ provider: defaults.acceptance.provider,
61
+ model: defaults.acceptance.model,
62
+ },
63
+ failureAnalyzer: {
64
+ provider: defaults.failureAnalyzer.provider,
65
+ model: defaults.failureAnalyzer.model,
66
+ },
67
+ executionCategories: {
68
+ quick: defaults.executionCategories.quick,
69
+ deep: defaults.executionCategories.deep,
70
+ "visual-engineering": defaults.executionCategories["visual-engineering"],
71
+ ultrabrain: defaults.executionCategories.ultrabrain,
72
+ },
73
+ complexityTiers: {
74
+ trivial: defaults.complexityTiers.trivial,
75
+ standard: defaults.complexityTiers.standard,
76
+ complex: defaults.complexityTiers.complex,
77
+ },
78
+ verificationCommands: defaults.verificationCommands,
79
+ maxRunAttempts: defaults.maxRunAttempts,
80
+ stateDirectory: defaults.stateDirectory,
81
+ allowNonGitWorkspace: defaults.allowNonGitWorkspace,
82
+ };
83
+ return header + stringifyYaml(configObject, { indent: 2 });
84
+ };
85
+ //# sourceMappingURL=global-config-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config-init.js","sourceRoot":"","sources":["../../src/config/global-config-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const GLOBAL_HARNESS_CONFIG_FILENAME = "harness-config.yaml";
2
+ export declare const resolveGlobalHarnessConfigPath: () => string;
3
+ //# sourceMappingURL=global-config-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config-path.d.ts","sourceRoot":"","sources":["../../src/config/global-config-path.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,8BAA8B,wBAAwB,CAAA;AAEnE,eAAO,MAAM,8BAA8B,QAAO,MAKjD,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ export const GLOBAL_HARNESS_CONFIG_FILENAME = "harness-config.yaml";
4
+ export const resolveGlobalHarnessConfigPath = () => {
5
+ // biome-ignore lint/complexity/useLiteralKeys: TypeScript requires index signature for process.env
6
+ const xdgConfigHome = process.env["XDG_CONFIG_HOME"];
7
+ const configBase = xdgConfigHome ? xdgConfigHome : join(homedir(), ".config");
8
+ return join(configBase, "opencode", GLOBAL_HARNESS_CONFIG_FILENAME);
9
+ };
10
+ //# sourceMappingURL=global-config-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config-path.js","sourceRoot":"","sources":["../../src/config/global-config-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,8BAA8B,GAAG,qBAAqB,CAAA;AAEnE,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE;IACzD,mGAAmG;IACnG,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7E,OAAO,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,8BAA8B,CAAC,CAAA;AACrE,CAAC,CAAA"}
@@ -2,6 +2,8 @@ export { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
2
2
  export { ConfigLoadError } from "./config-errors.js";
3
3
  export type { ComplexityTierProfile, ComplexityTierProfiles, ExecutionCategoryProfiles, HarnessAgentProfile, HarnessConfig, HarnessConfigInput, HarnessProfileInput, } from "./config-schema.js";
4
4
  export type { AvailableModelRegistry } from "./config-types.js";
5
+ export { ensureGlobalHarnessConfig } from "./global-config-init.js";
6
+ export { GLOBAL_HARNESS_CONFIG_FILENAME, resolveGlobalHarnessConfigPath, } from "./global-config-path.js";
5
7
  export { type LoadHarnessConfigOptions, loadHarnessConfig, } from "./load-harness-config.js";
6
8
  export { assessHarnessVersionCompatibility, HARNESS_COMPATIBILITY, type HarnessCompatibilityAssessment, type VersionCompatibilityIssue, type VersionCompatibilityStatus, } from "./opencode-compatibility.js";
7
9
  //# sourceMappingURL=harness-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-config.d.ts","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EACL,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,iCAAiC,EACjC,qBAAqB,EACrB,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"harness-config.d.ts","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,iCAAiC,EACjC,qBAAqB,EACrB,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAA"}
@@ -1,5 +1,7 @@
1
1
  export { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
2
2
  export { ConfigLoadError } from "./config-errors.js";
3
+ export { ensureGlobalHarnessConfig } from "./global-config-init.js";
4
+ export { GLOBAL_HARNESS_CONFIG_FILENAME, resolveGlobalHarnessConfigPath, } from "./global-config-path.js";
3
5
  export { loadHarnessConfig, } from "./load-harness-config.js";
4
6
  export { assessHarnessVersionCompatibility, HARNESS_COMPATIBILITY, } from "./opencode-compatibility.js";
5
7
  //# sourceMappingURL=harness-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-config.js","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAWpD,OAAO,EAEL,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,iCAAiC,EACjC,qBAAqB,GAItB,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"harness-config.js","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAWpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAEL,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,iCAAiC,EACjC,qBAAqB,GAItB,MAAM,6BAA6B,CAAA"}
@@ -1,2 +1,2 @@
1
- export { type AvailableModelRegistry, type ComplexityTierProfile, type ComplexityTierProfiles, ConfigLoadError, type ExecutionCategoryProfiles, HARNESS_CONFIG_DEFAULTS, type HarnessAgentProfile, type HarnessConfig, type HarnessConfigInput, type HarnessProfileInput, type LoadHarnessConfigOptions, loadHarnessConfig, } from "./harness-config.js";
1
+ export { type AvailableModelRegistry, type ComplexityTierProfile, type ComplexityTierProfiles, ConfigLoadError, type ExecutionCategoryProfiles, ensureGlobalHarnessConfig, GLOBAL_HARNESS_CONFIG_FILENAME, HARNESS_CONFIG_DEFAULTS, type HarnessAgentProfile, type HarnessConfig, type HarnessConfigInput, type HarnessProfileInput, type LoadHarnessConfigOptions, loadHarnessConfig, resolveGlobalHarnessConfigPath, } from "./harness-config.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,yBAAyB,EAC9B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,yBAAyB,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA"}
@@ -1,2 +1,2 @@
1
- export { ConfigLoadError, HARNESS_CONFIG_DEFAULTS, loadHarnessConfig, } from "./harness-config.js";
1
+ export { ConfigLoadError, ensureGlobalHarnessConfig, GLOBAL_HARNESS_CONFIG_FILENAME, HARNESS_CONFIG_DEFAULTS, loadHarnessConfig, resolveGlobalHarnessConfigPath, } from "./harness-config.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EAEf,uBAAuB,EAMvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EAEf,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EAMvB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"load-harness-config.d.ts","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAsB,MAAM,oBAAoB,CAAA;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,wBAAwB,KAChC,OAAO,CAAC,aAAa,CAmBvB,CAAA"}
1
+ {"version":3,"file":"load-harness-config.d.ts","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAsB,MAAM,oBAAoB,CAAA;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAG/D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,wBAAwB,KAChC,OAAO,CAAC,aAAa,CA4BvB,CAAA"}
@@ -4,12 +4,20 @@ import { ConfigLoadError } from "./config-errors.js";
4
4
  import { readHarnessConfigFile } from "./config-file.js";
5
5
  import { mergeHarnessConfig } from "./config-merge.js";
6
6
  import { parseHarnessConfig } from "./config-schema.js";
7
+ import { ensureGlobalHarnessConfig } from "./global-config-init.js";
7
8
  export const loadHarnessConfig = async (options) => {
8
- const sourcePath = join(options.projectRoot, ".harness", "config.yaml");
9
+ const projectConfigPath = join(options.projectRoot, ".harness", "config.yaml");
9
10
  try {
10
- const projectConfig = await readHarnessConfigFile(sourcePath);
11
+ // 确保全局配置存在(不存在则初始化)
12
+ const globalConfigPath = await ensureGlobalHarnessConfig();
13
+ // 读取全局配置和项目配置
14
+ const [globalConfig, projectConfig] = await Promise.all([
15
+ readGlobalConfigSafely(globalConfigPath),
16
+ readHarnessConfigFile(projectConfigPath),
17
+ ]);
11
18
  const mergedConfig = mergeHarnessConfig({
12
19
  defaults: HARNESS_CONFIG_DEFAULTS,
20
+ globalConfig,
13
21
  projectConfig,
14
22
  runOverride: options.runOverride,
15
23
  });
@@ -19,7 +27,17 @@ export const loadHarnessConfig = async (options) => {
19
27
  if (error instanceof ConfigLoadError) {
20
28
  throw error;
21
29
  }
22
- throw new ConfigLoadError(sourcePath, error);
30
+ throw new ConfigLoadError(projectConfigPath, error);
31
+ }
32
+ };
33
+ const readGlobalConfigSafely = async (configPath) => {
34
+ try {
35
+ return await readHarnessConfigFile(configPath);
36
+ }
37
+ catch (error) {
38
+ // 全局配置读取失败不阻塞启动,仅记录警告
39
+ console.warn(`[harness] Failed to read global config at ${configPath}:`, error instanceof Error ? error.message : error);
40
+ return undefined;
23
41
  }
24
42
  };
25
43
  //# sourceMappingURL=load-harness-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-harness-config.js","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAA+C,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AASpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAiC,EACT,EAAE;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;IAEvE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,QAAQ,EAAE,uBAAuB;YACjC,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAA;QAEF,OAAO,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,MAAM,KAAK,CAAA;QACb,CAAC;QAED,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"load-harness-config.js","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAA+C,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAQnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAiC,EACT,EAAE;IAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;IAE9E,IAAI,CAAC;QACH,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,MAAM,yBAAyB,EAAE,CAAA;QAE1D,cAAc;QACd,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,sBAAsB,CAAC,gBAAgB,CAAC;YACxC,qBAAqB,CAAC,iBAAiB,CAAC;SACzC,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,QAAQ,EAAE,uBAAuB;YACjC,YAAY;YACZ,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAA;QAEF,OAAO,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,MAAM,KAAK,CAAA;QACb,CAAC;QAED,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;IACrD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,sBAAsB,GAAG,KAAK,EAClC,UAAkB,EACuB,EAAE;IAC3C,IAAI,CAAC;QACH,OAAO,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,OAAO,CAAC,IAAI,CACV,6CAA6C,UAAU,GAAG,EAC1D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"harness-chat-hook.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-chat-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAYvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAGlE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACzC,CAAA;AAED,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,eAAO,MAAM,wBAAwB,GAAU,OAAO;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,sBAAsB,CAAA;IACtD,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;YACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;YAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SACxB,CAAA;QACD,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KACvB,CAAA;CACF,KAAG,OAAO,CAAC,IAAI,CAoDf,CAAA"}
1
+ {"version":3,"file":"harness-chat-hook.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-chat-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAavD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAGlE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACzC,CAAA;AAED,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEnB,eAAO,MAAM,wBAAwB,GAAU,OAAO;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,sBAAsB,CAAA;IACtD,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;YACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;YAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SACxB,CAAA;QACD,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KACvB,CAAA;CACF,KAAG,OAAO,CAAC,IAAI,CAqDf,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { HARNESS_PRIMARY_AGENT_NAME } from "../session/index.js";
2
2
  import { appendSyntheticTextPart, extractChatText, hasHarnessInternalResultPart, } from "./harness-chat-parts.js";
3
- import { createBackgroundAcknowledgement, createInternalCompletionMessage, createInternalFailureMessage, } from "./harness-chat-protocol.js";
3
+ import { createBackgroundAcknowledgement, createInternalCompletionMessage, createInternalFailureMessage, createPassthroughInstruction, } from "./harness-chat-protocol.js";
4
4
  import { shouldBypassHarnessCoordination } from "./harness-request-router.js";
5
5
  export const handleHarnessChatMessage = async (input) => {
6
6
  const agent = input.messageInput.agent ?? input.output.message.agent;
@@ -15,6 +15,7 @@ export const handleHarnessChatMessage = async (input) => {
15
15
  }
16
16
  const inputText = extractChatText(input.output.parts);
17
17
  if (shouldBypassHarnessCoordination(inputText)) {
18
+ appendProtocolPart(input.output, createPassthroughInstruction());
18
19
  return;
19
20
  }
20
21
  appendProtocolPart(input.output, createBackgroundAcknowledgement());
@@ -1 +1 @@
1
- {"version":3,"file":"harness-chat-hook.js","sourceRoot":"","sources":["../../src/plugin/harness-chat-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-chat-hook.js","sourceRoot":"","sources":["../../src/plugin/harness-chat-hook.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import type { HarnessCoordinatorResponse } from "./harness-coordinator.js";
2
2
  export declare const HARNESS_BACKGROUND_ACK_MARKER = "<!-- HARNESS_BACKGROUND_ACK -->";
3
3
  export declare const HARNESS_INTERNAL_RESULT_MARKER = "<!-- HARNESS_INTERNAL_RESULT -->";
4
+ export declare const HARNESS_PASSTHROUGH_MARKER = "<!-- HARNESS_PASSTHROUGH -->";
4
5
  export declare const createBackgroundBusyInstruction: (runId: string) => string;
5
6
  export declare const createBackgroundAcknowledgement: (response?: HarnessCoordinatorResponse) => string;
6
7
  export declare const createInternalCompletionMessage: (response: HarnessCoordinatorResponse) => string;
7
8
  export declare const createInternalFailureMessage: (message: string) => string;
9
+ export declare const createPassthroughInstruction: () => string;
8
10
  //# sourceMappingURL=harness-chat-protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-chat-protocol.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-chat-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAE1E,eAAO,MAAM,6BAA6B,oCAAoC,CAAA;AAC9E,eAAO,MAAM,8BAA8B,qCAAqC,CAAA;AA4BhF,eAAO,MAAM,+BAA+B,GAAI,OAAO,MAAM,KAAG,MAM5D,CAAA;AAEJ,eAAO,MAAM,+BAA+B,GAAI,WAAW,0BAA0B,KAAG,MAQhF,CAAA;AAER,eAAO,MAAM,+BAA+B,GAAI,UAAU,0BAA0B,KAAG,MAuCtF,CAAA;AAgED,eAAO,MAAM,4BAA4B,GAAI,SAAS,MAAM,KAAG,MAM3D,CAAA"}
1
+ {"version":3,"file":"harness-chat-protocol.d.ts","sourceRoot":"","sources":["../../src/plugin/harness-chat-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AAE1E,eAAO,MAAM,6BAA6B,oCAAoC,CAAA;AAC9E,eAAO,MAAM,8BAA8B,qCAAqC,CAAA;AAChF,eAAO,MAAM,0BAA0B,iCAAiC,CAAA;AA4BxE,eAAO,MAAM,+BAA+B,GAAI,OAAO,MAAM,KAAG,MAM5D,CAAA;AAEJ,eAAO,MAAM,+BAA+B,GAAI,WAAW,0BAA0B,KAAG,MAQhF,CAAA;AAER,eAAO,MAAM,+BAA+B,GAAI,UAAU,0BAA0B,KAAG,MA8BtF,CAAA;AAED,eAAO,MAAM,4BAA4B,GAAI,SAAS,MAAM,KAAG,MAM3D,CAAA;AAEJ,eAAO,MAAM,4BAA4B,QAAO,MACiD,CAAA"}
@@ -1,5 +1,6 @@
1
1
  export const HARNESS_BACKGROUND_ACK_MARKER = "<!-- HARNESS_BACKGROUND_ACK -->";
2
2
  export const HARNESS_INTERNAL_RESULT_MARKER = "<!-- HARNESS_INTERNAL_RESULT -->";
3
+ export const HARNESS_PASSTHROUGH_MARKER = "<!-- HARNESS_PASSTHROUGH -->";
3
4
  export const createBackgroundBusyInstruction = (runId) => createMarkedPayload(HARNESS_INTERNAL_RESULT_MARKER, {
4
5
  schemaVersion: "1.0.0",
5
6
  kind: "background-result",
@@ -41,71 +42,14 @@ export const createInternalCompletionMessage = (response) => {
41
42
  return `${baseMessage}${answerGuidance}`;
42
43
  }
43
44
  }
44
- if (response.kind === "run" && response.run.status === "env_blocked") {
45
- const { runId, governance } = response.run;
46
- const blockReason = governance.blockReason;
47
- if (blockReason !== null) {
48
- const envGuidance = createEnvBlockedGuidance(runId, blockReason);
49
- return `${baseMessage}${envGuidance}`;
50
- }
51
- }
52
45
  return baseMessage;
53
46
  };
54
- const createEnvBlockedGuidance = (runId, blockReason) => {
55
- if (blockReason.kind === "non_git_workspace") {
56
- const reason = blockReason;
57
- const lines = [
58
- "",
59
- "---",
60
- "**Run 被阻塞:工作目录不是 Git 仓库。**",
61
- "",
62
- `Run \`${runId}\` 当前状态为 \`env_blocked\`。`,
63
- "",
64
- "Harness 需要 Git 仓库来捕获变更基线、检测 scope drift、支持并行执行和提供回滚能力。",
65
- "",
66
- "**解决方案:**",
67
- "1. 切换到 Git 仓库目录后重新启动 OpenCode",
68
- `2. 或者取消当前 Run:\`cancel ${runId}\``,
69
- ];
70
- if (reason.detectedRepos.length > 0) {
71
- lines.push("");
72
- lines.push("**检测到的 Git 仓库:**");
73
- for (const repo of reason.detectedRepos) {
74
- lines.push(` - \`${repo}\``);
75
- }
76
- }
77
- return lines.join("\n");
78
- }
79
- if (blockReason.kind === "dirty_workspace") {
80
- const reason = blockReason;
81
- const lines = [
82
- "",
83
- "---",
84
- "**Run 被阻塞:工作目录有未提交的变更。**",
85
- "",
86
- `Run \`${runId}\` 当前状态为 \`env_blocked\`。`,
87
- "",
88
- "**变更文件:**",
89
- ];
90
- for (const path of reason.dirtyPaths.slice(0, 20)) {
91
- lines.push(` - \`${path}\``);
92
- }
93
- if (reason.dirtyPaths.length > 20) {
94
- lines.push(` - ... 还有 ${reason.dirtyPaths.length - 20} 个文件`);
95
- }
96
- lines.push("");
97
- lines.push("**解决方案:**");
98
- lines.push(`1. 提交或暂存变更后执行 \`resume ${runId}\``);
99
- lines.push(`2. 或者取消当前 Run:\`cancel ${runId}\``);
100
- return lines.join("\n");
101
- }
102
- return "";
103
- };
104
47
  export const createInternalFailureMessage = (message) => createMarkedPayload(HARNESS_INTERNAL_RESULT_MARKER, {
105
48
  schemaVersion: "1.0.0",
106
49
  kind: "background-result",
107
50
  status: "failed",
108
51
  message,
109
52
  });
53
+ export const createPassthroughInstruction = () => `${HARNESS_PASSTHROUGH_MARKER}\n这是普通查询,不是 Harness 生命周期操作。请直接按 OpenCode 正常能力回答,不要进入 Harness 协调。`;
110
54
  const createMarkedPayload = (marker, payload) => `${marker}\n${JSON.stringify(payload)}`;
111
55
  //# sourceMappingURL=harness-chat-protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-chat-protocol.js","sourceRoot":"","sources":["../../src/plugin/harness-chat-protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-chat-protocol.js","sourceRoot":"","sources":["../../src/plugin/harness-chat-protocol.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,6BAA6B,GAAG,iCAAiC,CAAA;AAC9E,MAAM,CAAC,MAAM,8BAA8B,GAAG,kCAAkC,CAAA;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,8BAA8B,CAAA;AA4BxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,KAAa,EAAU,EAAE,CACvE,mBAAmB,CAAC,8BAA8B,EAAE;IAClD,aAAa,EAAE,OAAO;IACtB,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,MAAM;IACd,KAAK;CACN,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,QAAqC,EAAU,EAAE,CAC/F,QAAQ,KAAK,SAAS;IACpB,CAAC,CAAC,6BAA6B;IAC/B,CAAC,CAAC,mBAAmB,CAAC,6BAA6B,EAAE;QACjD,aAAa,EAAE,OAAO;QACtB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,UAAU;QAClB,QAAQ;KACT,CAAC,CAAA;AAER,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,QAAoC,EAAU,EAAE;IAC9F,MAAM,WAAW,GAAG,mBAAmB,CAAC,8BAA8B,EAAE;QACtE,aAAa,EAAE,OAAO;QACtB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,WAAW;QACnB,QAAQ;KACT,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,wBAAwB,EAAE,CAAC;QAChF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAA;QAC1C,MAAM,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAA;QACxD,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG;gBACrB,EAAE;gBACF,KAAK;gBACL,uBAAuB;gBACvB,EAAE;gBACF,SAAS,KAAK,sCAAsC;gBACpD,EAAE;gBACF,oBAAoB;gBACpB,EAAE;gBACF,YAAY,KAAK,IAAI,kBAAkB,WAAW;gBAClD,EAAE;gBACF,6CAA6C;aAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACZ,OAAO,GAAG,WAAW,GAAG,cAAc,EAAE,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,OAAe,EAAU,EAAE,CACtE,mBAAmB,CAAC,8BAA8B,EAAE;IAClD,aAAa,EAAE,OAAO;IACtB,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,QAAQ;IAChB,OAAO;CACR,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAW,EAAE,CACvD,GAAG,0BAA0B,kEAAkE,CAAA;AAEjG,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,OAAiC,EAAU,EAAE,CACxF,GAAG,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harness-engineering-agent",
3
- "version": "0.2.3",
3
+ "version": "0.3.1",
4
4
  "description": "Minimal OpenCode harness plugin package.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",