@sworddut/myclaw 0.1.0 → 0.1.1
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.md +15 -6
- package/dist/commands/init.js +13 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/config/load-config.js +2 -0
- package/dist/config/load-config.js.map +1 -1
- package/dist/config/paths.d.ts +3 -0
- package/dist/config/paths.js +15 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +21 -1
- package/dist/config/schema.js +8 -2
- package/dist/config/schema.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,18 +18,27 @@ A CLI coding agent scaffold (TypeScript + oclif).
|
|
|
18
18
|
```bash
|
|
19
19
|
npm install
|
|
20
20
|
npm run build
|
|
21
|
-
cp .env.example .env
|
|
22
|
-
# fill OPENAI_API_KEY in .env
|
|
23
|
-
# optional: set model in env
|
|
24
|
-
# OPENAI_MODEL=gpt-4o-mini
|
|
25
|
-
# optional: for openai-compatible third-party endpoint
|
|
26
|
-
# OPENAI_BASE_URL=https://your-endpoint/v1
|
|
27
21
|
node ./bin/run.js init -f
|
|
22
|
+
# then fill credentials in ~/.myclaw/.env (or $MYCLAW_HOME/.env)
|
|
28
23
|
```
|
|
29
24
|
|
|
30
25
|
`OPENAI_BASE_URL` and `.myclawrc.json` `baseURL` both support OpenAI-compatible providers.
|
|
31
26
|
Model priority: `.myclawrc.json` `model` > `OPENAI_MODEL` > `gpt-4o-mini`.
|
|
32
27
|
|
|
28
|
+
## Global Home Directory
|
|
29
|
+
|
|
30
|
+
- Default home: `~/.myclaw`
|
|
31
|
+
- Override with env: `MYCLAW_HOME=/custom/path`
|
|
32
|
+
- Global env file: `~/.myclaw/.env`
|
|
33
|
+
- Memory file: `~/.myclaw/memory.md`
|
|
34
|
+
|
|
35
|
+
Create your global env:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
cp ~/.myclaw/.env.example ~/.myclaw/.env
|
|
39
|
+
# edit ~/.myclaw/.env
|
|
40
|
+
```
|
|
41
|
+
|
|
33
42
|
## Commands
|
|
34
43
|
|
|
35
44
|
```bash
|
package/dist/commands/init.js
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
|
+
import { getMemoryPath, getMyclawHome } from '../config/paths.js';
|
|
4
5
|
export default class Init extends Command {
|
|
5
|
-
static description = 'Initialize
|
|
6
|
+
static description = 'Initialize local project config and global myclaw home';
|
|
6
7
|
static flags = {
|
|
7
8
|
force: Flags.boolean({ char: 'f', description: 'overwrite existing config' })
|
|
8
9
|
};
|
|
9
10
|
async run() {
|
|
10
11
|
const { flags } = await this.parse(Init);
|
|
11
12
|
const targetDir = process.cwd();
|
|
13
|
+
const homeDir = getMyclawHome();
|
|
14
|
+
const memoryPath = getMemoryPath();
|
|
12
15
|
const configPath = resolve(targetDir, '.myclawrc.json');
|
|
13
|
-
const
|
|
16
|
+
const globalEnvExamplePath = resolve(homeDir, '.env.example');
|
|
14
17
|
await mkdir(targetDir, { recursive: true });
|
|
18
|
+
await mkdir(homeDir, { recursive: true });
|
|
15
19
|
await writeFile(configPath, JSON.stringify({
|
|
16
20
|
provider: 'openai',
|
|
17
21
|
model: '',
|
|
18
22
|
baseURL: '',
|
|
19
|
-
workspace: targetDir
|
|
23
|
+
workspace: targetDir,
|
|
24
|
+
homeDir,
|
|
25
|
+
memoryFile: memoryPath
|
|
20
26
|
}, null, 2) + '\n', { flag: flags.force ? 'w' : 'wx' });
|
|
21
|
-
await writeFile(
|
|
27
|
+
await writeFile(globalEnvExamplePath, 'OPENAI_API_KEY=\nOPENAI_MODEL=gpt-4o-mini\nOPENAI_BASE_URL=\nANTHROPIC_API_KEY=\n', { flag: flags.force ? 'w' : 'wx' });
|
|
28
|
+
await writeFile(memoryPath, '# myclaw memory\n\n- Add durable preferences and project notes here.\n', { flag: flags.force ? 'w' : 'wx' });
|
|
22
29
|
this.log(`Created ${configPath}`);
|
|
23
|
-
this.log(`Created ${
|
|
30
|
+
this.log(`Created ${globalEnvExamplePath}`);
|
|
31
|
+
this.log(`Created ${memoryPath}`);
|
|
24
32
|
}
|
|
25
33
|
}
|
|
26
34
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAA;AAE/D,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAU,WAAW,GAAG,wDAAwD,CAAA;IAEtF,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAC,CAAC;KAC5E,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;QAC/B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QACvD,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QAE7D,MAAM,KAAK,CAAC,SAAS,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;QACzC,MAAM,KAAK,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;QACvC,MAAM,SAAS,CACb,UAAU,EACV,IAAI,CAAC,SAAS,CACZ;YACE,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,SAAS;YACpB,OAAO;YACP,UAAU,EAAE,UAAU;SACvB,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,EACR,EAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAC,CACjC,CAAA;QAED,MAAM,SAAS,CACb,oBAAoB,EACpB,mFAAmF,EACnF,EAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAC,CACjC,CAAA;QACD,MAAM,SAAS,CACb,UAAU,EACV,wEAAwE,EACxE,EAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAC,CACjC,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,WAAW,oBAAoB,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAA;IACnC,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { cosmiconfig } from 'cosmiconfig';
|
|
2
2
|
import dotenv from 'dotenv';
|
|
3
3
|
import { appConfigSchema } from './schema.js';
|
|
4
|
+
import { getGlobalEnvPath } from './paths.js';
|
|
5
|
+
dotenv.config({ path: getGlobalEnvPath() });
|
|
4
6
|
dotenv.config();
|
|
5
7
|
export async function loadConfig() {
|
|
6
8
|
const explorer = cosmiconfig('myclaw');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAA;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAC,eAAe,EAAiB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/config/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAA;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAC,eAAe,EAAiB,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAA;AAE3C,MAAM,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAE,EAAC,CAAC,CAAA;AACzC,MAAM,CAAC,MAAM,EAAE,CAAA;AAEf,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;IACtC,OAAO,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
export function getMyclawHome() {
|
|
4
|
+
const custom = process.env.MYCLAW_HOME?.trim();
|
|
5
|
+
if (custom)
|
|
6
|
+
return resolve(custom);
|
|
7
|
+
return resolve(homedir(), '.myclaw');
|
|
8
|
+
}
|
|
9
|
+
export function getGlobalEnvPath() {
|
|
10
|
+
return resolve(getMyclawHome(), '.env');
|
|
11
|
+
}
|
|
12
|
+
export function getMemoryPath() {
|
|
13
|
+
return resolve(getMyclawHome(), 'memory.md');
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;IAC9C,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,aAAa,EAAE,EAAE,WAAW,CAAC,CAAA;AAC9C,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const appConfigSchema: z.ZodObject<{
|
|
2
|
+
export declare const appConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
3
3
|
provider: z.ZodDefault<z.ZodEnum<["mock", "openai", "anthropic"]>>;
|
|
4
4
|
model: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
|
|
5
5
|
baseURL: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
|
|
6
6
|
workspace: z.ZodDefault<z.ZodString>;
|
|
7
|
+
homeDir: z.ZodDefault<z.ZodString>;
|
|
8
|
+
memoryFile: z.ZodOptional<z.ZodString>;
|
|
7
9
|
}, "strip", z.ZodTypeAny, {
|
|
8
10
|
provider: "mock" | "openai" | "anthropic";
|
|
9
11
|
workspace: string;
|
|
12
|
+
homeDir: string;
|
|
10
13
|
model?: string | undefined;
|
|
11
14
|
baseURL?: string | undefined;
|
|
15
|
+
memoryFile?: string | undefined;
|
|
12
16
|
}, {
|
|
13
17
|
provider?: "mock" | "openai" | "anthropic" | undefined;
|
|
14
18
|
model?: unknown;
|
|
15
19
|
baseURL?: unknown;
|
|
16
20
|
workspace?: string | undefined;
|
|
21
|
+
homeDir?: string | undefined;
|
|
22
|
+
memoryFile?: string | undefined;
|
|
23
|
+
}>, {
|
|
24
|
+
memoryFile: string;
|
|
25
|
+
provider: "mock" | "openai" | "anthropic";
|
|
26
|
+
workspace: string;
|
|
27
|
+
homeDir: string;
|
|
28
|
+
model?: string | undefined;
|
|
29
|
+
baseURL?: string | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
provider?: "mock" | "openai" | "anthropic" | undefined;
|
|
32
|
+
model?: unknown;
|
|
33
|
+
baseURL?: unknown;
|
|
34
|
+
workspace?: string | undefined;
|
|
35
|
+
homeDir?: string | undefined;
|
|
36
|
+
memoryFile?: string | undefined;
|
|
17
37
|
}>;
|
|
18
38
|
export type AppConfig = z.infer<typeof appConfigSchema>;
|
package/dist/config/schema.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { getMemoryPath, getMyclawHome } from './paths.js';
|
|
2
3
|
export const appConfigSchema = z.object({
|
|
3
4
|
provider: z.enum(['mock', 'openai', 'anthropic']).default('openai'),
|
|
4
5
|
model: z.preprocess((value) => (typeof value === 'string' && value.trim() === '' ? undefined : value), z.string().trim().optional()),
|
|
5
6
|
baseURL: z.preprocess((value) => (typeof value === 'string' && value.trim() === '' ? undefined : value), z.string().trim().optional()),
|
|
6
|
-
workspace: z.string().default(process.cwd())
|
|
7
|
-
|
|
7
|
+
workspace: z.string().default(process.cwd()),
|
|
8
|
+
homeDir: z.string().default(getMyclawHome()),
|
|
9
|
+
memoryFile: z.string().optional()
|
|
10
|
+
}).transform((config) => ({
|
|
11
|
+
...config,
|
|
12
|
+
memoryFile: config.memoryFile ?? getMemoryPath()
|
|
13
|
+
}));
|
|
8
14
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,YAAY,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnE,KAAK,EAAE,CAAC,CAAC,UAAU,CACjB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EACjF,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAC7B;IACD,OAAO,EAAE,CAAC,CAAC,UAAU,CACnB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EACjF,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAC7B;IACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,GAAG,MAAM;IACT,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,aAAa,EAAE;CACjD,CAAC,CAAC,CAAA"}
|