@zoebuildsai/trace 1.5.0
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/.gitignore +115 -0
- package/.trace/progress.json +22 -0
- package/README.md +466 -0
- package/RELEASE-NOTES-1.5.0.md +410 -0
- package/STATUS.md +245 -0
- package/dist/auto-commit.d.ts +66 -0
- package/dist/auto-commit.d.ts.map +1 -0
- package/dist/auto-commit.js +180 -0
- package/dist/auto-commit.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +246 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +46 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +256 -0
- package/dist/commands.js.map +1 -0
- package/dist/diff.d.ts +23 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +106 -0
- package/dist/diff.js.map +1 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js.map +1 -0
- package/dist/index-cache.d.ts +35 -0
- package/dist/index-cache.d.ts.map +1 -0
- package/dist/index-cache.js +114 -0
- package/dist/index-cache.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/storage.d.ts +45 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +151 -0
- package/dist/storage.js.map +1 -0
- package/dist/sync.d.ts +60 -0
- package/dist/sync.js +184 -0
- package/dist/tags.d.ts +85 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +219 -0
- package/dist/tags.js.map +1 -0
- package/dist/types.d.ts +102 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +73 -0
- package/docs/_config.yml +2 -0
- package/docs/index.html +960 -0
- package/docs-website/package.json +20 -0
- package/jest.config.js +21 -0
- package/package.json +50 -0
- package/scripts/init.ts +290 -0
- package/src/agent-audit.ts +270 -0
- package/src/agent-checkout.ts +227 -0
- package/src/agent-coordination.ts +318 -0
- package/src/async-queue.ts +203 -0
- package/src/auto-branching.ts +279 -0
- package/src/auto-commit.ts +166 -0
- package/src/cherry-pick.ts +252 -0
- package/src/chunked-upload.ts +224 -0
- package/src/cli-v2.ts +335 -0
- package/src/cli.ts +318 -0
- package/src/cliff-detection.ts +232 -0
- package/src/commands.ts +267 -0
- package/src/commit-hash-system.ts +351 -0
- package/src/compression.ts +176 -0
- package/src/conflict-resolution-ui.ts +277 -0
- package/src/conflict-visualization.ts +238 -0
- package/src/diff-formatter.ts +184 -0
- package/src/diff.ts +124 -0
- package/src/distributed-coordination.ts +273 -0
- package/src/git-interop.ts +316 -0
- package/src/index-cache.ts +88 -0
- package/src/index.ts +38 -0
- package/src/merge-engine.ts +143 -0
- package/src/message-search.ts +370 -0
- package/src/performance-monitoring.ts +236 -0
- package/src/rebase.ts +327 -0
- package/src/rollback.ts +215 -0
- package/src/semantic-grouping.ts +245 -0
- package/src/stage-area.ts +324 -0
- package/src/stash.ts +278 -0
- package/src/storage.ts +131 -0
- package/src/sync.ts +205 -0
- package/src/tags.ts +244 -0
- package/src/types.ts +119 -0
- package/src/webhooks.ts +119 -0
- package/src/workspace-isolation.ts +298 -0
- package/tests/auto-commit.test.ts +308 -0
- package/tests/checkout.test.ts +136 -0
- package/tests/commit.test.ts +118 -0
- package/tests/diff.test.ts +191 -0
- package/tests/github.test.ts +94 -0
- package/tests/integration.test.ts +267 -0
- package/tests/log.test.ts +125 -0
- package/tests/phase2-integration.test.ts +370 -0
- package/tests/storage.test.ts +167 -0
- package/tests/tags.test.ts +477 -0
- package/tests/types.test.ts +75 -0
- package/tests/v1.1/agent-audit.test.ts +472 -0
- package/tests/v1.1/agent-coordination.test.ts +308 -0
- package/tests/v1.1/async-queue.test.ts +253 -0
- package/tests/v1.1/comprehensive.test.ts +521 -0
- package/tests/v1.1/diff-formatter.test.ts +238 -0
- package/tests/v1.1/integration.test.ts +389 -0
- package/tests/v1.1/onboarding.test.ts +365 -0
- package/tests/v1.1/rollback.test.ts +370 -0
- package/tests/v1.1/semantic-grouping.test.ts +230 -0
- package/tests/v1.2/chunked-upload.test.ts +301 -0
- package/tests/v1.2/cliff-detection.test.ts +272 -0
- package/tests/v1.2/commit-hash-system.test.ts +288 -0
- package/tests/v1.2/compression.test.ts +220 -0
- package/tests/v1.2/conflict-visualization.test.ts +263 -0
- package/tests/v1.2/distributed.test.ts +261 -0
- package/tests/v1.2/performance-monitoring.test.ts +328 -0
- package/tests/v1.3/auto-branching.test.ts +270 -0
- package/tests/v1.3/message-search.test.ts +264 -0
- package/tests/v1.3/stage-area.test.ts +330 -0
- package/tests/v1.3/stash-rebase-cherry-pick.test.ts +361 -0
- package/tests/v1.4/cli.test.ts +171 -0
- package/tests/v1.4/conflict-resolution-advanced.test.ts +429 -0
- package/tests/v1.4/conflict-resolution-ui.test.ts +286 -0
- package/tests/v1.4/workspace-isolation-advanced.test.ts +382 -0
- package/tests/v1.4/workspace-isolation.test.ts +268 -0
- package/tests/v1.5/agent-coordination.real.test.ts +401 -0
- package/tests/v1.5/cli-v2.test.ts +354 -0
- package/tests/v1.5/git-interop.real.test.ts +358 -0
- package/tests/v1.5/integration-testing.real.test.ts +440 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CommitObject } from './types';
|
|
2
|
+
export declare class Storage {
|
|
3
|
+
private basePath;
|
|
4
|
+
private objectsDir;
|
|
5
|
+
private refsDir;
|
|
6
|
+
constructor(basePath?: string);
|
|
7
|
+
private ensureDirectories;
|
|
8
|
+
/**
|
|
9
|
+
* Compute SHA-256 hash of content
|
|
10
|
+
*/
|
|
11
|
+
hash(content: string | Buffer): string;
|
|
12
|
+
/**
|
|
13
|
+
* Save commit object to storage
|
|
14
|
+
*/
|
|
15
|
+
saveCommit(commit: CommitObject): void;
|
|
16
|
+
/**
|
|
17
|
+
* Load commit object from storage
|
|
18
|
+
*/
|
|
19
|
+
loadCommit(hash: string): CommitObject | null;
|
|
20
|
+
/**
|
|
21
|
+
* Save reference (branch/tag)
|
|
22
|
+
*/
|
|
23
|
+
saveRef(name: string, hash: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Load reference
|
|
26
|
+
*/
|
|
27
|
+
loadRef(name: string): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* List all commits
|
|
30
|
+
*/
|
|
31
|
+
listCommits(): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Delete commit
|
|
34
|
+
*/
|
|
35
|
+
deleteCommit(hash: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get commit history chain
|
|
38
|
+
*/
|
|
39
|
+
getHistory(startHash: string): CommitObject[];
|
|
40
|
+
/**
|
|
41
|
+
* Helper to serialize Maps as objects for JSON
|
|
42
|
+
*/
|
|
43
|
+
private replaceMapValues;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAyB,MAAM,SAAS,CAAC;AAE9D,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,GAAE,MAAkE;IAOxF,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAKtC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKtC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAY7C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAUvB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAe7C;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAUzB"}
|
package/dist/storage.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Storage = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const crypto = __importStar(require("crypto"));
|
|
40
|
+
class Storage {
|
|
41
|
+
constructor(basePath = path.join(process.env.HOME || '', '.openclaw/memory-git')) {
|
|
42
|
+
this.basePath = basePath;
|
|
43
|
+
this.objectsDir = path.join(basePath, 'objects');
|
|
44
|
+
this.refsDir = path.join(basePath, 'refs');
|
|
45
|
+
this.ensureDirectories();
|
|
46
|
+
}
|
|
47
|
+
ensureDirectories() {
|
|
48
|
+
[this.basePath, this.objectsDir, this.refsDir].forEach(dir => {
|
|
49
|
+
if (!fs.existsSync(dir)) {
|
|
50
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Compute SHA-256 hash of content
|
|
56
|
+
*/
|
|
57
|
+
hash(content) {
|
|
58
|
+
const buffer = typeof content === 'string' ? Buffer.from(content, 'utf-8') : content;
|
|
59
|
+
return crypto.createHash('sha256').update(buffer).digest('hex');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Save commit object to storage
|
|
63
|
+
*/
|
|
64
|
+
saveCommit(commit) {
|
|
65
|
+
const commitPath = path.join(this.objectsDir, `${commit.hash}.json`);
|
|
66
|
+
fs.writeFileSync(commitPath, JSON.stringify(commit, this.replaceMapValues, 2));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Load commit object from storage
|
|
70
|
+
*/
|
|
71
|
+
loadCommit(hash) {
|
|
72
|
+
const commitPath = path.join(this.objectsDir, `${hash}.json`);
|
|
73
|
+
if (!fs.existsSync(commitPath)) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const content = fs.readFileSync(commitPath, 'utf-8');
|
|
77
|
+
const commit = JSON.parse(content);
|
|
78
|
+
const filesRecord = commit.tree.files;
|
|
79
|
+
commit.tree.files = new Map(Object.entries(filesRecord));
|
|
80
|
+
return commit;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Save reference (branch/tag)
|
|
84
|
+
*/
|
|
85
|
+
saveRef(name, hash) {
|
|
86
|
+
const refPath = path.join(this.refsDir, name);
|
|
87
|
+
fs.mkdirSync(path.dirname(refPath), { recursive: true });
|
|
88
|
+
fs.writeFileSync(refPath, hash);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Load reference
|
|
92
|
+
*/
|
|
93
|
+
loadRef(name) {
|
|
94
|
+
const refPath = path.join(this.refsDir, name);
|
|
95
|
+
if (!fs.existsSync(refPath)) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
return fs.readFileSync(refPath, 'utf-8').trim();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* List all commits
|
|
102
|
+
*/
|
|
103
|
+
listCommits() {
|
|
104
|
+
if (!fs.existsSync(this.objectsDir)) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
return fs
|
|
108
|
+
.readdirSync(this.objectsDir)
|
|
109
|
+
.filter(f => f.endsWith('.json'))
|
|
110
|
+
.map(f => f.replace('.json', ''));
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Delete commit
|
|
114
|
+
*/
|
|
115
|
+
deleteCommit(hash) {
|
|
116
|
+
const commitPath = path.join(this.objectsDir, `${hash}.json`);
|
|
117
|
+
if (fs.existsSync(commitPath)) {
|
|
118
|
+
fs.unlinkSync(commitPath);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get commit history chain
|
|
123
|
+
*/
|
|
124
|
+
getHistory(startHash) {
|
|
125
|
+
const history = [];
|
|
126
|
+
let current = this.loadCommit(startHash);
|
|
127
|
+
while (current !== null) {
|
|
128
|
+
history.push(current);
|
|
129
|
+
if (current.parent === null) {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
current = this.loadCommit(current.parent);
|
|
133
|
+
}
|
|
134
|
+
return history;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Helper to serialize Maps as objects for JSON
|
|
138
|
+
*/
|
|
139
|
+
replaceMapValues(key, value) {
|
|
140
|
+
if (value instanceof Map) {
|
|
141
|
+
const obj = {};
|
|
142
|
+
value.forEach((v, k) => {
|
|
143
|
+
obj[k] = v;
|
|
144
|
+
});
|
|
145
|
+
return obj;
|
|
146
|
+
}
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.Storage = Storage;
|
|
151
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Integration Layer
|
|
3
|
+
* Handles push/pull with GitHub repositories
|
|
4
|
+
*/
|
|
5
|
+
interface Remote {
|
|
6
|
+
name: string;
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class TraceGitHub {
|
|
10
|
+
private repoDir;
|
|
11
|
+
private remoteConfigFile;
|
|
12
|
+
constructor(repoDir?: string);
|
|
13
|
+
/**
|
|
14
|
+
* Initialize git repo if needed
|
|
15
|
+
*/
|
|
16
|
+
initRepo(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Add a remote repository
|
|
19
|
+
*/
|
|
20
|
+
addRemote(name: string, url: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* List all remotes
|
|
23
|
+
*/
|
|
24
|
+
listRemotes(): Remote[];
|
|
25
|
+
/**
|
|
26
|
+
* Push to remote with timeout
|
|
27
|
+
*/
|
|
28
|
+
push(remote?: string, timeout?: number): {
|
|
29
|
+
success: boolean;
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Pull from remote
|
|
34
|
+
*/
|
|
35
|
+
pull(remote?: string): {
|
|
36
|
+
success: boolean;
|
|
37
|
+
message: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Stage and commit changes
|
|
41
|
+
*/
|
|
42
|
+
stageAndCommit(message: string): {
|
|
43
|
+
success: boolean;
|
|
44
|
+
hash: string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Commit with optional auto-push
|
|
48
|
+
*/
|
|
49
|
+
commitWithAutoPush(message: string, autoPush?: boolean, remote?: string): {
|
|
50
|
+
success: boolean;
|
|
51
|
+
hash: string;
|
|
52
|
+
pushed?: boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Save remote config locally
|
|
56
|
+
*/
|
|
57
|
+
private saveRemote;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=github.d.ts.map
|
package/dist/sync.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Integration Layer
|
|
4
|
+
* Handles push/pull with GitHub repositories
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TraceGitHub = void 0;
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
class TraceGitHub {
|
|
12
|
+
constructor(repoDir = process.cwd()) {
|
|
13
|
+
this.repoDir = repoDir;
|
|
14
|
+
this.remoteConfigFile = (0, path_1.join)(repoDir, '.trace', 'remotes.json');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initialize git repo if needed
|
|
18
|
+
*/
|
|
19
|
+
initRepo() {
|
|
20
|
+
try {
|
|
21
|
+
(0, child_process_1.execSync)('git rev-parse --git-dir', { cwd: this.repoDir, stdio: 'ignore' });
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
(0, child_process_1.execSync)('git init', { cwd: this.repoDir });
|
|
25
|
+
(0, child_process_1.execSync)('git config user.email "trace@zoebuildsai.com"', { cwd: this.repoDir });
|
|
26
|
+
(0, child_process_1.execSync)('git config user.name "Trace"', { cwd: this.repoDir });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Add a remote repository
|
|
31
|
+
*/
|
|
32
|
+
addRemote(name, url) {
|
|
33
|
+
try {
|
|
34
|
+
(0, child_process_1.execSync)(`git remote add ${name} ${url}`, { cwd: this.repoDir });
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Remote may already exist, update it
|
|
38
|
+
(0, child_process_1.execSync)(`git remote set-url ${name} ${url}`, { cwd: this.repoDir });
|
|
39
|
+
}
|
|
40
|
+
this.saveRemote(name, url);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* List all remotes
|
|
44
|
+
*/
|
|
45
|
+
listRemotes() {
|
|
46
|
+
try {
|
|
47
|
+
const output = (0, child_process_1.execSync)('git remote -v', { cwd: this.repoDir, encoding: 'utf-8' });
|
|
48
|
+
const remotes = new Map();
|
|
49
|
+
for (const line of output.trim().split('\n')) {
|
|
50
|
+
if (!line)
|
|
51
|
+
continue;
|
|
52
|
+
const [name, url] = line.split(/\s+/);
|
|
53
|
+
if (!remotes.has(name)) {
|
|
54
|
+
remotes.set(name, url);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const result = [];
|
|
58
|
+
for (const [name, url] of remotes) {
|
|
59
|
+
result.push({ name, url });
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Push to remote with timeout
|
|
69
|
+
*/
|
|
70
|
+
push(remote = 'origin', timeout = 5000) {
|
|
71
|
+
this.initRepo();
|
|
72
|
+
try {
|
|
73
|
+
const cmd = `git push ${remote} --all --tags`;
|
|
74
|
+
const timeoutSec = Math.ceil(timeout / 1000);
|
|
75
|
+
try {
|
|
76
|
+
(0, child_process_1.execSync)(cmd, {
|
|
77
|
+
cwd: this.repoDir,
|
|
78
|
+
timeout: timeout,
|
|
79
|
+
stdio: 'pipe',
|
|
80
|
+
});
|
|
81
|
+
return { success: true, message: `Pushed to ${remote}` };
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
if (err.killed) {
|
|
85
|
+
// Timeout - return partial success
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
message: `Push timeout after ${timeoutSec}s (may have partially succeeded)`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
message: `Push failed: ${err.message}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Pull from remote
|
|
103
|
+
*/
|
|
104
|
+
pull(remote = 'origin') {
|
|
105
|
+
this.initRepo();
|
|
106
|
+
try {
|
|
107
|
+
(0, child_process_1.execSync)(`git pull ${remote} --all`, {
|
|
108
|
+
cwd: this.repoDir,
|
|
109
|
+
stdio: 'pipe',
|
|
110
|
+
});
|
|
111
|
+
return { success: true, message: `Pulled from ${remote}` };
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
message: `Pull failed: ${err.message}`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Stage and commit changes
|
|
122
|
+
*/
|
|
123
|
+
stageAndCommit(message) {
|
|
124
|
+
this.initRepo();
|
|
125
|
+
try {
|
|
126
|
+
(0, child_process_1.execSync)('git add -A', { cwd: this.repoDir });
|
|
127
|
+
const output = (0, child_process_1.execSync)(`git commit -m "${message.replace(/"/g, '\\"')}"`, {
|
|
128
|
+
cwd: this.repoDir,
|
|
129
|
+
encoding: 'utf-8',
|
|
130
|
+
});
|
|
131
|
+
// Extract hash from output like "[main abc1234] message"
|
|
132
|
+
const match = output.match(/\[.*?\s+(\w+)\]/);
|
|
133
|
+
const hash = match ? match[1] : 'unknown';
|
|
134
|
+
return { success: true, hash };
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
const errStr = err.message || err.toString();
|
|
138
|
+
if (errStr.includes('nothing to commit') || errStr.includes('nothing added to commit')) {
|
|
139
|
+
return { success: true, hash: 'none' };
|
|
140
|
+
}
|
|
141
|
+
return { success: false, hash: '' };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Commit with optional auto-push
|
|
146
|
+
*/
|
|
147
|
+
commitWithAutoPush(message, autoPush = false, remote = 'origin') {
|
|
148
|
+
const commitResult = this.stageAndCommit(message);
|
|
149
|
+
if (!commitResult.success) {
|
|
150
|
+
return { success: false, hash: '' };
|
|
151
|
+
}
|
|
152
|
+
if (autoPush && commitResult.hash !== 'none') {
|
|
153
|
+
const pushResult = this.push(remote, 5000);
|
|
154
|
+
return {
|
|
155
|
+
success: true,
|
|
156
|
+
hash: commitResult.hash,
|
|
157
|
+
pushed: pushResult.success,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { success: true, hash: commitResult.hash };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Save remote config locally
|
|
164
|
+
*/
|
|
165
|
+
saveRemote(name, url) {
|
|
166
|
+
const dir = (0, path_1.join)(this.repoDir, '.trace');
|
|
167
|
+
if (!(0, fs_1.existsSync)(dir)) {
|
|
168
|
+
(0, child_process_1.execSync)(`mkdir -p ${dir}`);
|
|
169
|
+
}
|
|
170
|
+
let remotes = {};
|
|
171
|
+
if ((0, fs_1.existsSync)(this.remoteConfigFile)) {
|
|
172
|
+
try {
|
|
173
|
+
remotes = JSON.parse((0, fs_1.readFileSync)(this.remoteConfigFile, 'utf-8'));
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
remotes = {};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
remotes[name] = url;
|
|
180
|
+
(0, fs_1.writeFileSync)(this.remoteConfigFile, JSON.stringify(remotes, null, 2));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.TraceGitHub = TraceGitHub;
|
|
184
|
+
//# sourceMappingURL=github.js.map
|
package/dist/tags.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tags Feature
|
|
3
|
+
*
|
|
4
|
+
* Create, list, delete, and checkout to semantic tags.
|
|
5
|
+
* - Store tags in refs/tags/
|
|
6
|
+
* - Tag metadata (created_at, description, creator)
|
|
7
|
+
* - Fast tag index for <50ms lookups
|
|
8
|
+
* - Unicode and special character support
|
|
9
|
+
*/
|
|
10
|
+
import { TraceCommands } from './commands';
|
|
11
|
+
export interface Tag {
|
|
12
|
+
name: string;
|
|
13
|
+
commit_hash: string;
|
|
14
|
+
created_at: number;
|
|
15
|
+
metadata?: Record<string, any>;
|
|
16
|
+
}
|
|
17
|
+
export interface TagListOptions {
|
|
18
|
+
sortBy?: 'created_at' | 'name';
|
|
19
|
+
pattern?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface TagCreateOptions {
|
|
22
|
+
description?: string;
|
|
23
|
+
creator?: string;
|
|
24
|
+
force?: boolean;
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
}
|
|
27
|
+
export interface TagCheckoutOptions {
|
|
28
|
+
force?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare class TagManager {
|
|
31
|
+
private commands;
|
|
32
|
+
private tagsDir;
|
|
33
|
+
private tagIndex;
|
|
34
|
+
private indexValid;
|
|
35
|
+
constructor(commands: TraceCommands, basePath?: string);
|
|
36
|
+
/**
|
|
37
|
+
* Create a new tag at current HEAD
|
|
38
|
+
*/
|
|
39
|
+
create(name: string, options?: TagCreateOptions): Tag;
|
|
40
|
+
/**
|
|
41
|
+
* Get a tag by name
|
|
42
|
+
*/
|
|
43
|
+
get(name: string): Tag | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* List all tags
|
|
46
|
+
*/
|
|
47
|
+
list(options?: TagListOptions): Tag[];
|
|
48
|
+
/**
|
|
49
|
+
* Delete a tag
|
|
50
|
+
*/
|
|
51
|
+
delete(name: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Checkout to a tagged commit
|
|
54
|
+
*/
|
|
55
|
+
checkout(name: string, options?: TagCheckoutOptions): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Rebuild the tag index
|
|
58
|
+
*/
|
|
59
|
+
rebuildIndex(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Private: Ensure index is valid
|
|
62
|
+
*/
|
|
63
|
+
private ensureIndexValid;
|
|
64
|
+
/**
|
|
65
|
+
* Private: Validate tag name
|
|
66
|
+
*/
|
|
67
|
+
private validateTagName;
|
|
68
|
+
/**
|
|
69
|
+
* Private: Ensure tags directory exists
|
|
70
|
+
*/
|
|
71
|
+
private ensureTagsDir;
|
|
72
|
+
/**
|
|
73
|
+
* Private: Get tag file path
|
|
74
|
+
*/
|
|
75
|
+
private getTagPath;
|
|
76
|
+
/**
|
|
77
|
+
* Private: Save tag to disk
|
|
78
|
+
*/
|
|
79
|
+
private saveTag;
|
|
80
|
+
/**
|
|
81
|
+
* Private: Convert glob pattern to regex
|
|
82
|
+
*/
|
|
83
|
+
private patternToRegex;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAAkB;gBAExB,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAW1D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,GAAG;IAqCzD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAKlC;;OAEG;IACH,IAAI,CAAC,OAAO,GAAE,cAAmB,GAAG,GAAG,EAAE;IAqBzC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW1B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO;IAYjE;;OAEG;IACH,YAAY,IAAI,IAAI;IAwBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,OAAO,CAAC,cAAc;CAQvB"}
|