@mcoda/core 0.1.15 → 0.1.17
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -1
- package/dist/services/execution/WorkOnTasksService.js +12 -1
- package/dist/services/shared/ProjectGuidance.d.ts +12 -0
- package/dist/services/shared/ProjectGuidance.d.ts.map +1 -1
- package/dist/services/shared/ProjectGuidance.js +56 -2
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export * from "./services/agents/GatewayAgentService.js";
|
|
|
27
27
|
export * from "./services/agents/GatewayHandoff.js";
|
|
28
28
|
export * from "./services/agents/AgentRatingService.js";
|
|
29
29
|
export * from "./services/agents/AgentRatingFormula.js";
|
|
30
|
+
export * from "./services/shared/ProjectGuidance.js";
|
|
30
31
|
export * from "./workspace/WorkspaceManager.js";
|
|
31
32
|
export * from "./services/system/SystemUpdateService.js";
|
|
32
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -27,5 +27,6 @@ export * from "./services/agents/GatewayAgentService.js";
|
|
|
27
27
|
export * from "./services/agents/GatewayHandoff.js";
|
|
28
28
|
export * from "./services/agents/AgentRatingService.js";
|
|
29
29
|
export * from "./services/agents/AgentRatingFormula.js";
|
|
30
|
+
export * from "./services/shared/ProjectGuidance.js";
|
|
30
31
|
export * from "./workspace/WorkspaceManager.js";
|
|
31
32
|
export * from "./services/system/SystemUpdateService.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkOnTasksService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/WorkOnTasksService.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAgD,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAuB,MAAM,WAAW,CAAC;AAEvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkOnTasksService.d.ts","sourceRoot":"","sources":["../../../src/services/execution/WorkOnTasksService.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import { QaTestCommandBuilder } from "./QaTestCommandBuilder.js";
|
|
|
15
15
|
import { RoutingService } from "../agents/RoutingService.js";
|
|
16
16
|
import { GATEWAY_HANDOFF_ENV_PATH } from "../agents/GatewayHandoff.js";
|
|
17
17
|
import { AgentRatingService } from "../agents/AgentRatingService.js";
|
|
18
|
-
import { isDocContextExcluded, loadProjectGuidance, normalizeDocType } from "../shared/ProjectGuidance.js";
|
|
18
|
+
import { ensureProjectGuidance, isDocContextExcluded, loadProjectGuidance, normalizeDocType, } from "../shared/ProjectGuidance.js";
|
|
19
19
|
import { AUTH_ERROR_REASON, isAuthErrorMessage } from "../shared/AuthErrors.js";
|
|
20
20
|
import { buildDocdexUsageGuidance } from "../shared/DocdexGuidance.js";
|
|
21
21
|
import { createTaskCommentSlug, formatTaskCommentBody } from "../tasks/TaskCommentFormatter.js";
|
|
@@ -3420,6 +3420,17 @@ export class WorkOnTasksService {
|
|
|
3420
3420
|
const results = [];
|
|
3421
3421
|
const taskSummaries = new Map();
|
|
3422
3422
|
const warnings = [...baseBranchWarnings, ...statusWarnings, ...runnerWarnings, ...selection.warnings];
|
|
3423
|
+
try {
|
|
3424
|
+
const guidance = await ensureProjectGuidance(this.workspace.workspaceRoot, {
|
|
3425
|
+
mcodaDir: this.workspace.mcodaDir,
|
|
3426
|
+
});
|
|
3427
|
+
if (guidance.status !== "existing") {
|
|
3428
|
+
warnings.push(`project_guidance_${guidance.status}: ${guidance.path}`);
|
|
3429
|
+
}
|
|
3430
|
+
}
|
|
3431
|
+
catch (error) {
|
|
3432
|
+
warnings.push(`project_guidance_bootstrap_failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
3433
|
+
}
|
|
3423
3434
|
if (missingTestsPolicy === "block_job") {
|
|
3424
3435
|
const missingHarnessTasks = await this.findMissingTestHarnessTasks(selection.ordered);
|
|
3425
3436
|
if (missingHarnessTasks.length > 0) {
|
|
@@ -2,6 +2,17 @@ export type ProjectGuidance = {
|
|
|
2
2
|
content: string;
|
|
3
3
|
source: string;
|
|
4
4
|
};
|
|
5
|
+
export type EnsureProjectGuidanceOptions = {
|
|
6
|
+
mcodaDir?: string;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
template?: string;
|
|
9
|
+
};
|
|
10
|
+
export type EnsureProjectGuidanceResult = {
|
|
11
|
+
path: string;
|
|
12
|
+
status: "created" | "existing" | "overwritten";
|
|
13
|
+
};
|
|
14
|
+
export declare const getDefaultProjectGuidanceTemplate: () => string;
|
|
15
|
+
export declare const resolveWorkspaceProjectGuidancePath: (workspaceRoot: string, mcodaDir?: string) => string;
|
|
5
16
|
export declare const isDocContextExcluded: (value: string | undefined, allowQaDocs?: boolean) => boolean;
|
|
6
17
|
export declare const normalizeDocType: (params: {
|
|
7
18
|
docType?: string;
|
|
@@ -14,4 +25,5 @@ export declare const normalizeDocType: (params: {
|
|
|
14
25
|
reason?: string;
|
|
15
26
|
};
|
|
16
27
|
export declare const loadProjectGuidance: (workspaceRoot: string, mcodaDir?: string) => Promise<ProjectGuidance | null>;
|
|
28
|
+
export declare const ensureProjectGuidance: (workspaceRoot: string, options?: EnsureProjectGuidanceOptions) => Promise<EnsureProjectGuidanceResult>;
|
|
17
29
|
//# sourceMappingURL=ProjectGuidance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGuidance.d.ts","sourceRoot":"","sources":["../../../src/services/shared/ProjectGuidance.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"ProjectGuidance.d.ts","sourceRoot":"","sources":["../../../src/services/shared/ProjectGuidance.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;CAChD,CAAC;AA8BF,eAAO,MAAM,iCAAiC,QAAO,MAA2C,CAAC;AAEjG,eAAO,MAAM,mCAAmC,GAAI,eAAe,MAAM,EAAE,WAAW,MAAM,KAAG,MAG9F,CAAC;AASF,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,GAAG,SAAS,EAAE,qBAAmB,KAAG,OAMrF,CAAC;AAoBF,eAAO,MAAM,gBAAgB,GAAI,QAAQ;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAe1D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,MAAM,EACrB,WAAW,MAAM,KAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAchC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,eAAe,MAAM,EACrB,UAAS,4BAAiC,KACzC,OAAO,CAAC,2BAA2B,CA2BrC,CAAC"}
|
|
@@ -5,10 +5,36 @@ const QA_DOC_PATTERN = /(^|[\\/])(qa|e2e)([-_/]|$)/i;
|
|
|
5
5
|
const MCODA_DOC_PATTERN = /(^|[\\/])\.mcoda([\\/]|$)/i;
|
|
6
6
|
const SDS_DOC_PATTERN = /(^|[\\/])docs[\\/]+sds([\\/]|$)/i;
|
|
7
7
|
const FRONTMATTER_BLOCK = /^---[\s\S]*?\n---/;
|
|
8
|
-
const
|
|
8
|
+
const DEFAULT_PROJECT_GUIDANCE_TEMPLATE = [
|
|
9
|
+
"# Project Guidance",
|
|
10
|
+
"",
|
|
11
|
+
"This file is loaded by mcoda agents before task execution.",
|
|
12
|
+
"Keep it concise and specific to this workspace.",
|
|
13
|
+
"",
|
|
14
|
+
"## Product Context",
|
|
15
|
+
"- Describe the product domain and user-facing goals.",
|
|
16
|
+
"",
|
|
17
|
+
"## Architecture Notes",
|
|
18
|
+
"- List important modules, boundaries, and integration points.",
|
|
19
|
+
"",
|
|
20
|
+
"## Coding Constraints",
|
|
21
|
+
"- Document non-negotiable implementation rules.",
|
|
22
|
+
"",
|
|
23
|
+
"## Testing Policy",
|
|
24
|
+
"- Define required test levels and critical regression checks.",
|
|
25
|
+
"",
|
|
26
|
+
"## Operational Notes",
|
|
27
|
+
"- Add deployment/runtime constraints, known caveats, and troubleshooting hints.",
|
|
28
|
+
"",
|
|
29
|
+
].join("\n");
|
|
30
|
+
export const getDefaultProjectGuidanceTemplate = () => DEFAULT_PROJECT_GUIDANCE_TEMPLATE;
|
|
31
|
+
export const resolveWorkspaceProjectGuidancePath = (workspaceRoot, mcodaDir) => {
|
|
9
32
|
const resolvedMcodaDir = mcodaDir ?? PathHelper.getWorkspaceDir(workspaceRoot);
|
|
33
|
+
return path.join(resolvedMcodaDir, "docs", "project-guidance.md");
|
|
34
|
+
};
|
|
35
|
+
const guidanceCandidates = (workspaceRoot, mcodaDir) => {
|
|
10
36
|
return [
|
|
11
|
-
|
|
37
|
+
resolveWorkspaceProjectGuidancePath(workspaceRoot, mcodaDir),
|
|
12
38
|
path.join(workspaceRoot, "docs", "project-guidance.md"),
|
|
13
39
|
];
|
|
14
40
|
};
|
|
@@ -76,3 +102,31 @@ export const loadProjectGuidance = async (workspaceRoot, mcodaDir) => {
|
|
|
76
102
|
console.warn(`[project-guidance] no project guidance found; searched: ${guidanceCandidates(workspaceRoot, mcodaDir).join(", ")}`);
|
|
77
103
|
return null;
|
|
78
104
|
};
|
|
105
|
+
export const ensureProjectGuidance = async (workspaceRoot, options = {}) => {
|
|
106
|
+
const targetPath = resolveWorkspaceProjectGuidancePath(workspaceRoot, options.mcodaDir);
|
|
107
|
+
await fs.mkdir(path.dirname(targetPath), { recursive: true });
|
|
108
|
+
const force = Boolean(options.force);
|
|
109
|
+
let existed = false;
|
|
110
|
+
try {
|
|
111
|
+
await fs.access(targetPath);
|
|
112
|
+
existed = true;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
existed = false;
|
|
116
|
+
}
|
|
117
|
+
if (existed && !force) {
|
|
118
|
+
try {
|
|
119
|
+
const existing = (await fs.readFile(targetPath, "utf8")).trim();
|
|
120
|
+
if (existing.length > 0) {
|
|
121
|
+
return { path: targetPath, status: "existing" };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// fall through and write template
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const template = (options.template ?? getDefaultProjectGuidanceTemplate()).trim();
|
|
129
|
+
const payload = template.length > 0 ? `${template}\n` : "";
|
|
130
|
+
await fs.writeFile(targetPath, payload, "utf8");
|
|
131
|
+
return { path: targetPath, status: existed ? "overwritten" : "created" };
|
|
132
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcoda/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"description": "Core services and APIs for the mcoda CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@apidevtools/swagger-parser": "^10.1.0",
|
|
34
34
|
"yaml": "^2.4.2",
|
|
35
|
-
"@mcoda/
|
|
36
|
-
"@mcoda/
|
|
37
|
-
"@mcoda/
|
|
38
|
-
"@mcoda/
|
|
39
|
-
"@mcoda/integrations": "0.1.
|
|
35
|
+
"@mcoda/shared": "0.1.17",
|
|
36
|
+
"@mcoda/agents": "0.1.17",
|
|
37
|
+
"@mcoda/generators": "0.1.17",
|
|
38
|
+
"@mcoda/db": "0.1.17",
|
|
39
|
+
"@mcoda/integrations": "0.1.17"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "tsc -p tsconfig.json",
|