@veewo/claw 0.1.93 → 0.1.95

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.
@@ -0,0 +1,120 @@
1
+ import { buildMemoryIndex, ClawError, requestPersistentSearch, searchMemoryAsync, } from "@veewo/claw-core/search";
2
+ export async function runSearchEntry(args) {
3
+ try {
4
+ const searchArgs = [...args];
5
+ const subcommand = searchArgs[0];
6
+ if (subcommand === "index") {
7
+ searchArgs.shift();
8
+ const refresh = readBooleanFlag(searchArgs, "--refresh");
9
+ if (!refresh) {
10
+ throw new ClawError("PROJECT_CONFIG_INVALID", "claw search index requires --refresh.");
11
+ }
12
+ assertNoRemainingArgs(searchArgs, "search index");
13
+ printJson({
14
+ ok: true,
15
+ command: "search.index.refresh",
16
+ ...buildMemoryIndex({ cwd: process.cwd(), scope: "project" }),
17
+ });
18
+ return;
19
+ }
20
+ if (searchArgs.includes("--scope") || searchArgs.includes("--task")) {
21
+ throw new ClawError("PROJECT_CONFIG_INVALID", "claw search is project-scoped only. Put task-specific materials in plan.references instead of using task-local search.");
22
+ }
23
+ const input = {
24
+ cwd: process.cwd(),
25
+ limit: readOptionalNumber(searchArgs, "--limit"),
26
+ query: readRequiredSearchQuery(searchArgs),
27
+ scope: "project",
28
+ };
29
+ const result = await requestPersistentSearch(input) ?? await searchMemoryAsync(input);
30
+ printJson({
31
+ ok: true,
32
+ command: "search",
33
+ ...result,
34
+ });
35
+ }
36
+ catch (error) {
37
+ handleError(error);
38
+ }
39
+ }
40
+ function readRequiredSearchQuery(args) {
41
+ const query = readOptionalFlag(args, "--query");
42
+ if (query) {
43
+ assertNoRemainingArgs(args, "search");
44
+ return query;
45
+ }
46
+ const unknownFlags = args.filter((arg) => arg.startsWith("--"));
47
+ if (unknownFlags.length > 0) {
48
+ throw new ClawError("PROJECT_CONFIG_INVALID", `Unknown arguments for search: ${args.join(" ")}`, {
49
+ command: "search",
50
+ remainingArgs: args,
51
+ });
52
+ }
53
+ if (args.length === 0) {
54
+ throw new ClawError("PROJECT_CONFIG_INVALID", "Missing search query. Use: `claw search --query \"<topic>\"`.", { flag: "--query", recommendedCommand: "claw search --query \"<topic>\"" });
55
+ }
56
+ return args.join(" ").trim();
57
+ }
58
+ function readOptionalFlag(args, flag) {
59
+ const index = args.indexOf(flag);
60
+ if (index < 0) {
61
+ return undefined;
62
+ }
63
+ const value = args[index + 1];
64
+ if (!value || value.startsWith("--")) {
65
+ throw new ClawError("PROJECT_CONFIG_INVALID", `Missing required flag ${flag}.`, { flag });
66
+ }
67
+ args.splice(index, 2);
68
+ return value;
69
+ }
70
+ function readOptionalNumber(args, flag) {
71
+ const raw = readOptionalFlag(args, flag);
72
+ if (raw === undefined) {
73
+ return undefined;
74
+ }
75
+ const value = Number(raw);
76
+ if (!Number.isFinite(value)) {
77
+ throw new ClawError("PROJECT_CONFIG_INVALID", `Expected numeric value for ${flag}.`, { flag, value: raw });
78
+ }
79
+ return value;
80
+ }
81
+ function readBooleanFlag(args, flag) {
82
+ const index = args.indexOf(flag);
83
+ if (index < 0) {
84
+ return false;
85
+ }
86
+ args.splice(index, 1);
87
+ return true;
88
+ }
89
+ function assertNoRemainingArgs(args, command) {
90
+ if (args.length > 0) {
91
+ throw new ClawError("PROJECT_CONFIG_INVALID", `Unknown arguments for ${command}: ${args.join(" ")}`, {
92
+ command,
93
+ remainingArgs: args,
94
+ });
95
+ }
96
+ }
97
+ function printJson(value) {
98
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
99
+ }
100
+ function handleError(error) {
101
+ if (error instanceof ClawError) {
102
+ process.stderr.write(`${JSON.stringify({
103
+ error: {
104
+ code: error.code,
105
+ message: error.message,
106
+ ...(error.details ? { details: error.details } : {}),
107
+ },
108
+ }, null, 2)}\n`);
109
+ }
110
+ else {
111
+ process.stderr.write(`${JSON.stringify({
112
+ error: {
113
+ code: "UNEXPECTED_ERROR",
114
+ message: error instanceof Error ? error.message : String(error),
115
+ },
116
+ }, null, 2)}\n`);
117
+ }
118
+ process.exitCode = 1;
119
+ }
120
+ //# sourceMappingURL=search-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-entry.js","sourceRoot":"","sources":["../src/search-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veewo/claw",
3
- "version": "0.1.93",
3
+ "version": "0.1.95",
4
4
  "type": "module",
5
5
  "description": "CLI for running the .claw workflow: project planning, recall, truth ingestion, and closeout.",
6
6
  "keywords": [
@@ -31,10 +31,10 @@
31
31
  "claw": "./dist/bin.js"
32
32
  },
33
33
  "dependencies": {
34
- "@veewo/claw-core": "0.1.93"
34
+ "@veewo/claw-core": "0.1.95"
35
35
  },
36
36
  "scripts": {
37
- "build": "tsc -p tsconfig.json",
37
+ "build": "node ./scripts/clean-dist.mjs && tsc -p tsconfig.json",
38
38
  "check": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
39
39
  "test": "tsc -p tsconfig.test.json && node --test dist-test/**/*.test.js"
40
40
  }
@@ -1,18 +0,0 @@
1
- export type KnowledgeGitState = {
2
- gitRoot: string;
3
- preexistingDirtyPaths: Set<string>;
4
- };
5
- type KnowledgeCommitResult = {
6
- status: "committed";
7
- commit: string;
8
- } | {
9
- status: "nothing-to-commit" | "unavailable";
10
- };
11
- export declare function captureKnowledgeGitState(projectRoot: string, truthDir: string): KnowledgeGitState | null;
12
- export declare function commitKnowledgeDocumentation(input: {
13
- state: KnowledgeGitState | null;
14
- truthDir: string;
15
- changedPaths: string[];
16
- message: string;
17
- }): KnowledgeCommitResult;
18
- export {};
@@ -1,127 +0,0 @@
1
- import fs from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { spawnSync } from "node:child_process";
5
- export function captureKnowledgeGitState(projectRoot, truthDir) {
6
- try {
7
- const rootResult = runGit(["rev-parse", "--show-toplevel"], projectRoot);
8
- if (rootResult.status !== 0) {
9
- return null;
10
- }
11
- const gitRoot = rootResult.stdout.trim();
12
- const truthPath = repositoryRelativePath(gitRoot, truthDir);
13
- if (!truthPath) {
14
- return null;
15
- }
16
- const statusResult = runGit(["status", "--porcelain=v1", "-z", "--untracked-files=all", "--", truthPath], gitRoot);
17
- if (statusResult.status !== 0) {
18
- return null;
19
- }
20
- return {
21
- gitRoot,
22
- preexistingDirtyPaths: parsePorcelainPaths(statusResult.stdout),
23
- };
24
- }
25
- catch {
26
- return null;
27
- }
28
- }
29
- export function commitKnowledgeDocumentation(input) {
30
- if (!input.state) {
31
- return { status: "unavailable" };
32
- }
33
- const selectedPaths = input.changedPaths
34
- .map((relativePath) => repositoryRelativePath(input.state.gitRoot, path.resolve(input.truthDir, relativePath)))
35
- .filter((relativePath) => Boolean(relativePath))
36
- .filter((relativePath) => !input.state.preexistingDirtyPaths.has(relativePath));
37
- if (selectedPaths.length === 0) {
38
- return { status: "nothing-to-commit" };
39
- }
40
- let temporaryDir = null;
41
- try {
42
- temporaryDir = fs.mkdtempSync(path.join(os.tmpdir(), "claw-knowledge-index-"));
43
- const temporaryIndex = path.join(temporaryDir, "index");
44
- const temporaryEnvironment = {
45
- ...gitEnvironment(),
46
- GIT_INDEX_FILE: temporaryIndex,
47
- };
48
- if (runGit(["read-tree", "HEAD"], input.state.gitRoot, temporaryEnvironment).status !== 0) {
49
- return { status: "unavailable" };
50
- }
51
- if (runGit(["add", "-A", "--", ...selectedPaths], input.state.gitRoot, temporaryEnvironment).status !== 0) {
52
- return { status: "unavailable" };
53
- }
54
- const diff = runGit(["diff", "--cached", "--quiet", "--exit-code"], input.state.gitRoot, temporaryEnvironment);
55
- if (diff.status === 0) {
56
- return { status: "nothing-to-commit" };
57
- }
58
- if (diff.status !== 1) {
59
- return { status: "unavailable" };
60
- }
61
- // Hooks can stage unrelated paths into the temporary index, which would violate the
62
- // ownership boundary this background commit exists to preserve.
63
- if (runGit(["commit", "--no-verify", "-m", input.message], input.state.gitRoot, temporaryEnvironment).status !== 0) {
64
- return { status: "unavailable" };
65
- }
66
- const commit = runGit(["rev-parse", "HEAD"], input.state.gitRoot).stdout.trim();
67
- // The temporary index moved HEAD without touching the user's real index. Refresh only
68
- // the paths owned by this commit so unrelated staged entries remain exactly as they were.
69
- runGit(["reset", "--quiet", "HEAD", "--", ...selectedPaths], input.state.gitRoot);
70
- return { status: "committed", commit };
71
- }
72
- catch {
73
- return { status: "unavailable" };
74
- }
75
- finally {
76
- if (temporaryDir) {
77
- try {
78
- fs.rmSync(temporaryDir, { recursive: true, force: true });
79
- }
80
- catch {
81
- // Temporary-index cleanup must not change finalizer success semantics.
82
- }
83
- }
84
- }
85
- }
86
- function runGit(args, cwd, env = gitEnvironment()) {
87
- const result = spawnSync("git", args, {
88
- cwd,
89
- env,
90
- encoding: "utf-8",
91
- windowsHide: true,
92
- });
93
- return { status: result.status, stdout: result.stdout ?? "" };
94
- }
95
- function gitEnvironment() {
96
- const env = { ...process.env };
97
- delete env.GIT_INDEX_FILE;
98
- return env;
99
- }
100
- function repositoryRelativePath(gitRoot, target) {
101
- const relativePath = path.relative(gitRoot, target);
102
- if (!relativePath || relativePath === ".." || relativePath.startsWith(`..${path.sep}`) || path.isAbsolute(relativePath)) {
103
- return null;
104
- }
105
- return relativePath.replaceAll("\\", "/");
106
- }
107
- function parsePorcelainPaths(output) {
108
- const paths = new Set();
109
- const entries = output.split("\0");
110
- for (let index = 0; index < entries.length; index += 1) {
111
- const entry = entries[index];
112
- if (!entry || entry.length < 4) {
113
- continue;
114
- }
115
- const status = entry.slice(0, 2);
116
- paths.add(entry.slice(3).replaceAll("\\", "/"));
117
- if (status.includes("R") || status.includes("C")) {
118
- const originalPath = entries[index + 1];
119
- if (originalPath) {
120
- paths.add(originalPath.replaceAll("\\", "/"));
121
- index += 1;
122
- }
123
- }
124
- }
125
- return paths;
126
- }
127
- //# sourceMappingURL=knowledge-git-commit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge-git-commit.js","sourceRoot":"","sources":["../src/knowledge-git-commit.ts"],"names":[],"mappings":"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"}