yarlo-cli 0.1.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/LICENSE +133 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +48 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +30 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +94 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/agent/setup.d.ts +3 -0
- package/dist/commands/agent/setup.d.ts.map +1 -0
- package/dist/commands/agent/setup.js +151 -0
- package/dist/commands/agent/setup.js.map +1 -0
- package/dist/commands/config.d.ts +15 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +41 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/done.d.ts +17 -0
- package/dist/commands/done.d.ts.map +1 -0
- package/dist/commands/done.js +46 -0
- package/dist/commands/done.js.map +1 -0
- package/dist/commands/edit.d.ts +17 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +58 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +39 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +113 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +9 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +51 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +30 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +94 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/plugins.d.ts +15 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +42 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/show.d.ts +17 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +45 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/status.d.ts +17 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +47 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +9 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +46 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/core/config.d.ts +24 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +110 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/fields.d.ts +8 -0
- package/dist/core/fields.d.ts.map +1 -0
- package/dist/core/fields.js +82 -0
- package/dist/core/fields.js.map +1 -0
- package/dist/core/naming.d.ts +12 -0
- package/dist/core/naming.d.ts.map +1 -0
- package/dist/core/naming.js +61 -0
- package/dist/core/naming.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +9 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +38 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/task.d.ts +7 -0
- package/dist/core/task.d.ts.map +1 -0
- package/dist/core/task.js +160 -0
- package/dist/core/task.js.map +1 -0
- package/dist/utils/output.d.ts +3 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +8 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Text, Box } from "ink";
|
|
4
|
+
import zod from "zod";
|
|
5
|
+
import { argument, option } from "pastel";
|
|
6
|
+
import { loadConfig } from "../core/config.js";
|
|
7
|
+
import { getTask } from "../core/task.js";
|
|
8
|
+
import { isJsonMode, jsonOutput } from "../utils/output.js";
|
|
9
|
+
export const description = "Show task details";
|
|
10
|
+
export const args = zod.tuple([
|
|
11
|
+
zod.string().describe(argument({ name: "id", description: "Task ID or prefix" })),
|
|
12
|
+
]);
|
|
13
|
+
export const options = zod.object({
|
|
14
|
+
json: zod
|
|
15
|
+
.boolean()
|
|
16
|
+
.describe(option({ description: "Output as JSON" }))
|
|
17
|
+
.default(false),
|
|
18
|
+
});
|
|
19
|
+
export default function Show({ args: [id], options: opts }) {
|
|
20
|
+
const [task, setTask] = React.useState(null);
|
|
21
|
+
const [error, setError] = React.useState(null);
|
|
22
|
+
React.useEffect(() => {
|
|
23
|
+
(async () => {
|
|
24
|
+
try {
|
|
25
|
+
const { config, configDir } = await loadConfig();
|
|
26
|
+
const result = await getTask(config, configDir, id);
|
|
27
|
+
if (isJsonMode() || opts.json) {
|
|
28
|
+
jsonOutput(result);
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
setTask(result);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
35
|
+
}
|
|
36
|
+
})();
|
|
37
|
+
}, []);
|
|
38
|
+
if (error)
|
|
39
|
+
return _jsx(Text, { color: "red", children: error });
|
|
40
|
+
if (!task)
|
|
41
|
+
return _jsx(Text, { children: "Loading..." });
|
|
42
|
+
const fieldEntries = Object.entries(task.fields).filter(([key]) => !["id", "title", "created_at", "updated_at"].includes(key));
|
|
43
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["[", task.id, "] ", task.title] }), _jsx(Box, { flexDirection: "column", children: fieldEntries.map(([key, value]) => (_jsxs(Text, { children: [_jsx(Text, { bold: true, children: key }), ": ", Array.isArray(value) ? value.join(", ") : String(value ?? "")] }, key))) }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["Created: ", task.created_at] }), _jsxs(Text, { dimColor: true, children: ["Updated: ", task.updated_at] }), _jsxs(Text, { dimColor: true, children: ["File: ", task.file_path] })] }), task.content && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "---" }), _jsx(Text, { children: task.content })] }))] }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../source/commands/show.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import zod from "zod";
|
|
2
|
+
export declare const description = "Change task status";
|
|
3
|
+
export declare const args: zod.ZodTuple<[zod.ZodString, zod.ZodString], null>;
|
|
4
|
+
export declare const options: zod.ZodObject<{
|
|
5
|
+
json: zod.ZodDefault<zod.ZodBoolean>;
|
|
6
|
+
}, "strip", zod.ZodTypeAny, {
|
|
7
|
+
json: boolean;
|
|
8
|
+
}, {
|
|
9
|
+
json?: boolean | undefined;
|
|
10
|
+
}>;
|
|
11
|
+
type Props = {
|
|
12
|
+
args: zod.infer<typeof args>;
|
|
13
|
+
options: zod.infer<typeof options>;
|
|
14
|
+
};
|
|
15
|
+
export default function Status({ args: [id, newStatus], options: opts }: Props): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../source/commands/status.tsx"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,KAAK,CAAC;AAOtB,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,eAAO,MAAM,IAAI,oDAGf,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;EAKlB,CAAC;AAEH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC7B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,2CAgC7E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Text } from "ink";
|
|
4
|
+
import zod from "zod";
|
|
5
|
+
import { argument, option } from "pastel";
|
|
6
|
+
import { loadConfig } from "../core/config.js";
|
|
7
|
+
import { updateTask } from "../core/task.js";
|
|
8
|
+
import { isJsonMode, jsonOutput } from "../utils/output.js";
|
|
9
|
+
export const description = "Change task status";
|
|
10
|
+
export const args = zod.tuple([
|
|
11
|
+
zod.string().describe(argument({ name: "id", description: "Task ID or prefix" })),
|
|
12
|
+
zod.string().describe(argument({ name: "status", description: "New status" })),
|
|
13
|
+
]);
|
|
14
|
+
export const options = zod.object({
|
|
15
|
+
json: zod
|
|
16
|
+
.boolean()
|
|
17
|
+
.describe(option({ description: "Output as JSON" }))
|
|
18
|
+
.default(false),
|
|
19
|
+
});
|
|
20
|
+
export default function Status({ args: [id, newStatus], options: opts }) {
|
|
21
|
+
const [task, setTask] = React.useState(null);
|
|
22
|
+
const [error, setError] = React.useState(null);
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
(async () => {
|
|
25
|
+
try {
|
|
26
|
+
const { config, configDir } = await loadConfig();
|
|
27
|
+
const result = await updateTask(config, configDir, id, {
|
|
28
|
+
fields: { status: newStatus },
|
|
29
|
+
});
|
|
30
|
+
if (isJsonMode() || opts.json) {
|
|
31
|
+
jsonOutput(result);
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
setTask(result);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
38
|
+
}
|
|
39
|
+
})();
|
|
40
|
+
}, []);
|
|
41
|
+
if (error)
|
|
42
|
+
return _jsx(Text, { color: "red", children: error });
|
|
43
|
+
if (!task)
|
|
44
|
+
return _jsx(Text, { children: "Updating..." });
|
|
45
|
+
return (_jsxs(Text, { color: "green", bold: true, children: ["[", task.id, "] status: ", newStatus] }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../source/commands/status.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAG5D,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEhD,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;IAC5B,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACjF,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;CAC/E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,GAAG;SACN,OAAO,EAAE;SACT,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;SACnD,OAAO,CAAC,KAAK,CAAC;CAClB,CAAC,CAAC;AAOH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAS;IAC5E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAc,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE9D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;oBACrD,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;iBAC9B,CAAC,CAAC;gBAEH,IAAI,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC9B,UAAU,CAAC,MAAM,CAAC,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,KAAK;QAAE,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,KAAK,GAAQ,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAC,IAAI,8BAAmB,CAAC;IAE3C,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,wBACpB,IAAI,CAAC,EAAE,gBAAY,SAAS,IACzB,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import zod from "zod";
|
|
2
|
+
export declare const description = "Uninstall a yarlo plugin";
|
|
3
|
+
export declare const args: zod.ZodTuple<[zod.ZodString], null>;
|
|
4
|
+
type Props = {
|
|
5
|
+
args: zod.infer<typeof args>;
|
|
6
|
+
};
|
|
7
|
+
export default function Uninstall({ args: [pluginName] }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../source/commands/uninstall.tsx"],"names":[],"mappings":"AAGA,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,eAAO,MAAM,WAAW,6BAA6B,CAAC;AAEtD,eAAO,MAAM,IAAI,qCAEf,CAAC;AAEH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,2CAyC9D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Text } from "ink";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import zod from "zod";
|
|
6
|
+
import { argument } from "pastel";
|
|
7
|
+
import { loadConfig, saveConfig } from "../core/config.js";
|
|
8
|
+
export const description = "Uninstall a yarlo plugin";
|
|
9
|
+
export const args = zod.tuple([
|
|
10
|
+
zod.string().describe(argument({ name: "plugin", description: "Plugin name" })),
|
|
11
|
+
]);
|
|
12
|
+
export default function Uninstall({ args: [pluginName] }) {
|
|
13
|
+
const [status, setStatus] = React.useState("removing");
|
|
14
|
+
const [error, setError] = React.useState("");
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
(async () => {
|
|
17
|
+
try {
|
|
18
|
+
const { config, configDir } = await loadConfig();
|
|
19
|
+
const shortName = pluginName.replace("yarlo-plugin-", "");
|
|
20
|
+
const packageName = `yarlo-plugin-${shortName}`;
|
|
21
|
+
if (!config.plugins.includes(shortName)) {
|
|
22
|
+
setError(`Plugin "${shortName}" is not installed`);
|
|
23
|
+
setStatus("error");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
execSync(`pnpm remove ${packageName}`, {
|
|
27
|
+
cwd: process.cwd(),
|
|
28
|
+
stdio: "pipe",
|
|
29
|
+
});
|
|
30
|
+
config.plugins = config.plugins.filter((p) => p !== shortName);
|
|
31
|
+
await saveConfig(config, configDir);
|
|
32
|
+
setStatus("done");
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
36
|
+
setStatus("error");
|
|
37
|
+
}
|
|
38
|
+
})();
|
|
39
|
+
}, []);
|
|
40
|
+
if (status === "error")
|
|
41
|
+
return _jsx(Text, { color: "red", children: error });
|
|
42
|
+
if (status === "removing")
|
|
43
|
+
return _jsxs(Text, { children: ["Removing ", pluginName, "..."] });
|
|
44
|
+
return (_jsxs(Text, { color: "green", bold: true, children: ["Uninstalled plugin: ", pluginName] }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../source/commands/uninstall.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,0BAA0B,CAAC;AAEtD,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;IAC5B,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;CAChF,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAS;IAC7D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgC,UAAU,CAAC,CAAC;IACtF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE7C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,gBAAgB,SAAS,EAAE,CAAC;gBAEhD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxC,QAAQ,CAAC,WAAW,SAAS,oBAAoB,CAAC,CAAC;oBACnD,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,OAAO;gBACT,CAAC;gBAED,QAAQ,CAAC,eAAe,WAAW,EAAE,EAAE;oBACrC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,KAAK,EAAE,MAAM;iBACd,CAAC,CAAC;gBAEH,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;gBAC/D,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAEpC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,KAAK,GAAQ,CAAC;IAChE,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,MAAC,IAAI,4BAAW,UAAU,WAAW,CAAC;IAExE,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,2CACD,UAAU,IAC1B,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { YarloConfig } from "yarlo-types";
|
|
2
|
+
export declare function getYarloVersion(): string;
|
|
3
|
+
export interface CompatibilityResult {
|
|
4
|
+
compatible: boolean;
|
|
5
|
+
warning?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Check if the current yarlo version is compatible with a config.
|
|
9
|
+
* - Same major = compatible
|
|
10
|
+
* - Current major > config major = compatible with migration warning
|
|
11
|
+
* - Current major < config major = incompatible (config was created by a newer yarlo)
|
|
12
|
+
*/
|
|
13
|
+
export declare function checkCompatibility(configVersion: string, currentVersion: string): CompatibilityResult;
|
|
14
|
+
export declare function findConfigDir(from?: string): Promise<string | null>;
|
|
15
|
+
export declare function loadConfig(configDir?: string): Promise<{
|
|
16
|
+
config: YarloConfig;
|
|
17
|
+
configDir: string;
|
|
18
|
+
projectDir: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function saveConfig(config: YarloConfig, configDir: string): Promise<void>;
|
|
21
|
+
export declare function getTasksDir(config: YarloConfig, configDir: string): string;
|
|
22
|
+
export declare function getAttachmentsDir(config: YarloConfig, configDir: string): string;
|
|
23
|
+
export declare function initProject(projectDir: string, config: YarloConfig): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../source/core/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAcD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,mBAAmB,CAmBrB;AAED,wBAAsB,aAAa,CACjC,IAAI,GAAE,MAAsB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED,wBAAsB,UAAU,CAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BzE;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CASjB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { parse, stringify } from "yaml";
|
|
5
|
+
const CONFIG_DIR = ".yarlo";
|
|
6
|
+
const CONFIG_FILE = "config.yml";
|
|
7
|
+
export function getYarloVersion() {
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
const pkg = require("../../package.json");
|
|
10
|
+
return pkg.version;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse a semver string into [major, minor, patch].
|
|
14
|
+
*/
|
|
15
|
+
function parseSemver(version) {
|
|
16
|
+
const parts = version.replace(/^v/, "").split(".");
|
|
17
|
+
return [
|
|
18
|
+
parseInt(parts[0] ?? "0", 10),
|
|
19
|
+
parseInt(parts[1] ?? "0", 10),
|
|
20
|
+
parseInt(parts[2] ?? "0", 10),
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if the current yarlo version is compatible with a config.
|
|
25
|
+
* - Same major = compatible
|
|
26
|
+
* - Current major > config major = compatible with migration warning
|
|
27
|
+
* - Current major < config major = incompatible (config was created by a newer yarlo)
|
|
28
|
+
*/
|
|
29
|
+
export function checkCompatibility(configVersion, currentVersion) {
|
|
30
|
+
const [configMajor] = parseSemver(configVersion);
|
|
31
|
+
const [currentMajor] = parseSemver(currentVersion);
|
|
32
|
+
if (configMajor === currentMajor) {
|
|
33
|
+
return { compatible: true };
|
|
34
|
+
}
|
|
35
|
+
if (currentMajor > configMajor) {
|
|
36
|
+
return {
|
|
37
|
+
compatible: true,
|
|
38
|
+
warning: `This project was created with yarlo ${configVersion}. You are running ${currentVersion}. Run \`yarlo init\` to update the config if needed.`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
compatible: false,
|
|
43
|
+
warning: `This project requires yarlo ${configVersion} or compatible. You are running ${currentVersion}. Please upgrade (e.g. \`npm i -g yarlo-cli\`).`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export async function findConfigDir(from = process.cwd()) {
|
|
47
|
+
let current = from;
|
|
48
|
+
while (true) {
|
|
49
|
+
const candidate = path.join(current, CONFIG_DIR);
|
|
50
|
+
try {
|
|
51
|
+
const stat = await fs.stat(candidate);
|
|
52
|
+
if (stat.isDirectory()) {
|
|
53
|
+
return candidate;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// not found, go up
|
|
58
|
+
}
|
|
59
|
+
const parent = path.dirname(current);
|
|
60
|
+
if (parent === current)
|
|
61
|
+
return null;
|
|
62
|
+
current = parent;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function loadConfig(configDir) {
|
|
66
|
+
const dir = configDir ?? (await findConfigDir());
|
|
67
|
+
if (!dir) {
|
|
68
|
+
throw new Error("No .yarlo directory found. Run `yarlo init` to initialize.");
|
|
69
|
+
}
|
|
70
|
+
const configPath = path.join(dir, CONFIG_FILE);
|
|
71
|
+
const content = await fs.readFile(configPath, "utf-8");
|
|
72
|
+
const config = parse(content);
|
|
73
|
+
// Compatibility check
|
|
74
|
+
if (config.yarlo_version) {
|
|
75
|
+
const currentVersion = await getYarloVersion();
|
|
76
|
+
const compat = checkCompatibility(config.yarlo_version, currentVersion);
|
|
77
|
+
if (!compat.compatible) {
|
|
78
|
+
throw new Error(compat.warning);
|
|
79
|
+
}
|
|
80
|
+
if (compat.warning) {
|
|
81
|
+
console.error(`Warning: ${compat.warning}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
config,
|
|
86
|
+
configDir: dir,
|
|
87
|
+
projectDir: path.dirname(dir),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export async function saveConfig(config, configDir) {
|
|
91
|
+
const configPath = path.join(configDir, CONFIG_FILE);
|
|
92
|
+
await fs.writeFile(configPath, stringify(config), "utf-8");
|
|
93
|
+
}
|
|
94
|
+
export function getTasksDir(config, configDir) {
|
|
95
|
+
return path.join(configDir, config.tasks_dir);
|
|
96
|
+
}
|
|
97
|
+
export function getAttachmentsDir(config, configDir) {
|
|
98
|
+
return path.join(configDir, config.attachments_dir);
|
|
99
|
+
}
|
|
100
|
+
export async function initProject(projectDir, config) {
|
|
101
|
+
const configDir = path.join(projectDir, CONFIG_DIR);
|
|
102
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
103
|
+
await fs.mkdir(path.join(configDir, config.tasks_dir), { recursive: true });
|
|
104
|
+
await fs.mkdir(path.join(configDir, config.attachments_dir), {
|
|
105
|
+
recursive: true,
|
|
106
|
+
});
|
|
107
|
+
await saveConfig(config, configDir);
|
|
108
|
+
return configDir;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../source/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FieldDefinition } from "yarlo-types";
|
|
2
|
+
export declare function validateFieldValue(field: FieldDefinition, value: unknown): {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
error?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function applyDefaults(fields: Record<string, unknown>, definitions: FieldDefinition[]): Record<string, unknown>;
|
|
7
|
+
export declare function getFieldDefinition(name: string, definitions: FieldDefinition[]): FieldDefinition | undefined;
|
|
8
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../source/core/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,OAAO,GACb;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAwEpC;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,eAAe,EAAE,GAC7B,eAAe,GAAG,SAAS,CAE7B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export function validateFieldValue(field, value) {
|
|
2
|
+
if (value === undefined || value === null) {
|
|
3
|
+
if (field.required && field.default === undefined) {
|
|
4
|
+
return { valid: false, error: `Field "${field.name}" is required` };
|
|
5
|
+
}
|
|
6
|
+
return { valid: true };
|
|
7
|
+
}
|
|
8
|
+
switch (field.type) {
|
|
9
|
+
case "text":
|
|
10
|
+
case "url":
|
|
11
|
+
if (typeof value !== "string") {
|
|
12
|
+
return {
|
|
13
|
+
valid: false,
|
|
14
|
+
error: `Field "${field.name}" must be a string`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
break;
|
|
18
|
+
case "number":
|
|
19
|
+
if (typeof value !== "number") {
|
|
20
|
+
return {
|
|
21
|
+
valid: false,
|
|
22
|
+
error: `Field "${field.name}" must be a number`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
break;
|
|
26
|
+
case "boolean":
|
|
27
|
+
if (typeof value !== "boolean") {
|
|
28
|
+
return {
|
|
29
|
+
valid: false,
|
|
30
|
+
error: `Field "${field.name}" must be a boolean`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
case "date":
|
|
35
|
+
if (typeof value !== "string" || isNaN(Date.parse(value))) {
|
|
36
|
+
return {
|
|
37
|
+
valid: false,
|
|
38
|
+
error: `Field "${field.name}" must be a valid date`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
case "single_select":
|
|
43
|
+
if (field.options && !field.options.includes(String(value))) {
|
|
44
|
+
return {
|
|
45
|
+
valid: false,
|
|
46
|
+
error: `Field "${field.name}" must be one of: ${field.options.join(", ")}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
case "multi_select":
|
|
51
|
+
if (!Array.isArray(value)) {
|
|
52
|
+
return {
|
|
53
|
+
valid: false,
|
|
54
|
+
error: `Field "${field.name}" must be an array`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (field.options) {
|
|
58
|
+
const invalid = value.filter((v) => !field.options.includes(String(v)));
|
|
59
|
+
if (invalid.length > 0) {
|
|
60
|
+
return {
|
|
61
|
+
valid: false,
|
|
62
|
+
error: `Field "${field.name}" contains invalid values: ${invalid.join(", ")}. Valid: ${field.options.join(", ")}`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
return { valid: true };
|
|
69
|
+
}
|
|
70
|
+
export function applyDefaults(fields, definitions) {
|
|
71
|
+
const result = { ...fields };
|
|
72
|
+
for (const def of definitions) {
|
|
73
|
+
if (result[def.name] === undefined && def.default !== undefined) {
|
|
74
|
+
result[def.name] = def.default;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
export function getFieldDefinition(name, definitions) {
|
|
80
|
+
return definitions.find((d) => d.name === name);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../source/core/fields.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,oBAAoB;iBAChD,CAAC;YACJ,CAAC;YACD,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,oBAAoB;iBAChD,CAAC;YACJ,CAAC;YACD,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,qBAAqB;iBACjD,CAAC;YACJ,CAAC;YACD,MAAM;QACR,KAAK,MAAM;YACT,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1D,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,wBAAwB;iBACpD,CAAC;YACJ,CAAC;YACD,MAAM;QACR,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5D,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,qBAAqB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC3E,CAAC;YACJ,CAAC;YACD,MAAM;QACR,KAAK,cAAc;YACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,oBAAoB;iBAChD,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;gBACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClH,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM;IACV,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAA+B,EAC/B,WAA8B;IAE9B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,WAA8B;IAE9B,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NamingStrategy } from "yarlo-types";
|
|
2
|
+
export declare function generateSlug(title: string): string;
|
|
3
|
+
export declare function generateUuid(): string;
|
|
4
|
+
export declare function generateIncremental(tasksDir: string): Promise<string>;
|
|
5
|
+
export declare function generateOrderedSlug(title: string, tasksDir: string): Promise<string>;
|
|
6
|
+
export declare function applyCustomPattern(pattern: string, values: {
|
|
7
|
+
order: string;
|
|
8
|
+
slug: string;
|
|
9
|
+
uuid: string;
|
|
10
|
+
}): string;
|
|
11
|
+
export declare function generateTaskId(strategy: NamingStrategy, title: string, tasksDir: string, customPattern?: string): Promise<string>;
|
|
12
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../source/core/naming.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3E;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD,MAAM,CAKR;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import slugify from "slugify";
|
|
3
|
+
import { nanoid } from "nanoid";
|
|
4
|
+
export function generateSlug(title) {
|
|
5
|
+
return slugify(title, { lower: true, strict: true });
|
|
6
|
+
}
|
|
7
|
+
export function generateUuid() {
|
|
8
|
+
return nanoid(8);
|
|
9
|
+
}
|
|
10
|
+
export async function generateIncremental(tasksDir) {
|
|
11
|
+
let max = 0;
|
|
12
|
+
try {
|
|
13
|
+
const files = await fs.readdir(tasksDir);
|
|
14
|
+
for (const file of files) {
|
|
15
|
+
const match = file.match(/^(\d+)/);
|
|
16
|
+
if (match) {
|
|
17
|
+
const num = parseInt(match[1], 10);
|
|
18
|
+
if (num > max)
|
|
19
|
+
max = num;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// directory might not exist yet
|
|
25
|
+
}
|
|
26
|
+
return String(max + 1).padStart(3, "0");
|
|
27
|
+
}
|
|
28
|
+
export async function generateOrderedSlug(title, tasksDir) {
|
|
29
|
+
const id = await generateIncremental(tasksDir);
|
|
30
|
+
const slug = generateSlug(title);
|
|
31
|
+
return `${id}-${slug}`;
|
|
32
|
+
}
|
|
33
|
+
export function applyCustomPattern(pattern, values) {
|
|
34
|
+
return pattern
|
|
35
|
+
.replace("{order}", values.order)
|
|
36
|
+
.replace("{slug}", values.slug)
|
|
37
|
+
.replace("{uuid}", values.uuid);
|
|
38
|
+
}
|
|
39
|
+
export async function generateTaskId(strategy, title, tasksDir, customPattern) {
|
|
40
|
+
switch (strategy) {
|
|
41
|
+
case "slug":
|
|
42
|
+
return generateSlug(title);
|
|
43
|
+
case "uuid":
|
|
44
|
+
return generateUuid();
|
|
45
|
+
case "incremental":
|
|
46
|
+
return generateIncremental(tasksDir);
|
|
47
|
+
case "ordered-slug":
|
|
48
|
+
return generateOrderedSlug(title, tasksDir);
|
|
49
|
+
case "custom": {
|
|
50
|
+
const order = await generateIncremental(tasksDir);
|
|
51
|
+
const slug = generateSlug(title);
|
|
52
|
+
const uuid = generateUuid();
|
|
53
|
+
return applyCustomPattern(customPattern ?? "{order}-{slug}", {
|
|
54
|
+
order,
|
|
55
|
+
slug,
|
|
56
|
+
uuid,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../source/core/naming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;gBACpC,IAAI,GAAG,GAAG,GAAG;oBAAE,GAAG,GAAG,GAAG,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,QAAgB;IAEhB,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAAqD;IAErD,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC;SAChC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;SAC9B,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAwB,EACxB,KAAa,EACb,QAAgB,EAChB,aAAsB;IAEtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,YAAY,EAAE,CAAC;QACxB,KAAK,aAAa;YAChB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,cAAc;YACjB,OAAO,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9C,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;YAC5B,OAAO,kBAAkB,CAAC,aAAa,IAAI,gBAAgB,EAAE;gBAC3D,KAAK;gBACL,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { YarloPlugin, YarloPluginContext, PluginCommand, PluginHooks } from "yarlo-types";
|
|
2
|
+
export interface LoadedPlugins {
|
|
3
|
+
commands: Map<string, PluginCommand>;
|
|
4
|
+
hooks: Map<keyof PluginHooks, Array<(...args: unknown[]) => void | Promise<void>>>;
|
|
5
|
+
plugins: YarloPlugin[];
|
|
6
|
+
}
|
|
7
|
+
export declare function loadPlugins(pluginNames: string[], ctx: YarloPluginContext): Promise<LoadedPlugins>;
|
|
8
|
+
export declare function runPluginCommand(command: PluginCommand, args: string[], ctx: YarloPluginContext): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=plugin-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../source/core/plugin-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,KAAK,EAAE,GAAG,CAAC,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EAAE,EACrB,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,aAAa,CAAC,CA4CxB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export async function loadPlugins(pluginNames, ctx) {
|
|
2
|
+
const commands = new Map();
|
|
3
|
+
const hooks = new Map();
|
|
4
|
+
const plugins = [];
|
|
5
|
+
for (const name of pluginNames) {
|
|
6
|
+
try {
|
|
7
|
+
const mod = await import(`yarlo-plugin-${name}`);
|
|
8
|
+
const plugin = mod.default ?? mod;
|
|
9
|
+
if (plugin.activate) {
|
|
10
|
+
await plugin.activate(ctx);
|
|
11
|
+
}
|
|
12
|
+
if (plugin.commands) {
|
|
13
|
+
for (const cmd of plugin.commands) {
|
|
14
|
+
commands.set(cmd.name, cmd);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (plugin.hooks) {
|
|
18
|
+
for (const [event, handler] of Object.entries(plugin.hooks)) {
|
|
19
|
+
const key = event;
|
|
20
|
+
if (!hooks.has(key)) {
|
|
21
|
+
hooks.set(key, []);
|
|
22
|
+
}
|
|
23
|
+
hooks.get(key).push(handler);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
plugins.push(plugin);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
30
|
+
console.error(`Failed to load plugin "${name}": ${message}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { commands, hooks, plugins };
|
|
34
|
+
}
|
|
35
|
+
export async function runPluginCommand(command, args, ctx) {
|
|
36
|
+
await command.run(args, ctx);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=plugin-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../source/core/plugin-loader.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAqB,EACrB,GAAuB;IAEvB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAGlB,CAAC;IACJ,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAgB,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;YAE/C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAClC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5D,MAAM,GAAG,GAAG,KAA0B,CAAC;oBACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACrB,CAAC;oBACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,OAAuD,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO,CAAC,KAAK,CACX,0BAA0B,IAAI,MAAM,OAAO,EAAE,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAsB,EACtB,IAAc,EACd,GAAuB;IAEvB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Task, CreateTaskInput, UpdateTaskInput, TaskFilter, YarloConfig } from "yarlo-types";
|
|
2
|
+
export declare function listTasks(config: YarloConfig, configDir: string, filter?: TaskFilter): Promise<Task[]>;
|
|
3
|
+
export declare function getTask(config: YarloConfig, configDir: string, id: string): Promise<Task>;
|
|
4
|
+
export declare function createTask(config: YarloConfig, configDir: string, input: CreateTaskInput): Promise<Task>;
|
|
5
|
+
export declare function updateTask(config: YarloConfig, configDir: string, id: string, input: UpdateTaskInput): Promise<Task>;
|
|
6
|
+
export declare function deleteTask(config: YarloConfig, configDir: string, id: string): Promise<Task>;
|
|
7
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../source/core/task.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,IAAI,EACJ,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAqCrB,wBAAsB,SAAS,CAC7B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,EAAE,CAAC,CAyCjB;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC,CAIf"}
|