@harness-engineering/cli 1.27.0 → 1.28.0

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 (108) hide show
  1. package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +17 -5
  2. package/dist/agents/skills/claude-code/harness-architecture-advisor/skill.yaml +1 -1
  3. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +4 -4
  4. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +1 -1
  5. package/dist/agents/skills/claude-code/harness-design-system/SKILL.md +6 -1
  6. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +4 -4
  7. package/dist/agents/skills/claude-code/harness-i18n-process/SKILL.md +2 -2
  8. package/dist/agents/skills/claude-code/harness-integration/SKILL.md +1 -1
  9. package/dist/agents/skills/claude-code/harness-knowledge-pipeline/SKILL.md +1 -0
  10. package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +1 -1
  11. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +3 -3
  12. package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +4 -3
  13. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +150 -10
  14. package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +2 -1
  15. package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +17 -5
  16. package/dist/agents/skills/codex/harness-architecture-advisor/skill.yaml +1 -1
  17. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +4 -4
  18. package/dist/agents/skills/codex/harness-code-review/SKILL.md +1 -1
  19. package/dist/agents/skills/codex/harness-design-system/SKILL.md +6 -1
  20. package/dist/agents/skills/codex/harness-execution/SKILL.md +4 -4
  21. package/dist/agents/skills/codex/harness-i18n-process/SKILL.md +2 -2
  22. package/dist/agents/skills/codex/harness-integration/SKILL.md +1 -1
  23. package/dist/agents/skills/codex/harness-knowledge-pipeline/SKILL.md +1 -0
  24. package/dist/agents/skills/codex/harness-onboarding/SKILL.md +1 -1
  25. package/dist/agents/skills/codex/harness-planning/SKILL.md +3 -3
  26. package/dist/agents/skills/codex/harness-roadmap/SKILL.md +4 -3
  27. package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +150 -10
  28. package/dist/agents/skills/codex/initialize-harness-project/skill.yaml +2 -1
  29. package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +17 -5
  30. package/dist/agents/skills/cursor/harness-architecture-advisor/skill.yaml +1 -1
  31. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +4 -4
  32. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +1 -1
  33. package/dist/agents/skills/cursor/harness-design-system/SKILL.md +6 -1
  34. package/dist/agents/skills/cursor/harness-execution/SKILL.md +4 -4
  35. package/dist/agents/skills/cursor/harness-i18n-process/SKILL.md +2 -2
  36. package/dist/agents/skills/cursor/harness-integration/SKILL.md +1 -1
  37. package/dist/agents/skills/cursor/harness-knowledge-pipeline/SKILL.md +1 -0
  38. package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +1 -1
  39. package/dist/agents/skills/cursor/harness-planning/SKILL.md +3 -3
  40. package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +4 -3
  41. package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +150 -10
  42. package/dist/agents/skills/cursor/initialize-harness-project/skill.yaml +2 -1
  43. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +17 -5
  44. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -1
  45. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +4 -4
  46. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +1 -1
  47. package/dist/agents/skills/gemini-cli/harness-design-system/SKILL.md +6 -1
  48. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +4 -4
  49. package/dist/agents/skills/gemini-cli/harness-i18n-process/SKILL.md +2 -2
  50. package/dist/agents/skills/gemini-cli/harness-integration/SKILL.md +1 -1
  51. package/dist/agents/skills/gemini-cli/harness-knowledge-pipeline/SKILL.md +1 -0
  52. package/dist/agents/skills/gemini-cli/harness-onboarding/SKILL.md +1 -1
  53. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +3 -3
  54. package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +4 -3
  55. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +150 -10
  56. package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +2 -1
  57. package/dist/{agents-md-2RN666DE.js → agents-md-76IEMV6O.js} +3 -3
  58. package/dist/{architecture-ZR33YKJB.js → architecture-5GVJRRUD.js} +4 -4
  59. package/dist/{assess-project-LLWWEQEV.js → assess-project-WDUFL7SO.js} +1 -1
  60. package/dist/bin/harness-mcp.js +15 -15
  61. package/dist/bin/harness.js +25 -25
  62. package/dist/{check-phase-gate-ZVG56NT2.js → check-phase-gate-QR3ONJYP.js} +4 -4
  63. package/dist/{chunk-FUS4OOGC.js → chunk-3WLXR23L.js} +1 -1
  64. package/dist/{chunk-IBTHD2UA.js → chunk-6JBJ5FSW.js} +2 -1
  65. package/dist/{chunk-C7RPQWBG.js → chunk-77OMOFZL.js} +1 -1
  66. package/dist/{chunk-YZH4I4JO.js → chunk-AJG2LCMA.js} +1 -1
  67. package/dist/{chunk-3AJW7VQ3.js → chunk-CS7K6ZQ3.js} +2 -2
  68. package/dist/{chunk-SDDQPMZK.js → chunk-D25P6763.js} +1 -1
  69. package/dist/{chunk-QTXW5TIS.js → chunk-DHGL3SF2.js} +10 -1
  70. package/dist/{chunk-CJYNZMOP.js → chunk-E7QD4YHA.js} +8 -8
  71. package/dist/{chunk-BO4AJZRE.js → chunk-H43UQY6B.js} +1 -1
  72. package/dist/{chunk-SDPHFDQS.js → chunk-ILVO6LZY.js} +1 -1
  73. package/dist/{chunk-BZZNYHRY.js → chunk-K5ZOBBQB.js} +9 -9
  74. package/dist/{chunk-A4ETL34H.js → chunk-KLE6FXWM.js} +23 -1
  75. package/dist/{chunk-F3Y64VNF.js → chunk-L4RURCSF.js} +6 -6
  76. package/dist/{chunk-EGRQHLDM.js → chunk-LINAFNIK.js} +5 -5
  77. package/dist/{chunk-TCMVZ3B7.js → chunk-OPOSSZJS.js} +98 -94
  78. package/dist/{chunk-L3Y7L4EG.js → chunk-OQS7KURX.js} +1 -1
  79. package/dist/{chunk-T7UZOJF4.js → chunk-QZ46CI6E.js} +9 -9
  80. package/dist/{chunk-MGPVA2EM.js → chunk-TFNQ72RF.js} +5 -5
  81. package/dist/{chunk-3XMOWLK3.js → chunk-USG7DV5N.js} +2 -2
  82. package/dist/{chunk-776JFSPK.js → chunk-VITLE3PS.js} +1 -1
  83. package/dist/{chunk-2FOLD76X.js → chunk-WPSM7WT6.js} +2 -2
  84. package/dist/{chunk-GAIOIINV.js → chunk-X7XQ3ELM.js} +108 -36
  85. package/dist/{chunk-EICASBYP.js → chunk-YZZVOT7I.js} +1 -1
  86. package/dist/{chunk-SA57FVGX.js → chunk-Z63IDQ7Y.js} +879 -416
  87. package/dist/{chunk-Q5DKIL46.js → chunk-Z7ZF2XDL.js} +3 -3
  88. package/dist/{ci-workflow-JFOL4YWW.js → ci-workflow-GYQXE5X4.js} +3 -3
  89. package/dist/{dist-CPKL5Y2R.js → dist-46VOJIG4.js} +2 -2
  90. package/dist/{dist-BZS2XRLG.js → dist-BP6E6QGG.js} +7 -1
  91. package/dist/{docs-FUTRJQHA.js → docs-CVQMSMQC.js} +4 -4
  92. package/dist/{engine-FB3HCNVT.js → engine-23PJMRHA.js} +3 -3
  93. package/dist/{entropy-FIEE4YDA.js → entropy-K2YTZFCP.js} +3 -3
  94. package/dist/{feedback-7EC4T6XG.js → feedback-6HP42GTK.js} +1 -1
  95. package/dist/{generate-agent-definitions-FOSFADNR.js → generate-agent-definitions-6RJKL6VW.js} +4 -4
  96. package/dist/{graph-loader-QEI7SYOQ.js → graph-loader-BI3OFFFS.js} +1 -1
  97. package/dist/index.d.ts +44 -1
  98. package/dist/index.js +25 -25
  99. package/dist/{loader-HXUOBTYA.js → loader-U2WEC3PZ.js} +3 -3
  100. package/dist/{mcp-ICXMTAD3.js → mcp-N6XVWPXJ.js} +15 -15
  101. package/dist/{performance-TYXBCTR7.js → performance-T3XAESWR.js} +4 -4
  102. package/dist/{review-pipeline-B4WPU6BQ.js → review-pipeline-HTC5HA5X.js} +3 -3
  103. package/dist/{runtime-HQQNOARD.js → runtime-UFXMNN3Q.js} +3 -3
  104. package/dist/{scan-TX55R6QS.js → scan-XRGMTO6K.js} +1 -1
  105. package/dist/{security-25VFLIAO.js → security-ROK5IFDA.js} +1 -1
  106. package/dist/{validate-EAVGKZQB.js → validate-IJHHQHT5.js} +4 -4
  107. package/dist/{validate-cross-check-SPL3H4O5.js → validate-cross-check-LUQYIA46.js} +3 -3
  108. package/package.json +6 -6
@@ -33,7 +33,7 @@ var createSelfReviewDefinition = {
33
33
  };
34
34
  async function handleCreateSelfReview(input) {
35
35
  try {
36
- const { parseDiff, createSelfReview } = await import("./dist-CPKL5Y2R.js");
36
+ const { parseDiff, createSelfReview } = await import("./dist-46VOJIG4.js");
37
37
  const parseResult = parseDiff(input.diff);
38
38
  if (!parseResult.ok) {
39
39
  return resultToMcpResponse(parseResult);
@@ -53,11 +53,11 @@ async function handleCreateSelfReview(input) {
53
53
  ...input.maxFileCount !== void 0 ? { maxChangedFiles: input.maxFileCount } : {}
54
54
  }
55
55
  };
56
- const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
56
+ const { loadGraphStore } = await import("./graph-loader-BI3OFFFS.js");
57
57
  const store = await loadGraphStore(projectPath);
58
58
  let graphData;
59
59
  if (store) {
60
- const { GraphFeedbackAdapter } = await import("./dist-BZS2XRLG.js");
60
+ const { GraphFeedbackAdapter } = await import("./dist-BP6E6QGG.js");
61
61
  const adapter = new GraphFeedbackAdapter(store);
62
62
  const changedFiles = parseResult.value.files.map((f) => f.path);
63
63
  const impact = adapter.computeImpactData(changedFiles);
@@ -119,7 +119,7 @@ var analyzeDiffDefinition = {
119
119
  };
120
120
  async function handleAnalyzeDiff(input) {
121
121
  try {
122
- const { parseDiff, analyzeDiff } = await import("./dist-CPKL5Y2R.js");
122
+ const { parseDiff, analyzeDiff } = await import("./dist-46VOJIG4.js");
123
123
  const parseResult = parseDiff(input.diff);
124
124
  if (!parseResult.ok) {
125
125
  return resultToMcpResponse(parseResult);
@@ -139,10 +139,10 @@ async function handleAnalyzeDiff(input) {
139
139
  let graphImpactData;
140
140
  if (input.path) {
141
141
  try {
142
- const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
142
+ const { loadGraphStore } = await import("./graph-loader-BI3OFFFS.js");
143
143
  const store = await loadGraphStore(sanitizePath(input.path));
144
144
  if (store) {
145
- const { GraphFeedbackAdapter } = await import("./dist-BZS2XRLG.js");
145
+ const { GraphFeedbackAdapter } = await import("./dist-BP6E6QGG.js");
146
146
  const adapter = new GraphFeedbackAdapter(store);
147
147
  const changedFiles = parseResult.value.files.map((f) => f.path);
148
148
  const impact = adapter.computeImpactData(changedFiles);
@@ -195,7 +195,7 @@ var requestPeerReviewDefinition = {
195
195
  };
196
196
  async function handleRequestPeerReview(input) {
197
197
  try {
198
- const { parseDiff, requestPeerReview } = await import("./dist-CPKL5Y2R.js");
198
+ const { parseDiff, requestPeerReview } = await import("./dist-46VOJIG4.js");
199
199
  const parseResult = parseDiff(input.diff);
200
200
  if (!parseResult.ok) {
201
201
  return resultToMcpResponse(parseResult);
@@ -206,10 +206,10 @@ async function handleRequestPeerReview(input) {
206
206
  ...input.context ? { metadata: { context: input.context } } : {}
207
207
  };
208
208
  try {
209
- const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
209
+ const { loadGraphStore } = await import("./graph-loader-BI3OFFFS.js");
210
210
  const store = await loadGraphStore(sanitizePath(input.path));
211
211
  if (store) {
212
- const { GraphFeedbackAdapter } = await import("./dist-BZS2XRLG.js");
212
+ const { GraphFeedbackAdapter } = await import("./dist-BP6E6QGG.js");
213
213
  const adapter = new GraphFeedbackAdapter(store);
214
214
  const changedFiles = parseResult.value.files.map((f) => f.path);
215
215
  const impactData = adapter.computeImpactData(changedFiles);
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ArchConfigSchema,
3
3
  init_dist
4
- } from "./chunk-IBTHD2UA.js";
4
+ } from "./chunk-6JBJ5FSW.js";
5
5
  import {
6
6
  Err,
7
7
  Ok
@@ -90,6 +90,12 @@ var PerformanceConfigSchema = z.object({
90
90
  sizeBudget: z.record(z.unknown()).optional()
91
91
  }).passthrough();
92
92
  var DesignConfigSchema = z.object({
93
+ /**
94
+ * Whether design-system tooling is enabled for this project. Set during init.
95
+ * Tri-state semantics: omit the field to indicate "not configured."
96
+ * Do NOT add a `.default(...)` — preserving "absent" is required by the spec.
97
+ */
98
+ enabled: z.boolean().optional(),
93
99
  /** Strictness of design system enforcement */
94
100
  strictness: z.enum(["strict", "standard", "permissive"]).default("standard"),
95
101
  /** Supported target platforms */
@@ -98,6 +104,14 @@ var DesignConfigSchema = z.object({
98
104
  tokenPath: z.string().optional(),
99
105
  /** Brief description of the intended aesthetic direction */
100
106
  aestheticIntent: z.string().optional()
107
+ }).superRefine((value, ctx) => {
108
+ if (value.enabled === true && (!value.platforms || value.platforms.length === 0)) {
109
+ ctx.addIssue({
110
+ code: z.ZodIssueCode.custom,
111
+ path: ["platforms"],
112
+ message: 'design.platforms must be a non-empty array of "web" | "mobile" when design.enabled is true'
113
+ });
114
+ }
101
115
  });
102
116
  var I18nCoverageConfigSchema = z.object({
103
117
  /** Minimum required translation percentage */
@@ -189,6 +203,12 @@ var RoadmapConfigSchema = z.object({
189
203
  /** External tracker sync settings */
190
204
  tracker: TrackerConfigSchema.optional()
191
205
  });
206
+ var KnowledgeConfigSchema = z.object({
207
+ /** Caller-supplied domain patterns (e.g. `["agents/<dir>"]`). Extends defaults. */
208
+ domainPatterns: z.array(z.string().regex(/^[\w.-]+\/<dir>$/)).optional().default([]),
209
+ /** Caller-supplied blocklisted path segments (e.g. `["scratch", "fixtures"]`). Extends defaults. */
210
+ domainBlocklist: z.array(z.string().min(1)).optional().default([])
211
+ });
192
212
  var HarnessConfigSchema = z.object({
193
213
  /** Configuration schema version */
194
214
  version: z.literal(1),
@@ -270,6 +290,8 @@ var HarnessConfigSchema = z.object({
270
290
  }).optional(),
271
291
  /** Roadmap sync and tracker integration settings */
272
292
  roadmap: RoadmapConfigSchema.optional(),
293
+ /** Knowledge-pipeline domain-inference settings */
294
+ knowledge: KnowledgeConfigSchema.optional(),
273
295
  /** Adoption telemetry settings */
274
296
  adoption: z.object({
275
297
  /** Whether adoption tracking is enabled (default: true) */
@@ -50,7 +50,7 @@ async function handleAssessProject(input) {
50
50
  let validateResult = null;
51
51
  if (checksToRun.has("validate")) {
52
52
  try {
53
- const { handleValidateProject } = await import("./validate-EAVGKZQB.js");
53
+ const { handleValidateProject } = await import("./validate-IJHHQHT5.js");
54
54
  const result = await handleValidateProject({ path: projectPath });
55
55
  const first = result.content[0];
56
56
  const parsed = first ? JSON.parse(first.text) : {};
@@ -75,7 +75,7 @@ async function handleAssessProject(input) {
75
75
  parallelChecks.push(
76
76
  (async () => {
77
77
  try {
78
- const { handleCheckDependencies } = await import("./architecture-ZR33YKJB.js");
78
+ const { handleCheckDependencies } = await import("./architecture-5GVJRRUD.js");
79
79
  const result = await handleCheckDependencies({ path: projectPath });
80
80
  const first = result.content[0];
81
81
  const parsed = first ? JSON.parse(first.text) : {};
@@ -102,7 +102,7 @@ async function handleAssessProject(input) {
102
102
  parallelChecks.push(
103
103
  (async () => {
104
104
  try {
105
- const { handleCheckDocs } = await import("./docs-FUTRJQHA.js");
105
+ const { handleCheckDocs } = await import("./docs-CVQMSMQC.js");
106
106
  const result = await handleCheckDocs({ path: projectPath, scope: "coverage" });
107
107
  const first = result.content[0];
108
108
  const parsed = first ? JSON.parse(first.text) : {};
@@ -129,7 +129,7 @@ async function handleAssessProject(input) {
129
129
  parallelChecks.push(
130
130
  (async () => {
131
131
  try {
132
- const { handleDetectEntropy } = await import("./entropy-FIEE4YDA.js");
132
+ const { handleDetectEntropy } = await import("./entropy-K2YTZFCP.js");
133
133
  const result = await handleDetectEntropy({ path: projectPath, type: "all" });
134
134
  const first = result.content[0];
135
135
  const parsed = first ? JSON.parse(first.text) : {};
@@ -156,7 +156,7 @@ async function handleAssessProject(input) {
156
156
  parallelChecks.push(
157
157
  (async () => {
158
158
  try {
159
- const { handleRunSecurityScan } = await import("./security-25VFLIAO.js");
159
+ const { handleRunSecurityScan } = await import("./security-ROK5IFDA.js");
160
160
  const result = await handleRunSecurityScan({ path: projectPath });
161
161
  const first = result.content[0];
162
162
  const parsed = first ? JSON.parse(first.text) : {};
@@ -188,7 +188,7 @@ async function handleAssessProject(input) {
188
188
  parallelChecks.push(
189
189
  (async () => {
190
190
  try {
191
- const { handleCheckPerformance } = await import("./performance-TYXBCTR7.js");
191
+ const { handleCheckPerformance } = await import("./performance-T3XAESWR.js");
192
192
  const result = await handleCheckPerformance({ path: projectPath });
193
193
  if ("isError" in result && result.isError) {
194
194
  const msg = result.content[0]?.text ?? "Performance check failed";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-W6Y7ZW3Y.js";
7
7
  import {
8
8
  init_dist
9
- } from "./chunk-IBTHD2UA.js";
9
+ } from "./chunk-6JBJ5FSW.js";
10
10
  import {
11
11
  Ok
12
12
  } from "./chunk-RL4VMEXL.js";
@@ -14,10 +14,10 @@ import {
14
14
  // src/mcp/tools/entropy.ts
15
15
  init_dist();
16
16
  async function loadEntropyGraphOptions(projectPath) {
17
- const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
17
+ const { loadGraphStore } = await import("./graph-loader-BI3OFFFS.js");
18
18
  const store = await loadGraphStore(projectPath);
19
19
  if (!store) return void 0;
20
- const { GraphEntropyAdapter } = await import("./dist-BZS2XRLG.js");
20
+ const { GraphEntropyAdapter } = await import("./dist-BP6E6QGG.js");
21
21
  const adapter = new GraphEntropyAdapter(store);
22
22
  const driftData = adapter.computeDriftData();
23
23
  const deadCodeData = adapter.computeDeadCodeData();
@@ -127,7 +127,7 @@ function buildSummaryResponse(report) {
127
127
  }
128
128
  async function handleDetectEntropy(input) {
129
129
  try {
130
- const { EntropyAnalyzer } = await import("./dist-CPKL5Y2R.js");
130
+ const { EntropyAnalyzer } = await import("./dist-46VOJIG4.js");
131
131
  const typeFilter = input.type ?? "all";
132
132
  const analyzer = new EntropyAnalyzer({
133
133
  rootDir: sanitizePath(input.path),
@@ -146,7 +146,7 @@ async function handleDetectEntropy(input) {
146
146
  return resultToMcpResponse(result);
147
147
  }
148
148
  if (!result.ok) return resultToMcpResponse(result);
149
- const { createFixes, applyFixes, generateSuggestions } = await import("./dist-CPKL5Y2R.js");
149
+ const { createFixes, applyFixes, generateSuggestions } = await import("./dist-46VOJIG4.js");
150
150
  const report = result.value;
151
151
  const deadCode = report.deadCode;
152
152
  const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;