@mestreyoda/fabrica 0.2.29 → 0.2.31
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.
|
@@ -44,6 +44,8 @@ The `.worktrees/` directory sits NEXT TO the repo folder (not inside it). This k
|
|
|
44
44
|
|
|
45
45
|
Never create or implement the project under `~/.openclaw/workspace/<slug>` unless the task message explicitly says that directory is the canonical repo path. If the repo already contains scaffolded files, do not re-initialize the project with `npm init`, `uv init`, `cargo init`, or a second skeleton generator — keep the existing stack and modify the scaffold inside the assigned worktree. Once you are in the assigned worktree, stay there for the rest of the task and do not switch back to the main checkout.
|
|
46
46
|
|
|
47
|
+
IMPORTANT: the shell `exec` tool is stateless and does NOT remember a previous `cd`. That means every shell command that depends on the repo location must explicitly prefix the worktree path, e.g. `cd "$WORKTREE" && <command>` or use absolute file paths. If `pwd` or tool output ever shows `~/.openclaw/workspace`, `~/`, or any directory outside the assigned worktree, stop, re-enter the worktree, and only continue with commands that include the explicit `cd "$WORKTREE" && ...` prefix.
|
|
48
|
+
|
|
47
49
|
### 2. Implement the changes
|
|
48
50
|
|
|
49
51
|
- Read the issue description and comments thoroughly
|
|
@@ -56,6 +56,8 @@ fi
|
|
|
56
56
|
|
|
57
57
|
**IMPORTANT:** Always verify you are on the correct branch before running tests. If you test on `main` and the feature code is not there, your results will be WRONG.
|
|
58
58
|
|
|
59
|
+
IMPORTANT: the shell `exec` tool is stateless and does NOT remember a previous `cd`. That means every repo-scoped command must explicitly include the worktree path, e.g. `cd "$WORKTREE" && <command>` or use absolute file paths inside the assigned worktree. If `pwd` or any command output shows `~/.openclaw/workspace`, `~/`, or any directory outside the assigned worktree, stop, re-enter the worktree, and rerun the command with an explicit `cd "$WORKTREE" && ...` prefix before trusting the result.
|
|
60
|
+
|
|
59
61
|
### 2. Run QA contract (MANDATORY)
|
|
60
62
|
|
|
61
63
|
```bash
|
package/dist/index.js
CHANGED
|
@@ -113905,8 +113905,8 @@ import fsSync from "node:fs";
|
|
|
113905
113905
|
import path5 from "node:path";
|
|
113906
113906
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
113907
113907
|
function getCurrentVersion() {
|
|
113908
|
-
if ("0.2.
|
|
113909
|
-
return "0.2.
|
|
113908
|
+
if ("0.2.31") {
|
|
113909
|
+
return "0.2.31";
|
|
113910
113910
|
}
|
|
113911
113911
|
try {
|
|
113912
113912
|
const pkgPath = path5.join(THIS_DIR, "..", "..", "package.json");
|
|
@@ -142992,6 +142992,78 @@ async function handleTelegramBootstrapDmMessage(ctx, rawConversationId, content)
|
|
|
142992
142992
|
));
|
|
142993
142993
|
return;
|
|
142994
142994
|
}
|
|
142995
|
+
if (existingSession?.status === "completed" && !sessionIsExpired && existingSession.triageReadyForDispatch === false && existingSession.issueId && existingSession.projectSlug && existingSession.triageErrors?.includes("dor_auth_requirements_missing") && content.trim().length >= 12) {
|
|
142996
|
+
const projects = await readProjects(workspaceDir).catch(() => null);
|
|
142997
|
+
const project = existingSession.projectSlug ? projects?.projects?.[existingSession.projectSlug] : null;
|
|
142998
|
+
if (project?.repo) {
|
|
142999
|
+
const { provider } = await createProvider({
|
|
143000
|
+
repo: project.repo,
|
|
143001
|
+
provider: project.provider,
|
|
143002
|
+
runCommand: ctx.runCommand,
|
|
143003
|
+
pluginConfig: ctx.pluginConfig,
|
|
143004
|
+
providerProfile: project.providerProfile
|
|
143005
|
+
});
|
|
143006
|
+
const issue2 = await provider.getIssue(existingSession.issueId).catch(() => null);
|
|
143007
|
+
const clarificationBlock = [
|
|
143008
|
+
"## Human Clarification",
|
|
143009
|
+
"",
|
|
143010
|
+
content.trim()
|
|
143011
|
+
].join("\n");
|
|
143012
|
+
const currentBody = issue2?.description ?? "";
|
|
143013
|
+
const nextBody = currentBody.includes("## Human Clarification") ? `${currentBody.trim()}
|
|
143014
|
+
|
|
143015
|
+
${content.trim()}` : `${currentBody.trim()}
|
|
143016
|
+
|
|
143017
|
+
${clarificationBlock}`.trim();
|
|
143018
|
+
await provider.editIssue(existingSession.issueId, { body: nextBody }).catch(() => {
|
|
143019
|
+
});
|
|
143020
|
+
await provider.addComment(existingSession.issueId, [
|
|
143021
|
+
"\u2705 Telegram clarification received; resuming automatic dispatch.",
|
|
143022
|
+
"",
|
|
143023
|
+
content.trim()
|
|
143024
|
+
].join("\n")).catch(() => {
|
|
143025
|
+
});
|
|
143026
|
+
await provider.removeLabels(existingSession.issueId, ["needs-human"]).catch(() => {
|
|
143027
|
+
});
|
|
143028
|
+
await provider.transitionLabel(existingSession.issueId, "Planning", "To Do").catch(() => {
|
|
143029
|
+
});
|
|
143030
|
+
await provider.addLabel(existingSession.issueId, "developer:medior").catch(() => {
|
|
143031
|
+
});
|
|
143032
|
+
const resumedSession = await upsertTelegramBootstrapSession(workspaceDir, {
|
|
143033
|
+
conversationId,
|
|
143034
|
+
rawIdea: `${existingSession.rawIdea}
|
|
143035
|
+
|
|
143036
|
+
Clarification:
|
|
143037
|
+
${content.trim()}`,
|
|
143038
|
+
projectName: existingSession.projectName ?? void 0,
|
|
143039
|
+
stackHint: existingSession.stackHint ?? void 0,
|
|
143040
|
+
repoUrl: existingSession.repoUrl ?? void 0,
|
|
143041
|
+
repoPath: existingSession.repoPath ?? void 0,
|
|
143042
|
+
sourceRoute: existingSession.sourceRoute,
|
|
143043
|
+
projectRoute: existingSession.projectRoute,
|
|
143044
|
+
projectSlug: existingSession.projectSlug,
|
|
143045
|
+
issueId: existingSession.issueId,
|
|
143046
|
+
issueUrl: existingSession.issueUrl,
|
|
143047
|
+
triageReadyForDispatch: true,
|
|
143048
|
+
triageErrors: [],
|
|
143049
|
+
projectChannelId: existingSession.projectChannelId,
|
|
143050
|
+
messageThreadId: existingSession.messageThreadId,
|
|
143051
|
+
language: existingSession.language,
|
|
143052
|
+
status: "dispatching",
|
|
143053
|
+
bootstrapStep: existingSession.bootstrapStep ?? "project_registered",
|
|
143054
|
+
projectRegisteredAt: existingSession.projectRegisteredAt,
|
|
143055
|
+
topicKickoffSentAt: existingSession.topicKickoffSentAt,
|
|
143056
|
+
projectTickedAt: existingSession.projectTickedAt,
|
|
143057
|
+
completionAckSentAt: existingSession.completionAckSentAt,
|
|
143058
|
+
ackSentAt: existingSession.ackSentAt,
|
|
143059
|
+
error: null
|
|
143060
|
+
});
|
|
143061
|
+
if (resumedSession) {
|
|
143062
|
+
await completeRegisteredBootstrap(ctx, workspaceDir, resumedSession);
|
|
143063
|
+
}
|
|
143064
|
+
return;
|
|
143065
|
+
}
|
|
143066
|
+
}
|
|
142995
143067
|
if (!isBootstrapCandidate(content)) {
|
|
142996
143068
|
if (isAmbiguousCandidate(content)) {
|
|
142997
143069
|
const classifyOwner = resolveBootstrapAttemptOwner(existingSession);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mestreyoda/fabrica",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.31",
|
|
4
4
|
"description": "Autonomous software engineering pipeline for OpenClaw. Turns ideas into deployed code via intake, dispatch, review, test, and merge.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|