@open-agent-toolkit/control-plane 0.1.25 → 0.1.27

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.
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAgB,MAAM,SAAS,CAAC;AAE1E,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CA0DvB;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,EAAE,CAAC,CA+E3B"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAGf,MAAM,SAAS,CAAC;AAEjB,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CA8DvB;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,EAAE,CAAC,CAmF3B"}
package/dist/project.js CHANGED
@@ -15,7 +15,8 @@ export async function getProjectState(projectPath) {
15
15
  scanUnprocessedReviews(projectPath),
16
16
  ]);
17
17
  const parsedState = parseStateFrontmatter(stateContent);
18
- const reviews = mergeReviews(parseReviewTable(planContent), reviewFiles, projectPath);
18
+ const activeReviewArtifacts = toActiveReviewArtifacts(reviewFiles, projectPath);
19
+ const reviews = mergeReviews(parseReviewTable(planContent), activeReviewArtifacts);
19
20
  const progress = parseTaskProgress(planContent, implementationContent);
20
21
  const projectStateWithoutRecommendation = {
21
22
  name: basename(projectPath),
@@ -30,6 +31,7 @@ export async function getProjectState(projectPath) {
30
31
  progress,
31
32
  artifacts,
32
33
  reviews,
34
+ activeReviewArtifacts,
33
35
  blockers: parsedState.blockers,
34
36
  hillCheckpoints: parsedState.hillCheckpoints,
35
37
  hillCompleted: parsedState.hillCompleted,
@@ -69,7 +71,8 @@ export async function listProjects(projectsRoot) {
69
71
  scanUnprocessedReviews(projectDir),
70
72
  ]);
71
73
  const parsedState = parseStateFrontmatter(stateContent);
72
- const reviews = mergeReviews(parseReviewTable(planContent), reviewFiles, projectDir);
74
+ const activeReviewArtifacts = toActiveReviewArtifacts(reviewFiles, projectDir);
75
+ const reviews = mergeReviews(parseReviewTable(planContent), activeReviewArtifacts);
73
76
  const progress = parseTaskProgress(planContent, implementationContent);
74
77
  const stateWithoutRecommendation = {
75
78
  name: basename(projectDir),
@@ -84,6 +87,7 @@ export async function listProjects(projectsRoot) {
84
87
  progress,
85
88
  artifacts,
86
89
  reviews,
90
+ activeReviewArtifacts,
87
91
  blockers: parsedState.blockers,
88
92
  hillCheckpoints: parsedState.hillCheckpoints,
89
93
  hillCompleted: parsedState.hillCompleted,
@@ -171,21 +175,27 @@ async function readOptionalFile(path) {
171
175
  throw error;
172
176
  }
173
177
  }
174
- function mergeReviews(tableReviews, reviewFiles, projectPath) {
178
+ function mergeReviews(tableReviews, activeReviewArtifacts) {
175
179
  const merged = [...tableReviews];
176
180
  const existingArtifacts = new Set(tableReviews.map((review) => review.artifact));
177
- for (const reviewFile of reviewFiles) {
178
- const relativeArtifact = relative(projectPath, reviewFile).replace(/\\/g, '/');
179
- if (existingArtifacts.has(relativeArtifact)) {
181
+ for (const reviewArtifact of activeReviewArtifacts) {
182
+ if (existingArtifacts.has(reviewArtifact.path)) {
180
183
  continue;
181
184
  }
182
185
  merged.push({
183
- scope: basename(reviewFile, '.md'),
186
+ scope: basename(reviewArtifact.path, '.md'),
184
187
  type: 'code',
185
188
  status: 'received',
186
189
  date: '-',
187
- artifact: relativeArtifact,
190
+ artifact: reviewArtifact.path,
188
191
  });
189
192
  }
190
193
  return merged;
191
194
  }
195
+ function toActiveReviewArtifacts(reviewFiles, projectPath) {
196
+ return reviewFiles.map((reviewFile) => ({
197
+ path: relative(projectPath, reviewFile).replace(/\\/g, '/'),
198
+ archived: false,
199
+ actionable: true,
200
+ }));
201
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/recommender/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,YAAY,EAEZ,mBAAmB,EAEpB,MAAM,UAAU,CAAC;AAuElB,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAC1C,mBAAmB,CAkCrB"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/recommender/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,YAAY,EACZ,mBAAmB,EAEpB,MAAM,UAAU,CAAC;AAuElB,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAC1C,mBAAmB,CAkCrB"}
@@ -98,7 +98,7 @@ function getPostImplementationRecommendation(state) {
98
98
  reason: 'Revision work remains incomplete',
99
99
  };
100
100
  }
101
- if (hasUnprocessedReviewFeedback(state)) {
101
+ if (hasActionableReviewArtifacts(state)) {
102
102
  return {
103
103
  skill: 'oat-project-review-receive',
104
104
  reason: 'Unprocessed review feedback exists',
@@ -121,8 +121,9 @@ function getPostImplementationRecommendation(state) {
121
121
  }
122
122
  if (finalReview.status !== 'passed') {
123
123
  return {
124
- skill: 'oat-project-review-receive',
125
- reason: 'Final review findings still need processing',
124
+ skill: 'oat-project-review-provide',
125
+ reason: 'Final review is not passed and no active review artifact exists',
126
+ context: 'code final',
126
127
  };
127
128
  }
128
129
  const summaryArtifact = state.artifacts.find((artifact) => artifact.type === 'summary');
@@ -146,18 +147,8 @@ function getPostImplementationRecommendation(state) {
146
147
  function hasIncompleteRevisionPhase(state) {
147
148
  return state.progress.phases.some((phase) => phase.isRevision && phase.completed < phase.total);
148
149
  }
149
- function hasUnprocessedReviewFeedback(state) {
150
- return state.reviews.some((review) => {
151
- if (review.scope === 'final' && review.type === 'code') {
152
- return false;
153
- }
154
- return !isProcessedReviewStatus(review);
155
- });
156
- }
157
- function isProcessedReviewStatus(review) {
158
- return (review.status === 'passed' ||
159
- review.status === 'fixes_added' ||
160
- review.status === 'fixes_completed');
150
+ function hasActionableReviewArtifacts(state) {
151
+ return state.activeReviewArtifacts.some((reviewArtifact) => reviewArtifact.actionable && !reviewArtifact.archived);
161
152
  }
162
153
  function getCurrentArtifact(state) {
163
154
  if (state.phase === 'decomposition') {
package/dist/types.d.ts CHANGED
@@ -34,6 +34,11 @@ export interface ReviewStatus {
34
34
  date: string;
35
35
  artifact: string;
36
36
  }
37
+ export interface ReviewArtifactStatus {
38
+ path: string;
39
+ archived: boolean;
40
+ actionable: boolean;
41
+ }
37
42
  export interface SkillRecommendation {
38
43
  skill: string;
39
44
  reason: string;
@@ -52,6 +57,7 @@ export interface ProjectState {
52
57
  progress: TaskProgress;
53
58
  artifacts: ArtifactStatus[];
54
59
  reviews: ReviewStatus[];
60
+ activeReviewArtifacts: ReviewArtifactStatus[];
55
61
  blockers: string[];
56
62
  hillCheckpoints: string[];
57
63
  hillCompleted: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/control-plane",
3
- "version": "0.1.25",
3
+ "version": "0.1.27",
4
4
  "private": false,
5
5
  "description": "Read-only OAT control-plane library for structured project state",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/control-plane",