patchwork-os 0.2.0-beta.2 → 0.2.0-beta.3
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.bridge.md +5 -5
- package/README.md +156 -12
- package/dist/activityLog.d.ts +6 -0
- package/dist/activityLog.js +8 -0
- package/dist/activityLog.js.map +1 -1
- package/dist/analyticsPrefs.d.ts +35 -2
- package/dist/analyticsPrefs.js +120 -21
- package/dist/analyticsPrefs.js.map +1 -1
- package/dist/analyticsSend.js +5 -1
- package/dist/analyticsSend.js.map +1 -1
- package/dist/bridge.d.ts +2 -0
- package/dist/bridge.js +111 -7
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeLockDiscovery.d.ts +27 -1
- package/dist/bridgeLockDiscovery.js +37 -11
- package/dist/bridgeLockDiscovery.js.map +1 -1
- package/dist/commands/patchworkInit.d.ts +5 -0
- package/dist/commands/patchworkInit.js +86 -7
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +51 -0
- package/dist/commands/recipe.js +353 -2
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.js +6 -3
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/commands/task.js +2 -2
- package/dist/commands/task.js.map +1 -1
- package/dist/config.d.ts +9 -2
- package/dist/config.js +35 -17
- package/dist/config.js.map +1 -1
- package/dist/connectors/tokenStorage.js +46 -10
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/featureFlags.d.ts +76 -0
- package/dist/featureFlags.js +166 -2
- package/dist/featureFlags.js.map +1 -1
- package/dist/index.js +765 -69
- package/dist/index.js.map +1 -1
- package/dist/lockfile.js +4 -1
- package/dist/lockfile.js.map +1 -1
- package/dist/patchworkConfig.js +5 -0
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/recipeOrchestration.js +35 -1
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +36 -0
- package/dist/recipeRoutes.js +231 -32
- package/dist/recipeRoutes.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +25 -5
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/chainedRunner.js +16 -2
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/connectorPreflight.d.ts +53 -0
- package/dist/recipes/connectorPreflight.js +79 -0
- package/dist/recipes/connectorPreflight.js.map +1 -0
- package/dist/recipes/githubInstallSource.d.ts +62 -0
- package/dist/recipes/githubInstallSource.js +125 -0
- package/dist/recipes/githubInstallSource.js.map +1 -0
- package/dist/recipes/haltCategory.d.ts +80 -0
- package/dist/recipes/haltCategory.js +125 -0
- package/dist/recipes/haltCategory.js.map +1 -0
- package/dist/recipes/idempotencyKey.d.ts +126 -0
- package/dist/recipes/idempotencyKey.js +298 -0
- package/dist/recipes/idempotencyKey.js.map +1 -0
- package/dist/recipes/judgeSummary.d.ts +50 -0
- package/dist/recipes/judgeSummary.js +47 -0
- package/dist/recipes/judgeSummary.js.map +1 -0
- package/dist/recipes/judgeVerdict.d.ts +48 -0
- package/dist/recipes/judgeVerdict.js +174 -0
- package/dist/recipes/judgeVerdict.js.map +1 -0
- package/dist/recipes/migrations/index.d.ts +9 -0
- package/dist/recipes/migrations/index.js +133 -0
- package/dist/recipes/migrations/index.js.map +1 -1
- package/dist/recipes/runBudget.d.ts +70 -0
- package/dist/recipes/runBudget.js +109 -0
- package/dist/recipes/runBudget.js.map +1 -0
- package/dist/recipes/scheduler.js +1 -1
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +30 -0
- package/dist/recipes/toolRegistry.js +19 -0
- package/dist/recipes/toolRegistry.js.map +1 -1
- package/dist/recipes/tools/http.d.ts +10 -0
- package/dist/recipes/tools/http.js +176 -0
- package/dist/recipes/tools/http.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +1 -0
- package/dist/recipes/tools/index.js +1 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/validation.js +1 -1
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +71 -7
- package/dist/recipes/yamlRunner.js +156 -22
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/runLog.d.ts +28 -0
- package/dist/runLog.js +5 -0
- package/dist/runLog.js.map +1 -1
- package/dist/server.d.ts +65 -0
- package/dist/server.js +302 -3
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.js +17 -6
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/bridgeDoctor.js +6 -2
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/ccRoutines.d.ts +221 -0
- package/dist/tools/ccRoutines.js +264 -0
- package/dist/tools/ccRoutines.js.map +1 -0
- package/dist/tools/getCodeCoverage.js +7 -3
- package/dist/tools/getCodeCoverage.js.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/recentTracesDigest.js +56 -11
- package/dist/tools/recentTracesDigest.js.map +1 -1
- package/dist/tools/testRunners/vitestJest.js +3 -1
- package/dist/tools/testRunners/vitestJest.js.map +1 -1
- package/dist/tools/utils.js +6 -3
- package/dist/tools/utils.js.map +1 -1
- package/package.json +17 -6
- package/scripts/postinstall.mjs +27 -0
- package/scripts/smoke/run-all.mjs +162 -0
- package/scripts/start-all.mjs +513 -0
- package/scripts/start-all.ps1 +209 -0
- package/scripts/start-all.sh +73 -17
- package/scripts/start-orchestrator.ps1 +158 -0
- package/scripts/start-remote.mjs +122 -0
- package/templates/automation-policies/recipe-authoring.json +1 -1
- package/templates/automation-policies/security-first.json +1 -1
- package/templates/automation-policies/strict-lint.json +1 -1
- package/templates/automation-policies/test-driven.json +1 -1
- package/templates/automation-policy.example.json +1 -1
- package/templates/co.patchwork-os.bridge.plist +1 -1
- package/templates/recipes/approval-queue-ui-test.yaml +1 -1
- package/templates/recipes/ctx-loop-test.yaml +1 -1
- package/templates/recipes/webhook/apple-watch-health-log.yaml +145 -0
- package/dist/commands/marketplace.d.ts +0 -16
- package/dist/commands/marketplace.js +0 -32
- package/dist/commands/marketplace.js.map +0 -1
- package/dist/recipes/legacyRecipeCompat.d.ts +0 -10
- package/dist/recipes/legacyRecipeCompat.js +0 -131
- package/dist/recipes/legacyRecipeCompat.js.map +0 -1
|
@@ -1,19 +1,49 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
+
function defaultIsLive(pid) {
|
|
5
|
+
try {
|
|
6
|
+
process.kill(pid, 0);
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function defaultLockDir() {
|
|
14
|
+
return path.join(os.homedir(), ".claude", "ide");
|
|
15
|
+
}
|
|
4
16
|
/**
|
|
5
17
|
* Scan ~/.claude/ide/*.lock and return the first running patchwork bridge
|
|
6
18
|
* (isBridge:true + live PID). Port is parsed from the lockfile name.
|
|
7
19
|
*/
|
|
8
|
-
export function findBridgeLock() {
|
|
9
|
-
const
|
|
20
|
+
export function findBridgeLock(deps = {}) {
|
|
21
|
+
const all = findAllLiveBridges(deps);
|
|
22
|
+
return all[0] ?? null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Scan ~/.claude/ide/*.lock and return **every** running patchwork bridge
|
|
26
|
+
* (isBridge:true + live PID), in filesystem-readdir order.
|
|
27
|
+
*
|
|
28
|
+
* Used by `patchwork kill-switch engage/release` to fan out to every
|
|
29
|
+
* live bridge — per [#422](https://github.com/Oolab-labs/patchwork-os/issues/422) v2-B2, a single-bridge-only kill-switch would
|
|
30
|
+
* leave sibling bridges in a multi-workspace deployment writing through
|
|
31
|
+
* the gate, defeating the emergency-stop semantics.
|
|
32
|
+
*
|
|
33
|
+
* Returns `[]` when the lock dir is missing or contains no live bridges.
|
|
34
|
+
* Malformed lock files are silently skipped.
|
|
35
|
+
*/
|
|
36
|
+
export function findAllLiveBridges(deps = {}) {
|
|
37
|
+
const dir = deps.lockDir ?? defaultLockDir();
|
|
38
|
+
const isLive = deps.isLive ?? defaultIsLive;
|
|
10
39
|
let entries;
|
|
11
40
|
try {
|
|
12
41
|
entries = fs.readdirSync(dir);
|
|
13
42
|
}
|
|
14
43
|
catch {
|
|
15
|
-
return
|
|
44
|
+
return [];
|
|
16
45
|
}
|
|
46
|
+
const out = [];
|
|
17
47
|
for (const f of entries) {
|
|
18
48
|
if (!/^\d+\.lock$/.test(f))
|
|
19
49
|
continue;
|
|
@@ -24,26 +54,22 @@ export function findBridgeLock() {
|
|
|
24
54
|
continue;
|
|
25
55
|
if (!parsed.pid)
|
|
26
56
|
continue;
|
|
27
|
-
|
|
28
|
-
process.kill(parsed.pid, 0);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
57
|
+
if (!isLive(parsed.pid))
|
|
31
58
|
continue;
|
|
32
|
-
}
|
|
33
59
|
const port = Number.parseInt(f.replace(/\.lock$/, ""), 10);
|
|
34
60
|
if (!Number.isFinite(port))
|
|
35
61
|
continue;
|
|
36
|
-
|
|
62
|
+
out.push({
|
|
37
63
|
port,
|
|
38
64
|
authToken: parsed.authToken ?? "",
|
|
39
65
|
pid: parsed.pid,
|
|
40
66
|
workspace: parsed.workspace ?? "",
|
|
41
|
-
};
|
|
67
|
+
});
|
|
42
68
|
}
|
|
43
69
|
catch {
|
|
44
70
|
// skip malformed lock
|
|
45
71
|
}
|
|
46
72
|
}
|
|
47
|
-
return
|
|
73
|
+
return out;
|
|
48
74
|
}
|
|
49
75
|
//# sourceMappingURL=bridgeLockDiscovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridgeLockDiscovery.js","sourceRoot":"","sources":["../src/bridgeLockDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bridgeLockDiscovery.js","sourceRoot":"","sources":["../src/bridgeLockDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAuB7B,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA0B,EAAE;IAE5B,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAAE;IAE5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;IAE5C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAK5B,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,SAAS;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG;gBAAE,SAAS;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;gBACjC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;aAClC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
export declare function ensureDashboardEnv(patchworkDir: string): {
|
|
2
|
+
password: string;
|
|
3
|
+
generated: boolean;
|
|
4
|
+
};
|
|
1
5
|
interface InitResult {
|
|
2
6
|
configPath: string;
|
|
3
7
|
recipesDir: string;
|
|
4
8
|
recipesCopied: number;
|
|
5
9
|
recipesSkipped: number;
|
|
6
10
|
ollamaDetected: boolean;
|
|
11
|
+
geminiCliDetected: boolean;
|
|
7
12
|
configAction: "created" | "merged" | "overwritten";
|
|
8
13
|
/**
|
|
9
14
|
* State of the Claude Code PreToolUse hook after init ran.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { randomBytes } from "node:crypto";
|
|
3
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
2
4
|
import { homedir } from "node:os";
|
|
3
5
|
import { dirname, join, resolve } from "node:path";
|
|
4
6
|
import { fileURLToPath } from "node:url";
|
|
@@ -49,6 +51,59 @@ What it does:
|
|
|
49
51
|
5. Print next steps
|
|
50
52
|
`);
|
|
51
53
|
}
|
|
54
|
+
function findDashboardDir() {
|
|
55
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
56
|
+
const candidates = [
|
|
57
|
+
join(here, "..", "..", "dashboard"),
|
|
58
|
+
join(here, "..", "..", "..", "dashboard"),
|
|
59
|
+
];
|
|
60
|
+
for (const c of candidates) {
|
|
61
|
+
if (existsSync(join(c, "package.json")))
|
|
62
|
+
return c;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
export function ensureDashboardEnv(patchworkDir) {
|
|
67
|
+
const envPath = join(patchworkDir, ".env");
|
|
68
|
+
let existing = "";
|
|
69
|
+
if (existsSync(envPath))
|
|
70
|
+
existing = readFileSync(envPath, "utf8");
|
|
71
|
+
const hasPassword = /^DASHBOARD_PASSWORD=.+$/m.test(existing);
|
|
72
|
+
const hasSecret = /^DASHBOARD_SESSION_SECRET=.+$/m.test(existing);
|
|
73
|
+
if (hasPassword && hasSecret)
|
|
74
|
+
return { password: "[already set]", generated: false };
|
|
75
|
+
const password = randomBytes(8).toString("hex");
|
|
76
|
+
const secret = randomBytes(32).toString("hex");
|
|
77
|
+
const additions = [];
|
|
78
|
+
if (!hasPassword)
|
|
79
|
+
additions.push(`DASHBOARD_PASSWORD=${password}`);
|
|
80
|
+
if (!hasSecret)
|
|
81
|
+
additions.push(`DASHBOARD_SESSION_SECRET=${secret}`);
|
|
82
|
+
const sep = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
83
|
+
writeFileSync(envPath, `${existing + sep + additions.join("\n")}\n`, {
|
|
84
|
+
mode: 0o600,
|
|
85
|
+
});
|
|
86
|
+
// Also write dashboard/.env.local so Next.js picks up credentials without start-all sourcing
|
|
87
|
+
const dashDir = findDashboardDir();
|
|
88
|
+
if (dashDir) {
|
|
89
|
+
const localPath = join(dashDir, ".env.local");
|
|
90
|
+
let local = existsSync(localPath) ? readFileSync(localPath, "utf8") : "";
|
|
91
|
+
if (/^DASHBOARD_PASSWORD=/m.test(local)) {
|
|
92
|
+
local = local.replace(/^DASHBOARD_PASSWORD=.*$/m, `DASHBOARD_PASSWORD=${password}`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
local += `${local.endsWith("\n") ? "" : "\n"}DASHBOARD_PASSWORD=${password}\n`;
|
|
96
|
+
}
|
|
97
|
+
if (/^DASHBOARD_SESSION_SECRET=/m.test(local)) {
|
|
98
|
+
local = local.replace(/^DASHBOARD_SESSION_SECRET=.*$/m, `DASHBOARD_SESSION_SECRET=${secret}`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
local += `DASHBOARD_SESSION_SECRET=${secret}\n`;
|
|
102
|
+
}
|
|
103
|
+
writeFileSync(localPath, local, { mode: 0o600 });
|
|
104
|
+
}
|
|
105
|
+
return { password, generated: true };
|
|
106
|
+
}
|
|
52
107
|
function findTemplatesDir() {
|
|
53
108
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
54
109
|
// dist/commands/patchworkInit.js → ../../templates/recipes
|
|
@@ -62,6 +117,18 @@ function findTemplatesDir() {
|
|
|
62
117
|
return c;
|
|
63
118
|
return null;
|
|
64
119
|
}
|
|
120
|
+
function detectGeminiCli() {
|
|
121
|
+
try {
|
|
122
|
+
const r = spawnSync("gemini", ["--version"], {
|
|
123
|
+
stdio: "pipe",
|
|
124
|
+
timeout: 3000,
|
|
125
|
+
});
|
|
126
|
+
return r.status === 0;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
65
132
|
async function detectOllama(timeoutMs = 500) {
|
|
66
133
|
try {
|
|
67
134
|
const controller = new AbortController();
|
|
@@ -94,6 +161,9 @@ export async function runPatchworkInit(argv, opts = {}) {
|
|
|
94
161
|
mkdirSync(dir, { recursive: true });
|
|
95
162
|
}
|
|
96
163
|
log(` ✓ ~/.patchwork scaffolded\n`);
|
|
164
|
+
const dashEnv = ensureDashboardEnv(patchworkDir);
|
|
165
|
+
if (dashEnv.generated)
|
|
166
|
+
log(` ✓ ~/.patchwork/.env created with dashboard credentials\n`);
|
|
97
167
|
const templatesDir = findTemplatesDir();
|
|
98
168
|
let recipesCopied = 0;
|
|
99
169
|
let recipesSkipped = 0;
|
|
@@ -124,6 +194,10 @@ export async function runPatchworkInit(argv, opts = {}) {
|
|
|
124
194
|
else {
|
|
125
195
|
log(` ! recipe templates not found (expected templates/recipes/)\n`);
|
|
126
196
|
}
|
|
197
|
+
const geminiCliDetected = detectGeminiCli();
|
|
198
|
+
log(geminiCliDetected
|
|
199
|
+
? ` ✓ Gemini CLI detected — driver will default to gemini\n`
|
|
200
|
+
: ` · Gemini CLI not detected (install from https://github.com/google-gemini/gemini-cli)\n`);
|
|
127
201
|
let ollamaDetected = false;
|
|
128
202
|
if (!parsed.skipOllama) {
|
|
129
203
|
ollamaDetected = await detectOllama();
|
|
@@ -157,6 +231,7 @@ export async function runPatchworkInit(argv, opts = {}) {
|
|
|
157
231
|
const fresh = {
|
|
158
232
|
model: ollamaDetected ? "local" : "claude",
|
|
159
233
|
recipesDir,
|
|
234
|
+
...(geminiCliDetected ? { driver: "gemini" } : {}),
|
|
160
235
|
dashboard: {
|
|
161
236
|
port: 3200,
|
|
162
237
|
requireApproval: ["high"],
|
|
@@ -202,18 +277,22 @@ export async function runPatchworkInit(argv, opts = {}) {
|
|
|
202
277
|
const restartLine = preToolUseHook === "added"
|
|
203
278
|
? `\n ⚠ Restart Claude Code so the new PreToolUse hook takes effect.\n (CC reads hooks at session start — existing sessions won't see the change.)\n`
|
|
204
279
|
: "";
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
280
|
+
const dashPasswordLine = dashEnv.generated
|
|
281
|
+
? `\n Dashboard password: ${dashEnv.password} (saved to ~/.patchwork/.env)\n`
|
|
282
|
+
: "";
|
|
283
|
+
log(`${restartLine}${dashPasswordLine}
|
|
284
|
+
Next:
|
|
285
|
+
1. patchwork start # launch bridge + dashboard
|
|
286
|
+
2. open http://localhost:3200 # dashboard (use password printed above)
|
|
287
|
+
3. patchwork-os recipe run daily-status # zero-config: yesterday's commits + today's hints
|
|
288
|
+
4. patchwork-os init --with-connectors # add gmail/github/linear/etc. recipes\n`);
|
|
211
289
|
return {
|
|
212
290
|
configPath,
|
|
213
291
|
recipesDir,
|
|
214
292
|
recipesCopied,
|
|
215
293
|
recipesSkipped,
|
|
216
294
|
ollamaDetected,
|
|
295
|
+
geminiCliDetected,
|
|
217
296
|
configAction,
|
|
218
297
|
preToolUseHook,
|
|
219
298
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patchworkInit.js","sourceRoot":"","sources":["../../src/commands/patchworkInit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"patchworkInit.js","sourceRoot":"","sources":["../../src/commands/patchworkInit.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,43 @@ export declare function runNew(options: NewOptions): {
|
|
|
17
17
|
content: string;
|
|
18
18
|
};
|
|
19
19
|
export declare function listTemplates(): string[];
|
|
20
|
+
export interface InteractivePromptDeps {
|
|
21
|
+
/** Free-text prompt. Returns the user's trimmed answer. */
|
|
22
|
+
ask: (question: string) => Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* List-select prompt. Returns the 1-based index of the choice the
|
|
25
|
+
* user picked. Implementations must reject 0 / out-of-range / NaN.
|
|
26
|
+
*/
|
|
27
|
+
pickFromList: (question: string, options: string[]) => Promise<number>;
|
|
28
|
+
/** Y/N prompt. Returns true on yes. */
|
|
29
|
+
confirm: (question: string) => Promise<boolean>;
|
|
30
|
+
/** Optional preview hook — called once before the final write confirm. */
|
|
31
|
+
preview?: (yaml: string) => void;
|
|
32
|
+
}
|
|
33
|
+
export interface InteractiveNewOptions {
|
|
34
|
+
outputDir?: string;
|
|
35
|
+
deps: InteractivePromptDeps;
|
|
36
|
+
/**
|
|
37
|
+
* AI-suggest path. Injected so tests can stub the bridge-discovery +
|
|
38
|
+
* fetch pair without touching the network or the lock-file dir. When
|
|
39
|
+
* omitted, runNewInteractive uses the production defaults (findBridgeLock
|
|
40
|
+
* + global fetch). The CLI dispatch passes nothing.
|
|
41
|
+
*/
|
|
42
|
+
aiSuggest?: {
|
|
43
|
+
findBridge?: () => {
|
|
44
|
+
port: number;
|
|
45
|
+
authToken: string;
|
|
46
|
+
} | null;
|
|
47
|
+
fetch?: typeof globalThis.fetch;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface InteractiveNewResult {
|
|
51
|
+
path: string;
|
|
52
|
+
content: string;
|
|
53
|
+
/** Lint issues surfaced by validateRecipeDefinition (warnings only — write proceeds). */
|
|
54
|
+
warnings: LintIssue[];
|
|
55
|
+
}
|
|
56
|
+
export declare function runNewInteractive(options: InteractiveNewOptions): Promise<InteractiveNewResult>;
|
|
20
57
|
export interface SchemaWriteResult {
|
|
21
58
|
outputDir: string;
|
|
22
59
|
filesWritten: string[];
|
|
@@ -61,6 +98,20 @@ export interface RunRecipeOptions {
|
|
|
61
98
|
vars?: Record<string, string>;
|
|
62
99
|
workdir?: string;
|
|
63
100
|
deps?: Partial<RunnerDeps>;
|
|
101
|
+
/**
|
|
102
|
+
* PR5c — stable id for one *logical* execution attempt. Forwarded to
|
|
103
|
+
* RunnerDeps so the runner constructs a disk-backed WriteEffectLedger
|
|
104
|
+
* scoped by `${recipe.name}:${manualRunId}`. Re-using the same id on
|
|
105
|
+
* a retry replays prior dedup records and skips already-completed
|
|
106
|
+
* write tools (resume semantics).
|
|
107
|
+
*/
|
|
108
|
+
manualRunId?: string;
|
|
109
|
+
/**
|
|
110
|
+
* PR5c — directory holding `effect_ledger.jsonl`. Required for the
|
|
111
|
+
* disk-backed ledger; without it the ledger stays in-memory even
|
|
112
|
+
* when manualRunId is set.
|
|
113
|
+
*/
|
|
114
|
+
ledgerDir?: string;
|
|
64
115
|
}
|
|
65
116
|
export interface RunRecipeStepSelection {
|
|
66
117
|
query: string;
|