@stacksjs/buddy 0.70.163 → 0.70.164
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 +1 -1
- package/dist/cli.js +1 -0
- package/dist/commands/ai-context.js +1 -1
- package/dist/commands/create.js +1 -1
- package/dist/commands/deploy.d.ts +11 -1
- package/dist/commands/deploy.js +22 -4
- package/dist/commands/dev.js +44 -14
- package/dist/commands/docs/buddy-commands.d.ts +8 -0
- package/dist/commands/docs/buddy-commands.js +116 -0
- package/dist/commands/docs/buddy-commands.test.d.ts +1 -0
- package/dist/commands/docs/buddy-commands.test.js +38 -0
- package/dist/commands/docs/generated-artifacts.d.ts +3 -0
- package/dist/commands/docs/generated-artifacts.js +69 -0
- package/dist/commands/docs/generated-artifacts.test.d.ts +1 -0
- package/dist/commands/docs/generated-artifacts.test.js +19 -0
- package/dist/commands/docs/links.d.ts +18 -0
- package/dist/commands/docs/links.js +83 -0
- package/dist/commands/docs/links.test.d.ts +1 -0
- package/dist/commands/docs/links.test.js +73 -0
- package/dist/commands/docs.d.ts +7 -0
- package/dist/commands/docs.js +24 -0
- package/dist/commands/doctor.js +8 -0
- package/dist/commands/env.d.ts +14 -0
- package/dist/commands/env.js +73 -7
- package/dist/commands/generate.js +1 -1
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/mail.js +1 -1
- package/dist/commands/migrate.js +4 -4
- package/dist/commands/protocol/craft-evidence.d.ts +76 -0
- package/dist/commands/protocol/craft-evidence.js +98 -0
- package/dist/commands/protocol/craft-evidence.test.d.ts +1 -0
- package/dist/commands/protocol/craft-evidence.test.js +20 -0
- package/dist/commands/protocol/desktop-lifecycle-report.d.ts +16 -0
- package/dist/commands/protocol/desktop-lifecycle-report.js +57 -0
- package/dist/commands/protocol/desktop-lifecycle-report.test.d.ts +1 -0
- package/dist/commands/protocol/desktop-lifecycle-report.test.js +32 -0
- package/dist/commands/protocol/desktop-support.d.ts +1 -0
- package/dist/commands/protocol/desktop-support.js +32 -0
- package/dist/commands/protocol/desktop-workflow.test.d.ts +1 -0
- package/dist/commands/protocol/desktop-workflow.test.js +33 -0
- package/dist/commands/protocol/driver-registry.d.ts +1 -0
- package/dist/commands/protocol/driver-registry.js +71 -0
- package/dist/commands/protocol/pantry-evidence.d.ts +67 -0
- package/dist/commands/protocol/pantry-evidence.js +144 -0
- package/dist/commands/protocol/pantry-evidence.test.d.ts +1 -0
- package/dist/commands/protocol/pantry-evidence.test.js +29 -0
- package/dist/commands/protocol/release-manifest.d.ts +30 -0
- package/dist/commands/protocol/release-manifest.js +102 -0
- package/dist/commands/protocol/release-manifest.test.d.ts +1 -0
- package/dist/commands/protocol/release-manifest.test.js +34 -0
- package/dist/commands/protocol/run-conformance.d.ts +21 -0
- package/dist/commands/protocol/run-conformance.js +358 -0
- package/dist/commands/protocol/run-conformance.test.d.ts +1 -0
- package/dist/commands/protocol/run-conformance.test.js +52 -0
- package/dist/commands/protocol/run-driver-contracts.d.ts +7 -0
- package/dist/commands/protocol/run-driver-contracts.js +94 -0
- package/dist/commands/protocol/run-driver-contracts.test.d.ts +1 -0
- package/dist/commands/protocol/run-driver-contracts.test.js +18 -0
- package/dist/commands/protocol/source-manifest.d.ts +25 -0
- package/dist/commands/protocol/source-manifest.js +113 -0
- package/dist/commands/protocol/sync-suite.d.ts +8 -0
- package/dist/commands/protocol/sync-suite.js +137 -0
- package/dist/commands/protocol/sync-suite.test.d.ts +1 -0
- package/dist/commands/protocol/sync-suite.test.js +44 -0
- package/dist/commands/protocol.d.ts +8 -0
- package/dist/commands/protocol.js +60 -0
- package/dist/commands/publish.js +149 -0
- package/dist/commands/run-tool.d.ts +7 -0
- package/dist/commands/run-tool.js +9 -0
- package/dist/commands/seed.js +15 -40
- package/dist/commands/serve.d.ts +18 -5
- package/dist/commands/serve.js +21 -2
- package/dist/commands/setup-ai.d.ts +39 -0
- package/dist/commands/setup-ai.js +121 -0
- package/dist/commands/setup.js +22 -0
- package/dist/lazy-commands.js +27 -1
- package/package.json +43 -42
package/dist/commands/serve.d.ts
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import type { CLI } from '@stacksjs/types';
|
|
2
2
|
/**
|
|
3
|
-
* Resolve the project's includes directory
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* one
|
|
3
|
+
* Resolve the project's includes directory.
|
|
4
|
+
*
|
|
5
|
+
* A configured `config/stx.ts#partialsDir` wins outright. The convention list
|
|
6
|
+
* below is only a fallback for apps that never set one, and it cannot stand in
|
|
7
|
+
* for the config: the candidates are probed for existence in order, so an app
|
|
8
|
+
* that keeps its includes in `resources/components` but also has an unrelated
|
|
9
|
+
* `resources/partials` directory silently resolved to the wrong one and every
|
|
10
|
+
* `@include` failed with ENOENT at runtime.
|
|
11
|
+
*
|
|
12
|
+
* The configured value is relative to the stx root (`resources`), matching how
|
|
13
|
+
* stx itself reads it, but an app-root-relative path is accepted too so either
|
|
14
|
+
* spelling resolves.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveUserPartialsPath(cwd?: unknown, configuredDir?: string): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Read `partialsDir` off the app's stx config. Failure is non-fatal: without
|
|
19
|
+
* it {@link resolveUserPartialsPath} falls back to the conventions.
|
|
7
20
|
*/
|
|
8
|
-
export declare function
|
|
21
|
+
export declare function loadStxPartialsDir(cwd?: unknown): Promise<string | undefined>;
|
|
9
22
|
/**` requests (and any non-GET/HEAD verb) are
|
|
10
23
|
* reverse-proxied to the API process — mirroring the dev views server — so
|
|
11
24
|
* scaffolded `fetch('/api/...')` calls behave identically in production
|
package/dist/commands/serve.js
CHANGED
|
@@ -30,7 +30,15 @@ function parseCookies(req) {
|
|
|
30
30
|
}
|
|
31
31
|
return out;
|
|
32
32
|
}
|
|
33
|
-
export function resolveUserPartialsPath(cwd = process.cwd()) {
|
|
33
|
+
export function resolveUserPartialsPath(cwd = process.cwd(), configuredDir) {
|
|
34
|
+
if (configuredDir) {
|
|
35
|
+
const configured = [
|
|
36
|
+
join(cwd, "resources", configuredDir),
|
|
37
|
+
join(cwd, configuredDir)
|
|
38
|
+
].find((candidate) => existsSync(candidate));
|
|
39
|
+
if (configured)
|
|
40
|
+
return configured;
|
|
41
|
+
}
|
|
34
42
|
const relative = [
|
|
35
43
|
"resources/partials",
|
|
36
44
|
"resources/views/partials",
|
|
@@ -39,6 +47,17 @@ export function resolveUserPartialsPath(cwd = process.cwd()) {
|
|
|
39
47
|
].find((candidate) => existsSync(join(cwd, candidate)));
|
|
40
48
|
return relative ? join(cwd, relative) : void 0;
|
|
41
49
|
}
|
|
50
|
+
export async function loadStxPartialsDir(cwd = process.cwd()) {
|
|
51
|
+
const configPath = join(cwd, "config/stx.ts");
|
|
52
|
+
if (!existsSync(configPath))
|
|
53
|
+
return;
|
|
54
|
+
try {
|
|
55
|
+
const dir = (await import(configPath)).default?.partialsDir;
|
|
56
|
+
return typeof dir === "string" && dir.length > 0 ? dir : void 0;
|
|
57
|
+
} catch {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
42
61
|
export function serve(buddy) {
|
|
43
62
|
buddy.command("serve", "Start the production HTTP server (STX views + /api proxy + coming-soon/maintenance gate)").option("-p, --port <port>", "Port to listen on (defaults to PORT env or 3000)").option("--verbose", "Enable verbose output", { default: !1 }).action(async (options) => {
|
|
44
63
|
if (options?.port)
|
|
@@ -62,7 +81,7 @@ export function serve(buddy) {
|
|
|
62
81
|
} catch {}
|
|
63
82
|
if (!stxServe)
|
|
64
83
|
({ serve: stxServe } = await import("bun-plugin-stx/serve"));
|
|
65
|
-
const stxModule = await resolveVendoredStxModule(), { site: siteConfig, i18n: i18nConfig } = await loadStxSiteConfig(), userViewsPath = "resources/views", defaultsResources = resolveDefaultsResources(), defaultViewsPath = join(defaultsResources, "views"), userLayoutsPath = existsSync("resources/views/layouts") ? "resources/views/layouts" : "resources/layouts", userPartialsPath = resolveUserPartialsPath(), apiBase = process.env.API_URL || `http://127.0.0.1:${Number(process.env.PORT_API) || config.ports?.api || 3008}`;
|
|
84
|
+
const stxModule = await resolveVendoredStxModule(), { site: siteConfig, i18n: i18nConfig } = await loadStxSiteConfig(), userViewsPath = "resources/views", defaultsResources = resolveDefaultsResources(), defaultViewsPath = join(defaultsResources, "views"), userLayoutsPath = existsSync("resources/views/layouts") ? "resources/views/layouts" : "resources/layouts", userPartialsPath = resolveUserPartialsPath(process.cwd(), await loadStxPartialsDir()), apiBase = process.env.API_URL || `http://127.0.0.1:${Number(process.env.PORT_API) || config.ports?.api || 3008}`;
|
|
66
85
|
log.info(`Starting production server on port ${port}...`);
|
|
67
86
|
await stxServe({
|
|
68
87
|
patterns: [userViewsPath, defaultViewsPath],
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare function isAiProvider(value: string): value is AiProvider;
|
|
2
|
+
/**
|
|
3
|
+
* Sets a project up for one AI coding agent. Idempotent: re-running it after a
|
|
4
|
+
* framework upgrade refreshes what it owns and leaves everything else alone.
|
|
5
|
+
*/
|
|
6
|
+
export declare function setupAiProvider(provider: AiProvider, options?: SetupAiOptions): SetupAiResult;
|
|
7
|
+
/**
|
|
8
|
+
* Renders the result of a setup run.
|
|
9
|
+
*/
|
|
10
|
+
export declare function reportAiSetup(provider: AiProviderDefinition, result: SetupAiResult): void;
|
|
11
|
+
/*.mdc`, Copilot reads `.github/copilot-instructions.md`,
|
|
12
|
+
* and Gemini CLI reads `GEMINI.md`.
|
|
13
|
+
*/
|
|
14
|
+
export declare const AI_PROVIDERS: readonly AiProviderDefinition[];
|
|
15
|
+
export declare interface AiProviderDefinition {
|
|
16
|
+
id: AiProvider
|
|
17
|
+
label: string
|
|
18
|
+
reads: string[]
|
|
19
|
+
}
|
|
20
|
+
export declare interface SetupAiOptions {
|
|
21
|
+
copy?: boolean
|
|
22
|
+
force?: boolean
|
|
23
|
+
}
|
|
24
|
+
export declare interface SetupAiResult {
|
|
25
|
+
created: string[]
|
|
26
|
+
skipped: string[]
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `buddy setup:ai` - wires a project up for an AI coding agent.
|
|
30
|
+
*
|
|
31
|
+
* The framework keeps its agent material in `storage/framework/defaults/ai`.
|
|
32
|
+
* Nothing there is read at runtime; this command materializes it into whatever
|
|
33
|
+
* files and directories the chosen agent actually looks for.
|
|
34
|
+
*
|
|
35
|
+
* Only `AGENTS.md` is committed - it is shared guidance every agent reads, and
|
|
36
|
+
* it belongs in review. The generated per-agent directories are gitignored,
|
|
37
|
+
* because which agent a developer uses is a personal choice.
|
|
38
|
+
*/
|
|
39
|
+
export type AiProvider = 'claude' | 'codex' | 'cursor' | 'copilot' | 'gemini';
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, readdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import { dim, green, log, yellow } from "@stacksjs/cli";
|
|
4
|
+
import { frameworkPath, join, projectPath, relative } from "@stacksjs/path";
|
|
5
|
+
import { listSkills, resolveSkillPath } from "@stacksjs/skills";
|
|
6
|
+
export const AI_PROVIDERS = [
|
|
7
|
+
{ id: "claude", label: "Claude Code", reads: ["AGENTS.md", "CLAUDE.md", ".claude/skills", ".claude/launch.json"] },
|
|
8
|
+
{ id: "codex", label: "OpenAI Codex CLI", reads: ["AGENTS.md"] },
|
|
9
|
+
{ id: "cursor", label: "Cursor", reads: ["AGENTS.md", ".cursor/rules"] },
|
|
10
|
+
{ id: "copilot", label: "GitHub Copilot", reads: ["AGENTS.md", ".github/copilot-instructions.md"] },
|
|
11
|
+
{ id: "gemini", label: "Gemini CLI", reads: ["AGENTS.md", "GEMINI.md"] }
|
|
12
|
+
];
|
|
13
|
+
export function isAiProvider(value) {
|
|
14
|
+
return AI_PROVIDERS.some((provider) => provider.id === value);
|
|
15
|
+
}
|
|
16
|
+
function materialize(target, path, options) {
|
|
17
|
+
const existing = lstatSync(path, { throwIfNoEntry: !1 });
|
|
18
|
+
if (existing) {
|
|
19
|
+
if (!existing.isSymbolicLink() && !options.force)
|
|
20
|
+
return !1;
|
|
21
|
+
rmSync(path, { recursive: !0, force: !0 });
|
|
22
|
+
}
|
|
23
|
+
mkdirSync(join(path, ".."), { recursive: !0 });
|
|
24
|
+
if (options.copy)
|
|
25
|
+
cpSync(target, path, { recursive: !0 });
|
|
26
|
+
else
|
|
27
|
+
symlinkSync(relative(join(path, ".."), target), path, process.platform === "win32" ? "junction" : "dir");
|
|
28
|
+
return !0;
|
|
29
|
+
}
|
|
30
|
+
function materializeFile(source, path, options) {
|
|
31
|
+
if (existsSync(path) && !options.force)
|
|
32
|
+
return !1;
|
|
33
|
+
mkdirSync(join(path, ".."), { recursive: !0 });
|
|
34
|
+
cpSync(source, path, { recursive: !0, force: !0 });
|
|
35
|
+
return !0;
|
|
36
|
+
}
|
|
37
|
+
function installSkills(destination, options) {
|
|
38
|
+
const names = listSkills();
|
|
39
|
+
let installed = 0, skipped = 0;
|
|
40
|
+
mkdirSync(destination, { recursive: !0 });
|
|
41
|
+
for (const entry of readdirSync(destination)) {
|
|
42
|
+
const path = join(destination, entry);
|
|
43
|
+
if (lstatSync(path, { throwIfNoEntry: !1 })?.isSymbolicLink() && !existsSync(path))
|
|
44
|
+
rmSync(path, { force: !0 });
|
|
45
|
+
}
|
|
46
|
+
for (const name of names) {
|
|
47
|
+
const source = resolveSkillPath(name);
|
|
48
|
+
if (!source)
|
|
49
|
+
continue;
|
|
50
|
+
if (materialize(source, join(destination, name), options))
|
|
51
|
+
installed++;
|
|
52
|
+
else
|
|
53
|
+
skipped++;
|
|
54
|
+
}
|
|
55
|
+
return { installed, skipped };
|
|
56
|
+
}
|
|
57
|
+
export function setupAiProvider(provider, options = {}) {
|
|
58
|
+
const created = [], skipped = [], defaults = frameworkPath("defaults/ai"), rel = (path) => relative(projectPath(), path), record = (path, didCreate) => {
|
|
59
|
+
(didCreate ? created : skipped).push(rel(path));
|
|
60
|
+
}, agents = projectPath("AGENTS.md");
|
|
61
|
+
record(agents, materializeFile(join(defaults, "AGENTS.md"), agents, { ...options, force: !1 }));
|
|
62
|
+
switch (provider) {
|
|
63
|
+
case "claude": {
|
|
64
|
+
const claudeMd = projectPath("CLAUDE.md");
|
|
65
|
+
record(claudeMd, materialize(agents, claudeMd, { ...options, copy: !1 }));
|
|
66
|
+
const launch = projectPath(".claude/launch.json");
|
|
67
|
+
record(launch, materializeFile(join(defaults, "claude/launch.json"), launch, options));
|
|
68
|
+
const skillsDir = projectPath(".claude/skills"), { installed, skipped: untouched } = installSkills(skillsDir, options);
|
|
69
|
+
if (installed > 0)
|
|
70
|
+
created.push(`${rel(skillsDir)} (${installed} skills)`);
|
|
71
|
+
if (untouched > 0)
|
|
72
|
+
skipped.push(`${rel(skillsDir)} (${untouched} skills)`);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case "codex":
|
|
76
|
+
break;
|
|
77
|
+
case "cursor": {
|
|
78
|
+
const rules = projectPath(".cursor/rules");
|
|
79
|
+
record(rules, materialize(frameworkPath("defaults/ide/cursor/rules"), rules, options));
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "copilot": {
|
|
83
|
+
const instructions = projectPath(".github/copilot-instructions.md");
|
|
84
|
+
if (existsSync(instructions) && !options.force)
|
|
85
|
+
skipped.push(rel(instructions));
|
|
86
|
+
else {
|
|
87
|
+
mkdirSync(projectPath(".github"), { recursive: !0 });
|
|
88
|
+
writeFileSync(instructions, pointerFile("AGENTS.md"), "utf8");
|
|
89
|
+
created.push(rel(instructions));
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case "gemini": {
|
|
94
|
+
const geminiMd = projectPath("GEMINI.md");
|
|
95
|
+
record(geminiMd, materialize(agents, geminiMd, { ...options, copy: !1 }));
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { created, skipped };
|
|
100
|
+
}
|
|
101
|
+
function pointerFile(target) {
|
|
102
|
+
return [
|
|
103
|
+
"# Project instructions",
|
|
104
|
+
"",
|
|
105
|
+
`This project keeps its agent guidance in [\`${target}\`](../${target}), so every`,
|
|
106
|
+
"agent works from the same rules. Read that file.",
|
|
107
|
+
"",
|
|
108
|
+
"Regenerate this pointer with `buddy setup:ai copilot --force`.",
|
|
109
|
+
""
|
|
110
|
+
].join(`
|
|
111
|
+
`);
|
|
112
|
+
}
|
|
113
|
+
export function reportAiSetup(provider, result) {
|
|
114
|
+
for (const path of result.created)
|
|
115
|
+
log.info(` ${green("+")} ${path}`);
|
|
116
|
+
for (const path of result.skipped)
|
|
117
|
+
log.info(` ${yellow("\xB7")} ${path} ${dim("(already present, left alone)")}`);
|
|
118
|
+
if (result.created.length === 0)
|
|
119
|
+
log.info(dim(" Nothing to do - re-run with --force to overwrite."));
|
|
120
|
+
log.success(`${provider.label} is set up. It reads: ${provider.reads.join(", ")}`);
|
|
121
|
+
}
|
package/dist/commands/setup.js
CHANGED
|
@@ -21,6 +21,9 @@ export function setup(buddy) {
|
|
|
21
21
|
const descriptions = {
|
|
22
22
|
setup: "This command ensures your project is setup correctly",
|
|
23
23
|
ssl: "Setup SSL certificates and hosts file for HTTPS development",
|
|
24
|
+
ai: "Set the project up for an AI coding agent (Claude Code, Codex, Cursor, Copilot, Gemini)",
|
|
25
|
+
copy: "Copy the agent files instead of symlinking them, so they can be edited per project",
|
|
26
|
+
force: "Overwrite files that already exist",
|
|
24
27
|
ohMyZsh: "Enable Oh My Zsh",
|
|
25
28
|
aws: "Ensures AWS is connected to the project",
|
|
26
29
|
project: "Target a specific project",
|
|
@@ -49,6 +52,25 @@ export function setup(buddy) {
|
|
|
49
52
|
log.info("You may need to manually trust certificates or update hosts file");
|
|
50
53
|
}
|
|
51
54
|
});
|
|
55
|
+
buddy.command("setup:ai [provider]", descriptions.ai).alias("ai:setup").option("--copy", descriptions.copy, { default: !1 }).option("--force", descriptions.force, { default: !1 }).option("--verbose", descriptions.verbose, { default: !1 }).action(async (provider, options) => {
|
|
56
|
+
log.debug("Running `buddy setup:ai` ...", options);
|
|
57
|
+
const { AI_PROVIDERS, isAiProvider, reportAiSetup, setupAiProvider } = await import("./setup-ai");
|
|
58
|
+
let id = provider;
|
|
59
|
+
if (!id) {
|
|
60
|
+
const { select } = await import("@stacksjs/cli");
|
|
61
|
+
id = await select({
|
|
62
|
+
message: "Which AI coding agent do you use?",
|
|
63
|
+
choices: AI_PROVIDERS.map((entry) => ({ value: entry.id, label: entry.label })),
|
|
64
|
+
initial: 0
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (!id || !isAiProvider(id)) {
|
|
68
|
+
log.error(`Unknown AI provider: ${id}. Expected one of: ${AI_PROVIDERS.map((entry) => entry.id).join(", ")}`);
|
|
69
|
+
process.exit(ExitCode.InvalidArgument);
|
|
70
|
+
}
|
|
71
|
+
const definition = AI_PROVIDERS.find((entry) => entry.id === id);
|
|
72
|
+
reportAiSetup(definition, setupAiProvider(id, { copy: options.copy, force: options.force }));
|
|
73
|
+
});
|
|
52
74
|
buddy.command("setup:oh-my-zsh", descriptions.ohMyZsh).alias("upgrade:oh-my-zsh").option("--verbose", descriptions.verbose, { default: !1 }).action(async (_options) => {
|
|
53
75
|
log.debug("Running `buddy setup:oh-my-zsh` ...", _options);
|
|
54
76
|
const result = await runAction(Action.UpgradeShell);
|
package/dist/lazy-commands.js
CHANGED
|
@@ -100,6 +100,10 @@ const commandRegistry = {
|
|
|
100
100
|
serve: { path: "./commands/serve.js", exportName: "serve" },
|
|
101
101
|
"serve:api": { path: "./commands/serve.js", exportName: "serveApi" },
|
|
102
102
|
setup: { path: "./commands/setup.js", exportName: "setup" },
|
|
103
|
+
"setup:ai": { path: "./commands/setup.js", exportName: "setup" },
|
|
104
|
+
"setup:ssl": { path: "./commands/setup.js", exportName: "setup" },
|
|
105
|
+
"setup:oh-my-zsh": { path: "./commands/setup.js", exportName: "setup" },
|
|
106
|
+
"ai:setup": { path: "./commands/setup.js", exportName: "setup" },
|
|
103
107
|
share: { path: "./commands/share.js", exportName: "share" },
|
|
104
108
|
stack: { path: "./commands/stacks.js", exportName: "stacks" },
|
|
105
109
|
sms: { path: "./commands/sms.js", exportName: "sms" },
|
|
@@ -109,7 +113,29 @@ const commandRegistry = {
|
|
|
109
113
|
types: { path: "./commands/types.js", exportName: "types" },
|
|
110
114
|
undeploy: { path: "./commands/cloud.js", exportName: "cloud" },
|
|
111
115
|
upgrade: { path: "./commands/upgrade.js", exportName: "upgrade" },
|
|
112
|
-
version: { path: "./commands/version.js", exportName: "version" }
|
|
116
|
+
version: { path: "./commands/version.js", exportName: "version" },
|
|
117
|
+
"protocol:conformance": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
118
|
+
"protocol:sync": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
119
|
+
"protocol:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
120
|
+
"protocol:manifest": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
121
|
+
"protocol:manifest:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
122
|
+
"protocol:release": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
123
|
+
"protocol:release:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
124
|
+
"protocol:drivers": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
125
|
+
"protocol:drivers:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
126
|
+
"protocol:drivers:test": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
127
|
+
"protocol:desktop": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
128
|
+
"protocol:desktop:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
129
|
+
"protocol:pantry": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
130
|
+
"protocol:pantry:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
131
|
+
"protocol:craft": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
132
|
+
"protocol:craft:check": { path: "./commands/protocol.js", exportName: "protocol" },
|
|
133
|
+
"docs:buddy": { path: "./commands/docs.js", exportName: "docs" },
|
|
134
|
+
"docs:buddy:check": { path: "./commands/docs.js", exportName: "docs" },
|
|
135
|
+
"docs:artifacts": { path: "./commands/docs.js", exportName: "docs" },
|
|
136
|
+
"docs:artifacts:check": { path: "./commands/docs.js", exportName: "docs" },
|
|
137
|
+
"docs:links": { path: "./commands/docs.js", exportName: "docs" },
|
|
138
|
+
"docs:links:check": { path: "./commands/docs.js", exportName: "docs" }
|
|
113
139
|
}, commandGroups = {
|
|
114
140
|
minimal: ["version", "help"],
|
|
115
141
|
development: ["dev", "build", "test", "lint"],
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/buddy",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.70.
|
|
5
|
+
"version": "0.70.164",
|
|
6
6
|
"description": "Meet Buddy. The Stacks runtime.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -91,52 +91,53 @@
|
|
|
91
91
|
"prepublishOnly": "bun run build"
|
|
92
92
|
},
|
|
93
93
|
"dependencies": {
|
|
94
|
-
"@stacksjs/actions": "^0.70.
|
|
95
|
-
"@stacksjs/ai": "^0.70.
|
|
96
|
-
"@stacksjs/alias": "^0.70.
|
|
97
|
-
"@stacksjs/arrays": "^0.70.
|
|
98
|
-
"@stacksjs/auth": "^0.70.
|
|
99
|
-
"@stacksjs/build": "^0.70.
|
|
100
|
-
"@stacksjs/cache": "^0.70.
|
|
101
|
-
"@stacksjs/cli": "^0.70.
|
|
94
|
+
"@stacksjs/actions": "^0.70.164",
|
|
95
|
+
"@stacksjs/ai": "^0.70.164",
|
|
96
|
+
"@stacksjs/alias": "^0.70.164",
|
|
97
|
+
"@stacksjs/arrays": "^0.70.164",
|
|
98
|
+
"@stacksjs/auth": "^0.70.164",
|
|
99
|
+
"@stacksjs/build": "^0.70.164",
|
|
100
|
+
"@stacksjs/cache": "^0.70.164",
|
|
101
|
+
"@stacksjs/cli": "^0.70.164",
|
|
102
102
|
"@stacksjs/clapp": "^0.2.12",
|
|
103
|
-
"@stacksjs/cloud": "^0.70.
|
|
104
|
-
"@stacksjs/collections": "^0.70.
|
|
105
|
-
"@stacksjs/config": "^0.70.
|
|
106
|
-
"@stacksjs/database": "^0.70.
|
|
107
|
-
"@stacksjs/desktop": "^0.70.
|
|
108
|
-
"@stacksjs/dns": "^0.70.
|
|
109
|
-
"@stacksjs/email": "^0.70.
|
|
110
|
-
"@stacksjs/enums": "^0.70.
|
|
111
|
-
"@stacksjs/error-handling": "^0.70.
|
|
112
|
-
"@stacksjs/events": "^0.70.
|
|
113
|
-
"@stacksjs/git": "^0.70.
|
|
103
|
+
"@stacksjs/cloud": "^0.70.164",
|
|
104
|
+
"@stacksjs/collections": "^0.70.164",
|
|
105
|
+
"@stacksjs/config": "^0.70.164",
|
|
106
|
+
"@stacksjs/database": "^0.70.164",
|
|
107
|
+
"@stacksjs/desktop": "^0.70.164",
|
|
108
|
+
"@stacksjs/dns": "^0.70.164",
|
|
109
|
+
"@stacksjs/email": "^0.70.164",
|
|
110
|
+
"@stacksjs/enums": "^0.70.164",
|
|
111
|
+
"@stacksjs/error-handling": "^0.70.164",
|
|
112
|
+
"@stacksjs/events": "^0.70.164",
|
|
113
|
+
"@stacksjs/git": "^0.70.164",
|
|
114
114
|
"@stacksjs/gitit": "^0.2.5",
|
|
115
|
-
"@stacksjs/health": "^0.70.
|
|
115
|
+
"@stacksjs/health": "^0.70.164",
|
|
116
116
|
"@stacksjs/dnsx": "^0.2.3",
|
|
117
117
|
"@stacksjs/httx": "^0.1.10",
|
|
118
|
-
"@stacksjs/lint": "^0.70.
|
|
119
|
-
"@stacksjs/logging": "^0.70.
|
|
120
|
-
"@stacksjs/notifications": "^0.70.
|
|
121
|
-
"@stacksjs/objects": "^0.70.
|
|
122
|
-
"@stacksjs/orm": "^0.70.
|
|
123
|
-
"@stacksjs/path": "^0.70.
|
|
124
|
-
"@stacksjs/
|
|
125
|
-
"@stacksjs/
|
|
126
|
-
"@stacksjs/
|
|
118
|
+
"@stacksjs/lint": "^0.70.164",
|
|
119
|
+
"@stacksjs/logging": "^0.70.164",
|
|
120
|
+
"@stacksjs/notifications": "^0.70.164",
|
|
121
|
+
"@stacksjs/objects": "^0.70.164",
|
|
122
|
+
"@stacksjs/orm": "^0.70.164",
|
|
123
|
+
"@stacksjs/path": "^0.70.164",
|
|
124
|
+
"@stacksjs/skills": "^0.70.164",
|
|
125
|
+
"@stacksjs/payments": "^0.70.164",
|
|
126
|
+
"@stacksjs/realtime": "^0.70.164",
|
|
127
|
+
"@stacksjs/router": "^0.70.164",
|
|
127
128
|
"@stacksjs/rpx": "^0.11.31",
|
|
128
|
-
"@stacksjs/search-engine": "^0.70.
|
|
129
|
-
"@stacksjs/security": "^0.70.
|
|
130
|
-
"@stacksjs/server": "^0.70.
|
|
131
|
-
"@stacksjs/storage": "^0.70.
|
|
132
|
-
"@stacksjs/strings": "^0.70.
|
|
133
|
-
"@stacksjs/testing": "^0.70.
|
|
134
|
-
"@stacksjs/tunnel": "^0.70.
|
|
135
|
-
"@stacksjs/types": "^0.70.
|
|
136
|
-
"@stacksjs/ui": "^0.70.
|
|
137
|
-
"@stacksjs/utils": "^0.70.
|
|
138
|
-
"@stacksjs/validation": "^0.70.
|
|
139
|
-
"@stacksjs/ts-cloud": "^0.7.
|
|
129
|
+
"@stacksjs/search-engine": "^0.70.164",
|
|
130
|
+
"@stacksjs/security": "^0.70.164",
|
|
131
|
+
"@stacksjs/server": "^0.70.164",
|
|
132
|
+
"@stacksjs/storage": "^0.70.164",
|
|
133
|
+
"@stacksjs/strings": "^0.70.164",
|
|
134
|
+
"@stacksjs/testing": "^0.70.164",
|
|
135
|
+
"@stacksjs/tunnel": "^0.70.164",
|
|
136
|
+
"@stacksjs/types": "^0.70.164",
|
|
137
|
+
"@stacksjs/ui": "^0.70.164",
|
|
138
|
+
"@stacksjs/utils": "^0.70.164",
|
|
139
|
+
"@stacksjs/validation": "^0.70.164",
|
|
140
|
+
"@stacksjs/ts-cloud": "^0.7.60"
|
|
140
141
|
},
|
|
141
142
|
"devDependencies": {
|
|
142
143
|
"better-dx": "^0.2.17"
|