contextgit 0.0.2 → 0.0.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/dist/bootstrap.d.ts +10 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +43 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/commands/branch.d.ts +13 -0
- package/dist/commands/branch.d.ts.map +1 -0
- package/dist/commands/branch.js +52 -0
- package/dist/commands/branch.js.map +1 -0
- package/dist/commands/claim.d.ts +13 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +50 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/commit.d.ts +14 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +71 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/context.d.ts +9 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +38 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +84 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +126 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/keygen.d.ts +10 -0
- package/dist/commands/keygen.d.ts.map +1 -0
- package/dist/commands/keygen.js +57 -0
- package/dist/commands/keygen.js.map +1 -0
- package/dist/commands/log.d.ts +13 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +91 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/merge.d.ts +12 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +29 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/pull.d.ts +10 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +123 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +10 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +141 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/remote-show.d.ts +6 -0
- package/dist/commands/remote-show.d.ts.map +1 -0
- package/dist/commands/remote-show.js +71 -0
- package/dist/commands/remote-show.js.map +1 -0
- package/dist/commands/search.d.ts +11 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +47 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/serve.d.ts +9 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +51 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/set-remote.d.ts +9 -0
- package/dist/commands/set-remote.d.ts.map +1 -0
- package/dist/commands/set-remote.js +26 -0
- package/dist/commands/set-remote.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +54 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/unclaim.d.ts +9 -0
- package/dist/commands/unclaim.d.ts.map +1 -0
- package/dist/commands/unclaim.js +22 -0
- package/dist/commands/unclaim.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +58 -0
- package/dist/config.js.map +1 -0
- package/dist/git-hooks.d.ts +6 -0
- package/dist/git-hooks.d.ts.map +1 -0
- package/dist/git-hooks.js +58 -0
- package/dist/git-hooks.js.map +1 -0
- package/package.json +22 -19
- package/.claude/settings.local.json +0 -41
- package/.contextgit/config.json +0 -10
- package/.contextgit/system-prompt.md +0 -4
- package/.github/workflows/contextgit-ci.yml +0 -40
- package/CLAUDE.md +0 -123
- package/CLAUDE.md.next +0 -65
- package/docs/ContextGit_ARCHITECTURE_v3.md +0 -1141
- package/docs/ContextGit_DELTA.md +0 -84
- package/docs/ContextGit_PHASE1_PLAN.md +0 -177
- package/docs/ContextGit_PHASE2_PLAN.md +0 -535
- package/docs/ContextGit_PRD_v4.md +0 -488
- package/docs/decisions.md +0 -370
- package/packages/api/package.json +0 -25
- package/packages/api/src/bootstrap.ts +0 -64
- package/packages/api/src/config.ts +0 -45
- package/packages/api/src/index.ts +0 -17
- package/packages/api/src/middleware/auth.test.ts +0 -83
- package/packages/api/src/middleware/auth.ts +0 -41
- package/packages/api/src/remote-store.test.ts +0 -301
- package/packages/api/src/router.ts +0 -121
- package/packages/api/src/server-config.ts +0 -34
- package/packages/api/src/server.ts +0 -38
- package/packages/api/src/store-router.ts +0 -241
- package/packages/api/tsconfig.json +0 -8
- package/packages/cli/package.json +0 -29
- package/packages/cli/src/bootstrap.ts +0 -68
- package/packages/cli/src/commands/branch.ts +0 -58
- package/packages/cli/src/commands/claim.ts +0 -58
- package/packages/cli/src/commands/commit.ts +0 -79
- package/packages/cli/src/commands/context.ts +0 -46
- package/packages/cli/src/commands/doctor.ts +0 -99
- package/packages/cli/src/commands/init.ts +0 -141
- package/packages/cli/src/commands/keygen.ts +0 -65
- package/packages/cli/src/commands/log.ts +0 -103
- package/packages/cli/src/commands/merge.ts +0 -36
- package/packages/cli/src/commands/pull.ts +0 -145
- package/packages/cli/src/commands/push.ts +0 -158
- package/packages/cli/src/commands/remote-show.ts +0 -87
- package/packages/cli/src/commands/search.ts +0 -54
- package/packages/cli/src/commands/serve.ts +0 -61
- package/packages/cli/src/commands/set-remote.ts +0 -30
- package/packages/cli/src/commands/status.ts +0 -62
- package/packages/cli/src/commands/unclaim.ts +0 -28
- package/packages/cli/src/config.ts +0 -64
- package/packages/cli/src/git-hooks.ts +0 -61
- package/packages/cli/tsconfig.json +0 -9
- package/packages/core/package.json +0 -28
- package/packages/core/src/embeddings.test.ts +0 -58
- package/packages/core/src/embeddings.ts +0 -75
- package/packages/core/src/engine.ts +0 -274
- package/packages/core/src/index.ts +0 -6
- package/packages/core/src/snapshot.ts +0 -82
- package/packages/core/src/summarizer.test.ts +0 -120
- package/packages/core/src/summarizer.ts +0 -113
- package/packages/core/src/threads.ts +0 -29
- package/packages/core/src/types.ts +0 -240
- package/packages/core/tsconfig.json +0 -9
- package/packages/mcp/package.json +0 -31
- package/packages/mcp/src/auto-snapshot.ts +0 -83
- package/packages/mcp/src/config.ts +0 -53
- package/packages/mcp/src/git-sync.ts +0 -94
- package/packages/mcp/src/index.ts +0 -19
- package/packages/mcp/src/server.ts +0 -377
- package/packages/mcp/tsconfig.json +0 -9
- package/packages/store/package.json +0 -30
- package/packages/store/src/branch-merge.test.ts +0 -127
- package/packages/store/src/engine-integration.test.ts +0 -93
- package/packages/store/src/index.ts +0 -3
- package/packages/store/src/interface.ts +0 -62
- package/packages/store/src/local/claims.test.ts +0 -190
- package/packages/store/src/local/index.ts +0 -380
- package/packages/store/src/local/local-store.test.ts +0 -164
- package/packages/store/src/local/migrations.ts +0 -99
- package/packages/store/src/local/queries.ts +0 -760
- package/packages/store/src/local/schema.ts +0 -157
- package/packages/store/src/remote/index.ts +0 -300
- package/packages/store/tsconfig.json +0 -9
- package/pnpm-workspace.yaml +0 -2
- package/scripts/build.sh +0 -28
- package/tsconfig.base.json +0 -14
- package/vitest.config.ts +0 -15
- /package/{packages/cli/bin → bin}/run.js +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ContextEngine } from '@contextgit/core';
|
|
2
|
+
import type { ContextStore } from '@contextgit/store';
|
|
3
|
+
export interface CliContext {
|
|
4
|
+
engine: ContextEngine;
|
|
5
|
+
store: ContextStore;
|
|
6
|
+
projectId: string;
|
|
7
|
+
branchId: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function bootstrap(): Promise<CliContext>;
|
|
10
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AA4BD,wBAAsB,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAwBrD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// bootstrap.ts — shared setup for commit/context commands.
|
|
2
|
+
// Loads config, opens LocalStore, detects git branch, initializes ContextEngine.
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { simpleGit } from 'simple-git';
|
|
5
|
+
import { ContextEngine } from '@contextgit/core';
|
|
6
|
+
import { LocalStore, RemoteStore } from '@contextgit/store';
|
|
7
|
+
import { loadConfig } from './config.js';
|
|
8
|
+
async function detectGitBranch() {
|
|
9
|
+
try {
|
|
10
|
+
const git = simpleGit(process.cwd());
|
|
11
|
+
const result = await git.revparse(['--abbrev-ref', 'HEAD']);
|
|
12
|
+
return result.trim();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return 'main';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function resolveContextBranch(store, projectId, gitBranch) {
|
|
19
|
+
const existing = await store.getBranchByGitName(projectId, gitBranch);
|
|
20
|
+
if (existing)
|
|
21
|
+
return existing.id;
|
|
22
|
+
const created = await store.createBranch({
|
|
23
|
+
projectId,
|
|
24
|
+
name: `Context: ${gitBranch}`,
|
|
25
|
+
gitBranch,
|
|
26
|
+
});
|
|
27
|
+
return created.id;
|
|
28
|
+
}
|
|
29
|
+
export async function bootstrap() {
|
|
30
|
+
const config = loadConfig();
|
|
31
|
+
const { projectId } = config;
|
|
32
|
+
const store = config.store && config.store !== 'local'
|
|
33
|
+
? new RemoteStore(config.store)
|
|
34
|
+
: new LocalStore(projectId);
|
|
35
|
+
const gitBranch = await detectGitBranch();
|
|
36
|
+
const branchId = await resolveContextBranch(store, projectId, gitBranch);
|
|
37
|
+
const hostname = os.hostname();
|
|
38
|
+
const agentId = `${hostname}-cli-interactive`;
|
|
39
|
+
const engine = new ContextEngine(store, agentId, config.agentRole ?? 'solo', 'contextgit-cli', config.workflowType ?? 'interactive');
|
|
40
|
+
await engine.init(projectId, branchId);
|
|
41
|
+
return { engine, store, projectId, branchId };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,iFAAiF;AAEjF,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AASxC,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAA;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,KAAmB,EACnB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACrE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,EAAE,CAAA;IAEhC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;QACvC,SAAS;QACT,IAAI,EAAE,YAAY,SAAS,EAAE;QAC7B,SAAS;KACV,CAAC,CAAA;IACF,OAAO,OAAO,CAAC,EAAE,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAE5B,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;QACtC,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;IAC/B,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IAExE,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,QAAQ,kBAAkB,CAAA;IAE7C,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B,KAAK,EACL,OAAO,EACP,MAAM,CAAC,SAAS,IAAI,MAAM,EAC1B,gBAAgB,EAChB,MAAM,CAAC,YAAY,IAAI,aAAa,CACrC,CAAA;IACD,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAEtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;AAC/C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class BranchCmd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
name: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
git: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
parent: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAalD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAAgC;IAElD,MAAM,CAAC,IAAI;;MAKV;IAED,MAAM,CAAC,KAAK;;;MASX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// branch — create a new context branch.
|
|
2
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
3
|
+
import { simpleGit } from 'simple-git';
|
|
4
|
+
import { LocalStore } from '@contextgit/store';
|
|
5
|
+
import { loadConfig } from '../config.js';
|
|
6
|
+
async function currentGitBranch(cwd) {
|
|
7
|
+
try {
|
|
8
|
+
return (await simpleGit(cwd).revparse(['--abbrev-ref', 'HEAD'])).trim();
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return 'main';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export default class BranchCmd extends Command {
|
|
15
|
+
static description = 'Create a new context branch';
|
|
16
|
+
static args = {
|
|
17
|
+
name: Args.string({
|
|
18
|
+
description: 'Branch name (human-readable label)',
|
|
19
|
+
required: true,
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
static flags = {
|
|
23
|
+
git: Flags.string({
|
|
24
|
+
description: 'Git branch name to associate (defaults to current git branch)',
|
|
25
|
+
required: false,
|
|
26
|
+
}),
|
|
27
|
+
parent: Flags.string({
|
|
28
|
+
description: 'Parent branch ID',
|
|
29
|
+
required: false,
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
|
+
async run() {
|
|
33
|
+
const { args, flags } = await this.parse(BranchCmd);
|
|
34
|
+
const config = loadConfig();
|
|
35
|
+
const store = new LocalStore(config.projectId);
|
|
36
|
+
const cwd = process.cwd();
|
|
37
|
+
const gitBranch = flags.git ?? (await currentGitBranch(cwd));
|
|
38
|
+
const branch = await store.createBranch({
|
|
39
|
+
projectId: config.projectId,
|
|
40
|
+
name: args.name,
|
|
41
|
+
gitBranch,
|
|
42
|
+
parentBranchId: flags.parent,
|
|
43
|
+
});
|
|
44
|
+
this.log(`Branch created.`);
|
|
45
|
+
this.log(`ID: ${branch.id}`);
|
|
46
|
+
this.log(`Name: ${branch.name}`);
|
|
47
|
+
this.log(`Git: ${branch.gitBranch}`);
|
|
48
|
+
if (branch.parentBranchId)
|
|
49
|
+
this.log(`Parent: ${branch.parentBranchId}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAA;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,GAAG,6BAA6B,CAAA;IAElD,MAAM,CAAC,IAAI,GAAG;QACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,+DAA+D;YAC5E,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAEzB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;QAE5D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS;YACT,cAAc,EAAE,KAAK,CAAC,MAAM;SAC7B,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;QACxC,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;IAC1E,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ClaimCmd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
task: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
ttl: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
status: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAIlD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,SAA2E;IAE7F,MAAM,CAAC,IAAI;;MAKV;IAED,MAAM,CAAC,KAAK;;;MAUX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// claim — create a task claim to prevent concurrent agent work.
|
|
2
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
3
|
+
import { LocalStore } from '@contextgit/store';
|
|
4
|
+
import { loadConfig } from '../config.js';
|
|
5
|
+
export default class ClaimCmd extends Command {
|
|
6
|
+
static description = 'Claim a task to prevent other agents from picking it up simultaneously';
|
|
7
|
+
static args = {
|
|
8
|
+
task: Args.string({
|
|
9
|
+
description: 'Short description of the task being claimed',
|
|
10
|
+
required: true,
|
|
11
|
+
}),
|
|
12
|
+
};
|
|
13
|
+
static flags = {
|
|
14
|
+
ttl: Flags.integer({
|
|
15
|
+
description: 'Time-to-live in hours before the claim auto-expires',
|
|
16
|
+
default: 2,
|
|
17
|
+
}),
|
|
18
|
+
status: Flags.string({
|
|
19
|
+
description: "Claim status: 'proposed' (plan mode) or 'active' (approved, work in progress)",
|
|
20
|
+
default: 'proposed',
|
|
21
|
+
options: ['proposed', 'active'],
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
async run() {
|
|
25
|
+
const { args, flags } = await this.parse(ClaimCmd);
|
|
26
|
+
const config = loadConfig();
|
|
27
|
+
const store = new LocalStore(config.projectId);
|
|
28
|
+
// Resolve current branch
|
|
29
|
+
const branch = await store.getBranchByGitName(config.projectId, 'main');
|
|
30
|
+
const branches = await store.listBranches(config.projectId);
|
|
31
|
+
const activeBranch = branches.find((b) => b.status === 'active') ?? branches[0];
|
|
32
|
+
if (!activeBranch) {
|
|
33
|
+
this.error('No branch found. Run contextgit init first.');
|
|
34
|
+
}
|
|
35
|
+
const claim = await store.claimTask(config.projectId, activeBranch.id, {
|
|
36
|
+
task: args.task,
|
|
37
|
+
agentId: `cli-${process.env.USER ?? 'unknown'}`,
|
|
38
|
+
role: config.agentRole ?? 'solo',
|
|
39
|
+
status: flags.status,
|
|
40
|
+
ttl: flags.ttl * 3_600_000,
|
|
41
|
+
});
|
|
42
|
+
this.log(`Claimed.`);
|
|
43
|
+
this.log(`ID: ${claim.id}`);
|
|
44
|
+
this.log(`Task: ${claim.task}`);
|
|
45
|
+
this.log(`Status: ${claim.status}`);
|
|
46
|
+
this.log(`TTL: ${flags.ttl}h`);
|
|
47
|
+
store.close();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,GAAG,wEAAwE,CAAA;IAE7F,MAAM,CAAC,IAAI,GAAG;QACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,WAAW,EAAE,qDAAqD;YAClE,OAAO,EAAE,CAAC;SACX,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,+EAA+E;YAC5F,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;SAChC,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAE9C,yBAAyB;QACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACvE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC3D,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC/E,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE;YACrE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,EAAE;YAC/C,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;YAChC,MAAM,EAAE,KAAK,CAAC,MAA+B;YAC7C,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,SAAS;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;QAEjC,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class CommitCmd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
message: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
|
+
content: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
thread: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
close: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
'ci-run-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
pipeline: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAY5C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAA4B;IAE9C,MAAM,CAAC,KAAK;;;;;;;MAgCX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// commit — record a context commit via engine.commit().
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
|
+
import { simpleGit } from 'simple-git';
|
|
4
|
+
import { bootstrap } from '../bootstrap.js';
|
|
5
|
+
async function captureGitSha(cwd) {
|
|
6
|
+
try {
|
|
7
|
+
return (await simpleGit(cwd).revparse(['HEAD'])).trim();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export default class CommitCmd extends Command {
|
|
14
|
+
static description = 'Record a context commit';
|
|
15
|
+
static flags = {
|
|
16
|
+
message: Flags.string({
|
|
17
|
+
char: 'm',
|
|
18
|
+
description: 'Short commit message (what was accomplished)',
|
|
19
|
+
required: true,
|
|
20
|
+
}),
|
|
21
|
+
content: Flags.string({
|
|
22
|
+
char: 'c',
|
|
23
|
+
description: 'Detailed commit content. Defaults to the message if omitted.',
|
|
24
|
+
required: false,
|
|
25
|
+
}),
|
|
26
|
+
thread: Flags.string({
|
|
27
|
+
char: 't',
|
|
28
|
+
description: 'Open a new thread (can be repeated)',
|
|
29
|
+
multiple: true,
|
|
30
|
+
required: false,
|
|
31
|
+
}),
|
|
32
|
+
close: Flags.string({
|
|
33
|
+
description: 'Close a thread by ID (can be repeated)',
|
|
34
|
+
multiple: true,
|
|
35
|
+
required: false,
|
|
36
|
+
}),
|
|
37
|
+
'ci-run-id': Flags.string({
|
|
38
|
+
description: 'CI run ID (e.g. GitHub Actions run ID)',
|
|
39
|
+
required: false,
|
|
40
|
+
env: 'GITHUB_RUN_ID',
|
|
41
|
+
}),
|
|
42
|
+
pipeline: Flags.string({
|
|
43
|
+
description: 'CI pipeline / workflow name',
|
|
44
|
+
required: false,
|
|
45
|
+
env: 'GITHUB_WORKFLOW',
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
async run() {
|
|
49
|
+
const { flags } = await this.parse(CommitCmd);
|
|
50
|
+
const ctx = await bootstrap();
|
|
51
|
+
const threads = {};
|
|
52
|
+
if (flags.thread?.length)
|
|
53
|
+
threads.open = flags.thread;
|
|
54
|
+
if (flags.close?.length) {
|
|
55
|
+
threads.close = flags.close.map(id => ({ id, note: 'Closed via CLI' }));
|
|
56
|
+
}
|
|
57
|
+
const gitCommitSha = await captureGitSha(process.cwd());
|
|
58
|
+
const commit = await ctx.engine.commit({
|
|
59
|
+
message: flags.message,
|
|
60
|
+
content: flags.content ?? flags.message,
|
|
61
|
+
gitCommitSha,
|
|
62
|
+
ciRunId: flags['ci-run-id'],
|
|
63
|
+
pipelineName: flags.pipeline,
|
|
64
|
+
...(Object.keys(threads).length > 0 ? { threads } : {}),
|
|
65
|
+
});
|
|
66
|
+
this.log(`Commit recorded.`);
|
|
67
|
+
this.log(`ID: ${commit.id}`);
|
|
68
|
+
this.log(`Message: ${commit.message}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ContextCmd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
format: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAM5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA+C;IAEjE,MAAM,CAAC,KAAK;;MAOX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// context — print the current project snapshot to stdout.
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
|
+
import { simpleGit } from 'simple-git';
|
|
4
|
+
import { LocalStore } from '@contextgit/store';
|
|
5
|
+
import { loadConfig } from '../config.js';
|
|
6
|
+
export default class ContextCmd extends Command {
|
|
7
|
+
static description = 'Print the current project context snapshot';
|
|
8
|
+
static flags = {
|
|
9
|
+
format: Flags.string({
|
|
10
|
+
char: 'f',
|
|
11
|
+
description: 'Output format',
|
|
12
|
+
options: ['agents-md', 'json', 'text'],
|
|
13
|
+
default: 'text',
|
|
14
|
+
}),
|
|
15
|
+
};
|
|
16
|
+
async run() {
|
|
17
|
+
const { flags } = await this.parse(ContextCmd);
|
|
18
|
+
const config = loadConfig();
|
|
19
|
+
const store = new LocalStore(config.projectId);
|
|
20
|
+
// Detect current git branch
|
|
21
|
+
let gitBranch = 'main';
|
|
22
|
+
try {
|
|
23
|
+
const git = simpleGit(process.cwd());
|
|
24
|
+
gitBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// fallback to 'main'
|
|
28
|
+
}
|
|
29
|
+
const branch = await store.getBranchByGitName(config.projectId, gitBranch);
|
|
30
|
+
if (!branch) {
|
|
31
|
+
this.error(`No context branch found for git branch '${gitBranch}'. Run 'contextgit init' first.`);
|
|
32
|
+
}
|
|
33
|
+
const format = (flags.format ?? 'text');
|
|
34
|
+
const snapshot = await store.getFormattedSnapshot(config.projectId, branch.id, format);
|
|
35
|
+
this.log(snapshot);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,GAAG,4CAA4C,CAAA;IAEjE,MAAM,CAAC,KAAK,GAAG;QACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC;YACtC,OAAO,EAAE,MAAM;SAChB,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAE9C,4BAA4B;QAC5B,IAAI,SAAS,GAAG,MAAM,CAAA;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;YACpC,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CACR,2CAA2C,SAAS,iCAAiC,CACtF,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAmB,CAAA;QACzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACtF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAMrC,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAA+C;IAE3D,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoF3B"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// doctor — diagnose the ContextGit installation and report issues.
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import { join, resolve } from 'path';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { Command } from '@oclif/core';
|
|
6
|
+
import { LocalStore } from '@contextgit/store';
|
|
7
|
+
import { findConfigPath } from '../config.js';
|
|
8
|
+
const SENTINEL = '# contextgit';
|
|
9
|
+
export default class DoctorCmd extends Command {
|
|
10
|
+
static description = 'Check ContextGit setup and diagnose issues';
|
|
11
|
+
async run() {
|
|
12
|
+
this.log('ContextGit Doctor\n');
|
|
13
|
+
let passed = 0;
|
|
14
|
+
let failed = 0;
|
|
15
|
+
const check = (label, ok, hint) => {
|
|
16
|
+
const icon = ok ? '✓' : '✗';
|
|
17
|
+
this.log(` [${icon}] ${label}`);
|
|
18
|
+
if (!ok && hint)
|
|
19
|
+
this.log(` → ${hint}`);
|
|
20
|
+
ok ? passed++ : failed++;
|
|
21
|
+
};
|
|
22
|
+
// ── 1. Config file ────────────────────────────────────────────────────────
|
|
23
|
+
let configPath = null;
|
|
24
|
+
let config = null;
|
|
25
|
+
try {
|
|
26
|
+
configPath = findConfigPath(process.cwd());
|
|
27
|
+
config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
28
|
+
check('Config file found and valid JSON', true);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
check('Config file found and valid JSON', false, 'Run: contextgit init');
|
|
32
|
+
}
|
|
33
|
+
// ── 2. DB reachable ───────────────────────────────────────────────────────
|
|
34
|
+
if (config?.projectId) {
|
|
35
|
+
try {
|
|
36
|
+
const store = new LocalStore(config.projectId);
|
|
37
|
+
await store.getProject(config.projectId);
|
|
38
|
+
check('Local DB reachable', true);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
check('Local DB reachable', false, 'DB file may be corrupted — try: contextgit init');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
check('Local DB reachable', false, 'No config to check DB against');
|
|
46
|
+
}
|
|
47
|
+
// ── 3. Git hooks installed ────────────────────────────────────────────────
|
|
48
|
+
const gitHooksDir = resolve(process.cwd(), '.git', 'hooks');
|
|
49
|
+
const postCommitPath = join(gitHooksDir, 'post-commit');
|
|
50
|
+
const hooksInstalled = existsSync(postCommitPath) &&
|
|
51
|
+
readFileSync(postCommitPath, 'utf-8').includes(SENTINEL);
|
|
52
|
+
check('Git hooks installed', hooksInstalled, 'Run: contextgit init --hooks');
|
|
53
|
+
// ── 4. API key configured (only relevant if remote is set) ────────────────
|
|
54
|
+
const remote = config?.remote;
|
|
55
|
+
if (remote) {
|
|
56
|
+
const serverCfgPath = join(os.homedir(), '.contextgit', 'server.json');
|
|
57
|
+
let hasKey = false;
|
|
58
|
+
try {
|
|
59
|
+
const cfg = JSON.parse(readFileSync(serverCfgPath, 'utf-8'));
|
|
60
|
+
hasKey = typeof cfg['keyHash'] === 'string' && cfg['keyHash'].length > 0;
|
|
61
|
+
}
|
|
62
|
+
catch { /* not configured */ }
|
|
63
|
+
check(`API key configured (remote: ${remote})`, hasKey, 'Run: contextgit keygen --save');
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
check('API key (no remote configured — skipped)', true);
|
|
67
|
+
}
|
|
68
|
+
// ── 5. MCP registered in ~/.claude.json ───────────────────────────────────
|
|
69
|
+
const claudeJsonPath = join(os.homedir(), '.claude.json');
|
|
70
|
+
let mcpRegistered = false;
|
|
71
|
+
try {
|
|
72
|
+
const raw = readFileSync(claudeJsonPath, 'utf-8');
|
|
73
|
+
mcpRegistered = raw.includes('contextgit');
|
|
74
|
+
}
|
|
75
|
+
catch { /* file missing */ }
|
|
76
|
+
check('MCP server registered in ~/.claude.json', mcpRegistered, 'Add contextgit to mcpServers in ~/.claude.json');
|
|
77
|
+
// ── Summary ───────────────────────────────────────────────────────────────
|
|
78
|
+
this.log('');
|
|
79
|
+
this.log(`${passed} passed, ${failed} failed`);
|
|
80
|
+
if (failed > 0)
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Init extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
|
+
hooks: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAgB5C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,SAA0C;IAE5D,MAAM,CAAC,KAAK;;;MAUX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4F3B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// init — create .contextgit/config.json + project + branch in LocalStore.
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'fs';
|
|
4
|
+
import { join, basename } from 'path';
|
|
5
|
+
import { nanoid } from 'nanoid';
|
|
6
|
+
import { simpleGit } from 'simple-git';
|
|
7
|
+
import { LocalStore } from '@contextgit/store';
|
|
8
|
+
import { installGitHooks } from '../git-hooks.js';
|
|
9
|
+
const SYSTEM_PROMPT_FRAGMENT = `\
|
|
10
|
+
You have access to ContextGit memory tools. At the start of every session, call
|
|
11
|
+
context_get with scope=global to load project state. After completing significant
|
|
12
|
+
work, call context_commit with a message describing what was done and any open
|
|
13
|
+
threads. Use context_branch before exploring risky changes.
|
|
14
|
+
`;
|
|
15
|
+
export default class Init extends Command {
|
|
16
|
+
static description = 'Initialize ContextGit in this project';
|
|
17
|
+
static flags = {
|
|
18
|
+
name: Flags.string({
|
|
19
|
+
char: 'n',
|
|
20
|
+
description: 'Project name (defaults to current directory name)',
|
|
21
|
+
required: false,
|
|
22
|
+
}),
|
|
23
|
+
hooks: Flags.boolean({
|
|
24
|
+
description: 'Install git hooks to auto-capture context on every git commit',
|
|
25
|
+
default: false,
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
async run() {
|
|
29
|
+
const { flags } = await this.parse(Init);
|
|
30
|
+
const cwd = process.cwd();
|
|
31
|
+
const configDir = join(cwd, '.contextgit');
|
|
32
|
+
const configPath = join(configDir, 'config.json');
|
|
33
|
+
const promptPath = join(configDir, 'system-prompt.md');
|
|
34
|
+
// ── Self-heal: config exists but DB may be empty ───────────────────────────
|
|
35
|
+
if (existsSync(configPath)) {
|
|
36
|
+
let existing;
|
|
37
|
+
try {
|
|
38
|
+
existing = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
this.error('Found .contextgit/config.json but could not parse it. Delete it and re-run init.');
|
|
42
|
+
}
|
|
43
|
+
const store = new LocalStore(existing.projectId);
|
|
44
|
+
const gitBranch = await detectGitBranch(cwd);
|
|
45
|
+
const branch = await store.getBranchByGitName(existing.projectId, gitBranch);
|
|
46
|
+
if (branch) {
|
|
47
|
+
this.log('ContextGit already initialized. Config found at .contextgit/config.json');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// DB missing or empty — recreate project + branch
|
|
51
|
+
this.log('Config found but DB is empty — recreating project and branch in DB.');
|
|
52
|
+
await store.createProject({ id: existing.projectId, name: existing.project });
|
|
53
|
+
await store.createBranch({
|
|
54
|
+
projectId: existing.projectId,
|
|
55
|
+
name: `Context: ${gitBranch}`,
|
|
56
|
+
gitBranch,
|
|
57
|
+
});
|
|
58
|
+
writeSystemPrompt(promptPath);
|
|
59
|
+
this.log(`Recreated project "${existing.project}" (${existing.projectId}) for branch: ${gitBranch}`);
|
|
60
|
+
this.log(`System prompt: .contextgit/system-prompt.md`);
|
|
61
|
+
this.log(SYSTEM_PROMPT_FRAGMENT);
|
|
62
|
+
if (flags.hooks) {
|
|
63
|
+
installGitHooks(cwd);
|
|
64
|
+
this.log('Git hooks installed (.git/hooks/post-commit, post-checkout, post-merge)');
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// ── Fresh init ─────────────────────────────────────────────────────────────
|
|
69
|
+
const projectName = flags.name ?? basename(cwd);
|
|
70
|
+
const projectId = nanoid();
|
|
71
|
+
// Open store (creates DB + runs migrations).
|
|
72
|
+
const store = new LocalStore(projectId);
|
|
73
|
+
await store.createProject({ id: projectId, name: projectName });
|
|
74
|
+
const gitBranch = await detectGitBranch(cwd);
|
|
75
|
+
await store.createBranch({
|
|
76
|
+
projectId,
|
|
77
|
+
name: `Context: ${gitBranch}`,
|
|
78
|
+
gitBranch,
|
|
79
|
+
});
|
|
80
|
+
// Write config
|
|
81
|
+
mkdirSync(configDir, { recursive: true });
|
|
82
|
+
const config = {
|
|
83
|
+
project: projectName,
|
|
84
|
+
projectId,
|
|
85
|
+
store: 'local',
|
|
86
|
+
agentRole: 'solo',
|
|
87
|
+
workflowType: 'interactive',
|
|
88
|
+
autoSnapshot: false,
|
|
89
|
+
snapshotInterval: 10,
|
|
90
|
+
embeddingModel: 'local',
|
|
91
|
+
};
|
|
92
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
93
|
+
writeSystemPrompt(promptPath);
|
|
94
|
+
this.log(`Initialized ContextGit for project: ${projectName}`);
|
|
95
|
+
this.log(`Project ID: ${projectId}`);
|
|
96
|
+
this.log(`Branch: ${gitBranch}`);
|
|
97
|
+
this.log(`Config: .contextgit/config.json`);
|
|
98
|
+
this.log(`DB: ~/.contextgit/projects/${projectId}.db`);
|
|
99
|
+
this.log(``);
|
|
100
|
+
if (flags.hooks) {
|
|
101
|
+
installGitHooks(cwd);
|
|
102
|
+
this.log(`Git hooks installed (.git/hooks/post-commit, post-checkout, post-merge)`);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.log(`Tip: run "contextgit init --hooks" to auto-capture context on every git commit`);
|
|
106
|
+
}
|
|
107
|
+
this.log(``);
|
|
108
|
+
this.log(`Add the following to your MCP system prompt (.contextgit/system-prompt.md):`);
|
|
109
|
+
this.log(``);
|
|
110
|
+
this.log(SYSTEM_PROMPT_FRAGMENT);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
114
|
+
async function detectGitBranch(cwd) {
|
|
115
|
+
try {
|
|
116
|
+
const git = simpleGit(cwd);
|
|
117
|
+
return (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return 'main';
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function writeSystemPrompt(promptPath) {
|
|
124
|
+
writeFileSync(promptPath, SYSTEM_PROMPT_FRAGMENT);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|