vibe-coding-master 0.7.5 → 0.7.6
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/README.md +19 -16
- package/dist/backend/adapters/git-adapter.js +15 -0
- package/dist/backend/api/artifact-routes.js +3 -0
- package/dist/backend/api/harness-routes.js +50 -27
- package/dist/backend/api/runtime-state-routes.js +7 -3
- package/dist/backend/api/task-routes.js +36 -4
- package/dist/backend/api/translation-routes.js +11 -2
- package/dist/backend/api/translation-worker-routes.js +37 -9
- package/dist/backend/cli/install-vcm-harness.js +40 -2
- package/dist/backend/gateway/gateway-service.js +34 -17
- package/dist/backend/server.js +12 -3
- package/dist/backend/services/artifact-service.js +4 -1
- package/dist/backend/services/auto-memory-service.js +156 -81
- package/dist/backend/services/claude-hook-service.js +50 -35
- package/dist/backend/services/command-dispatcher.js +1 -1
- package/dist/backend/services/gate-review-service.js +44 -0
- package/dist/backend/services/harness-feedback-service.js +19 -8
- package/dist/backend/services/harness-service.js +112 -34
- package/dist/backend/services/message-service.js +39 -2
- package/dist/backend/services/round-service.js +10 -121
- package/dist/backend/services/runtime-coordinator-service.js +18 -10
- package/dist/backend/services/runtime-recovery-service.js +1 -2
- package/dist/backend/services/session-service.js +36 -98
- package/dist/backend/services/status-service.js +1 -0
- package/dist/backend/services/task-close-service.js +12 -27
- package/dist/backend/services/task-workflow-service.js +228 -0
- package/dist/backend/services/translation-worker-service.js +14 -7
- package/dist/backend/templates/handoff.js +40 -1
- package/dist/backend/templates/harness/architect-agent.js +67 -19
- package/dist/backend/templates/harness/claude-root.js +25 -29
- package/dist/backend/templates/harness/gate-review.js +26 -13
- package/dist/backend/templates/harness/harness-engineer-agent.js +8 -8
- package/dist/backend/templates/harness/memory-block.js +69 -0
- package/dist/backend/templates/harness/project-known-issues.js +1 -0
- package/dist/backend/templates/harness/project-manager-agent.js +211 -73
- package/dist/backend/templates/harness/role-memory.js +9 -12
- package/dist/backend/templates/harness/tester-agent.js +4 -1
- package/dist/backend/templates/harness/vcm-architecture-interview-skill.js +82 -0
- package/dist/backend/templates/harness/vcm-final-acceptance-skill.js +4 -3
- package/dist/backend/templates/harness/vcm-harness-bootstrap-skill.js +14 -3
- package/dist/backend/templates/harness/vcm-propose-memory-skill.js +2 -2
- package/dist/backend/templates/harness/vcm-route-message-skill.js +5 -0
- package/dist/backend/templates/harness/vcm-task-state-skill.js +110 -0
- package/dist/backend/templates/message-envelope.js +1 -1
- package/dist/shared/constants.js +0 -10
- package/dist/shared/types/workflow.js +1 -0
- package/dist/shared/validation/artifact-check.js +20 -0
- package/dist-frontend/assets/index-BO2AuF-q.js +97 -0
- package/dist-frontend/assets/index-C2etsYlK.css +32 -0
- package/dist-frontend/index.html +2 -2
- package/package.json +1 -1
- package/scripts/harness-tools/check-durable-docs +298 -0
- package/scripts/verify-package.mjs +1 -0
- package/dist-frontend/assets/index-DCb-S6Ls.css +0 -32
- package/dist-frontend/assets/index-NTlycxx9.js +0 -97
|
@@ -33,6 +33,7 @@ export function createGatewayService(deps) {
|
|
|
33
33
|
let qrLogin = null;
|
|
34
34
|
let larkRegistrationState = null;
|
|
35
35
|
let lastFailedTranslation = null;
|
|
36
|
+
let lastPmInputMessageId = null;
|
|
36
37
|
// Runtime channel-connection arming switch. Not persisted: every process starts
|
|
37
38
|
// disarmed. `ensurePolling` is the single chokepoint that reads it, so no
|
|
38
39
|
// self-heal path can connect the channel while this is false.
|
|
@@ -272,6 +273,7 @@ export function createGatewayService(deps) {
|
|
|
272
273
|
? await translatePlainTextForPm(target, text, update)
|
|
273
274
|
: text;
|
|
274
275
|
await submitTerminalInput(deps.runtime, target.session.id, englishText);
|
|
276
|
+
lastPmInputMessageId = update.messageId;
|
|
275
277
|
await reply(await deps.settings.loadSettings(), update.fromUserId, target.settings.translationEnabled
|
|
276
278
|
? formatGatewayInputTranslationSuccess(englishText)
|
|
277
279
|
: "已发送给 PM。");
|
|
@@ -634,18 +636,23 @@ export function createGatewayService(deps) {
|
|
|
634
636
|
const settings = await deps.settings.updateSettings({ translationEnabled: enabled });
|
|
635
637
|
return `Gateway translation ${settings.translationEnabled ? "on" : "off"}.`;
|
|
636
638
|
}
|
|
637
|
-
async function enableGatewayTranslationRuntime() {
|
|
639
|
+
async function enableGatewayTranslationRuntime(options = {}) {
|
|
638
640
|
const preferences = await deps.appSettings.getPreferences();
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
preferences.
|
|
641
|
+
const update = {};
|
|
642
|
+
if (!preferences.translationEnabled ||
|
|
643
|
+
!preferences.translationAutoSendEnabled ||
|
|
644
|
+
preferences.translationOutputMode !== "round-final") {
|
|
645
|
+
update.translationEnabled = true;
|
|
646
|
+
update.translationAutoSendEnabled = true;
|
|
647
|
+
update.translationOutputMode = "round-final";
|
|
648
|
+
}
|
|
649
|
+
if (options.disablePauseAlertSound && preferences.flowPauseAlerts !== false) {
|
|
650
|
+
update.flowPauseAlerts = false;
|
|
651
|
+
}
|
|
652
|
+
if (Object.keys(update).length === 0) {
|
|
642
653
|
return;
|
|
643
654
|
}
|
|
644
|
-
await deps.appSettings.updatePreferences(
|
|
645
|
-
translationEnabled: true,
|
|
646
|
-
translationAutoSendEnabled: true,
|
|
647
|
-
translationOutputMode: "round-final"
|
|
648
|
-
});
|
|
655
|
+
await deps.appSettings.updatePreferences(update);
|
|
649
656
|
}
|
|
650
657
|
async function startGateway() {
|
|
651
658
|
const settings = await deps.settings.loadSettings();
|
|
@@ -658,7 +665,7 @@ export function createGatewayService(deps) {
|
|
|
658
665
|
await enableGatewayTranslationRuntime();
|
|
659
666
|
return "Gateway is already on.";
|
|
660
667
|
}
|
|
661
|
-
await enableGatewayTranslationRuntime();
|
|
668
|
+
await enableGatewayTranslationRuntime({ disablePauseAlertSound: true });
|
|
662
669
|
const enabled = await syncDesktopContext(await deps.settings.updateSettings({
|
|
663
670
|
enabled: true,
|
|
664
671
|
translationEnabled: true
|
|
@@ -757,6 +764,14 @@ export function createGatewayService(deps) {
|
|
|
757
764
|
updatedAt: now()
|
|
758
765
|
});
|
|
759
766
|
}
|
|
767
|
+
async function exposeStatus(settings) {
|
|
768
|
+
const preferences = await deps.appSettings.getPreferences();
|
|
769
|
+
return {
|
|
770
|
+
...deps.settings.expose(settings, isRunning(), connectionEnabled),
|
|
771
|
+
lastPmInputMessageId,
|
|
772
|
+
pauseAlertSoundEnabled: preferences.flowPauseAlerts
|
|
773
|
+
};
|
|
774
|
+
}
|
|
760
775
|
async function statusText(settings) {
|
|
761
776
|
const synced = await syncDesktopContext(settings);
|
|
762
777
|
const project = await deps.projectService.getCurrentProject();
|
|
@@ -785,9 +800,11 @@ export function createGatewayService(deps) {
|
|
|
785
800
|
await enableGatewayTranslationRuntime();
|
|
786
801
|
}
|
|
787
802
|
await ensurePolling();
|
|
788
|
-
return
|
|
803
|
+
return exposeStatus(settings);
|
|
789
804
|
},
|
|
790
805
|
async updateSettings(input) {
|
|
806
|
+
const currentSettings = await deps.settings.loadSettings();
|
|
807
|
+
const enablingGateway = input.enabled === true && !currentSettings.enabled;
|
|
791
808
|
const gatewayStartInput = input.enabled === true
|
|
792
809
|
? { ...input, translationEnabled: true }
|
|
793
810
|
: input;
|
|
@@ -798,7 +815,7 @@ export function createGatewayService(deps) {
|
|
|
798
815
|
}
|
|
799
816
|
: gatewayStartInput;
|
|
800
817
|
if (input.enabled === true) {
|
|
801
|
-
await enableGatewayTranslationRuntime();
|
|
818
|
+
await enableGatewayTranslationRuntime({ disablePauseAlertSound: enablingGateway });
|
|
802
819
|
}
|
|
803
820
|
let settings = await deps.settings.updateSettings(updateInput);
|
|
804
821
|
if (settings.enabled) {
|
|
@@ -810,7 +827,7 @@ export function createGatewayService(deps) {
|
|
|
810
827
|
else {
|
|
811
828
|
await stopPolling();
|
|
812
829
|
}
|
|
813
|
-
return
|
|
830
|
+
return exposeStatus(settings);
|
|
814
831
|
},
|
|
815
832
|
async resetBinding() {
|
|
816
833
|
await stopPolling();
|
|
@@ -821,7 +838,7 @@ export function createGatewayService(deps) {
|
|
|
821
838
|
qrLogin = null;
|
|
822
839
|
larkRegistrationState = null;
|
|
823
840
|
const settings = await deps.settings.resetBinding();
|
|
824
|
-
return
|
|
841
|
+
return exposeStatus(settings);
|
|
825
842
|
},
|
|
826
843
|
async setConnectionEnabled(enabled) {
|
|
827
844
|
connectionEnabled = enabled;
|
|
@@ -834,7 +851,7 @@ export function createGatewayService(deps) {
|
|
|
834
851
|
await stopPolling();
|
|
835
852
|
}
|
|
836
853
|
const settings = await deps.settings.loadSettings();
|
|
837
|
-
return
|
|
854
|
+
return exposeStatus(settings);
|
|
838
855
|
},
|
|
839
856
|
async startQrLogin() {
|
|
840
857
|
const settings = await deps.settings.loadSettings();
|
|
@@ -1002,7 +1019,7 @@ export function createGatewayService(deps) {
|
|
|
1002
1019
|
});
|
|
1003
1020
|
larkRegistrationState = null;
|
|
1004
1021
|
await ensurePolling();
|
|
1005
|
-
const status =
|
|
1022
|
+
const status = await exposeStatus(settings);
|
|
1006
1023
|
return {
|
|
1007
1024
|
status: "confirmed",
|
|
1008
1025
|
appIdConfigured: Boolean(result.appId),
|
|
@@ -1066,7 +1083,7 @@ export function createGatewayService(deps) {
|
|
|
1066
1083
|
});
|
|
1067
1084
|
larkRegistrationState = null;
|
|
1068
1085
|
await ensurePolling();
|
|
1069
|
-
const status =
|
|
1086
|
+
const status = await exposeStatus(settings);
|
|
1070
1087
|
return {
|
|
1071
1088
|
status: "confirmed",
|
|
1072
1089
|
appIdConfigured: true,
|
package/dist/backend/server.js
CHANGED
|
@@ -36,6 +36,7 @@ import { createRuntimeRecoveryService } from "./services/runtime-recovery-servic
|
|
|
36
36
|
import { createStatusService } from "./services/status-service.js";
|
|
37
37
|
import { createTaskService } from "./services/task-service.js";
|
|
38
38
|
import { createTaskCloseService } from "./services/task-close-service.js";
|
|
39
|
+
import { createTaskWorkflowService } from "./services/task-workflow-service.js";
|
|
39
40
|
import { createTaskLaunchService } from "./services/task-launch-service.js";
|
|
40
41
|
import { createTerminalInterruptService } from "./services/terminal-interrupt-service.js";
|
|
41
42
|
import { createTranslationService } from "./services/translation-service.js";
|
|
@@ -118,7 +119,8 @@ export async function createServer(deps, options = {}) {
|
|
|
118
119
|
statusService: deps.statusService,
|
|
119
120
|
messageService: deps.messageService,
|
|
120
121
|
taskLaunchService: deps.taskLaunchService,
|
|
121
|
-
roundService: deps.roundService
|
|
122
|
+
roundService: deps.roundService,
|
|
123
|
+
taskWorkflowService: deps.taskWorkflowService
|
|
122
124
|
});
|
|
123
125
|
registerSessionRoutes(app, {
|
|
124
126
|
projectService: deps.projectService,
|
|
@@ -205,6 +207,7 @@ export function createDefaultServerDeps(options = {}) {
|
|
|
205
207
|
const artifactService = createArtifactService(fs);
|
|
206
208
|
const projectService = createProjectService({ fs, git, appSettings });
|
|
207
209
|
const taskService = createTaskService({ fs, git, artifactService, projectService });
|
|
210
|
+
const taskWorkflowService = createTaskWorkflowService({ fs });
|
|
208
211
|
const sessionService = createSessionService({
|
|
209
212
|
fs,
|
|
210
213
|
runtime,
|
|
@@ -213,6 +216,7 @@ export function createDefaultServerDeps(options = {}) {
|
|
|
213
216
|
artifactService,
|
|
214
217
|
projectService,
|
|
215
218
|
taskService,
|
|
219
|
+
taskWorkflowService,
|
|
216
220
|
apiUrl: options.apiUrl
|
|
217
221
|
});
|
|
218
222
|
const harnessService = createHarnessService({
|
|
@@ -230,6 +234,7 @@ export function createDefaultServerDeps(options = {}) {
|
|
|
230
234
|
});
|
|
231
235
|
const autoMemoryService = createAutoMemoryService({
|
|
232
236
|
fs,
|
|
237
|
+
git,
|
|
233
238
|
runtime,
|
|
234
239
|
sessionService,
|
|
235
240
|
appSettings,
|
|
@@ -252,7 +257,8 @@ export function createDefaultServerDeps(options = {}) {
|
|
|
252
257
|
fs,
|
|
253
258
|
runtime,
|
|
254
259
|
sessionService,
|
|
255
|
-
taskService
|
|
260
|
+
taskService,
|
|
261
|
+
taskWorkflowService
|
|
256
262
|
});
|
|
257
263
|
const taskLaunchService = createTaskLaunchService({
|
|
258
264
|
projectService,
|
|
@@ -312,7 +318,9 @@ export function createDefaultServerDeps(options = {}) {
|
|
|
312
318
|
taskService,
|
|
313
319
|
sessionService,
|
|
314
320
|
translationService,
|
|
315
|
-
roundService
|
|
321
|
+
roundService,
|
|
322
|
+
projectService,
|
|
323
|
+
taskWorkflowService
|
|
316
324
|
});
|
|
317
325
|
const gatewayService = createGatewayService({
|
|
318
326
|
fs,
|
|
@@ -391,6 +399,7 @@ export function createDefaultServerDeps(options = {}) {
|
|
|
391
399
|
projectService,
|
|
392
400
|
taskService,
|
|
393
401
|
taskCloseService,
|
|
402
|
+
taskWorkflowService,
|
|
394
403
|
sessionService,
|
|
395
404
|
artifactService,
|
|
396
405
|
harnessService,
|
|
@@ -3,9 +3,10 @@ import { DISPATCHABLE_ROLES } from "../../shared/constants.js";
|
|
|
3
3
|
import { checkMarkdownArtifact } from "../../shared/validation/artifact-check.js";
|
|
4
4
|
import { VcmError } from "../errors.js";
|
|
5
5
|
import { resolveRepoPath } from "../adapters/filesystem.js";
|
|
6
|
-
import { renderArchitecturePlanTemplate, renderArchitectDebugTemplate, renderCoderCompletionTemplate, renderDocsSyncReportTemplate, renderFinalAcceptanceTemplate, renderKnownIssuesTemplate, renderMessageRouteTemplate, renderTestReportTemplate } from "../templates/handoff.js";
|
|
6
|
+
import { renderArchitectureBriefTemplate, renderArchitecturePlanTemplate, renderArchitectDebugTemplate, renderCoderCompletionTemplate, renderDocsSyncReportTemplate, renderFinalAcceptanceTemplate, renderKnownIssuesTemplate, renderMessageRouteTemplate, renderTestReportTemplate } from "../templates/handoff.js";
|
|
7
7
|
import { renderRoleCommandTemplate } from "../templates/role-command.js";
|
|
8
8
|
const ARTIFACT_PATH_KEYS = [
|
|
9
|
+
["architecture-brief", "architectureBriefPath"],
|
|
9
10
|
["architecture-plan", "architecturePlanPath"],
|
|
10
11
|
["known-issues", "knownIssuesPath"],
|
|
11
12
|
["test-report", "testReportPath"],
|
|
@@ -36,6 +37,7 @@ export function createArtifactService(fs) {
|
|
|
36
37
|
tester: path.posix.join(roleCommandsDir, "tester.md")
|
|
37
38
|
},
|
|
38
39
|
messageRoutePaths: getDefaultMessageRoutePaths(messagesDir),
|
|
40
|
+
architectureBriefPath: path.posix.join(handoffDir, "architecture-brief.md"),
|
|
39
41
|
architecturePlanPath: path.posix.join(handoffDir, "architecture-plan.md"),
|
|
40
42
|
knownIssuesPath: path.posix.join(handoffDir, "known-issues.md"),
|
|
41
43
|
testReportPath: path.posix.join(handoffDir, "test-report.md"),
|
|
@@ -59,6 +61,7 @@ export function createArtifactService(fs) {
|
|
|
59
61
|
[paths.roleCommandPaths.architect, renderRoleCommandTemplate(input.taskSlug, "architect", input.repoRoot, input.branch)],
|
|
60
62
|
[paths.roleCommandPaths.coder, renderRoleCommandTemplate(input.taskSlug, "coder", input.repoRoot, input.branch)],
|
|
61
63
|
[paths.roleCommandPaths.tester, renderRoleCommandTemplate(input.taskSlug, "tester", input.repoRoot, input.branch)],
|
|
64
|
+
[paths.architectureBriefPath, renderArchitectureBriefTemplate(input.taskSlug)],
|
|
62
65
|
[paths.architecturePlanPath, renderArchitecturePlanTemplate(input.taskSlug)],
|
|
63
66
|
[paths.knownIssuesPath, renderKnownIssuesTemplate(input.taskSlug)],
|
|
64
67
|
[path.posix.join(paths.handoffDir, "coder-completion.md"), renderCoderCompletionTemplate(input.taskSlug)],
|