@guuey/create-agentic-app 0.16.12 → 0.16.14
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/{chunk-SUERHYH3.js → chunk-QKFW5CVM.js} +15 -0
- package/dist/cli.cjs +38 -4
- package/dist/cli.js +24 -5
- package/dist/index.cjs +15 -0
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +1 -1
- package/dist/templates/agent/README.md +47 -0
- package/dist/templates/agent/gitignore +3 -0
- package/dist/templates/agent/guuey.json +8 -0
- package/dist/templates/agent/package.json +16 -0
- package/dist/templates/agent/prompts/system.md +15 -0
- package/dist/templates/agentic-app/claude-agent-sdk/package.json +3 -3
- package/dist/templates/agentic-app/claude-agent-sdk/web/package.json +3 -3
- package/dist/templates/agentic-app/google-adk/package.json +2 -2
- package/dist/templates/agentic-app/google-adk/web/package.json +3 -3
- package/dist/templates/agentic-app/openai-agents-sdk/package.json +3 -3
- package/dist/templates/agentic-app/openai-agents-sdk/web/package.json +3 -3
- package/dist/templates/base/claude-agent-sdk/package.json +3 -3
- package/dist/templates/base/claude-agent-sdk/web/package.json +1 -1
- package/dist/templates/base/google-adk/package.json +2 -2
- package/dist/templates/base/google-adk/web/package.json +1 -1
- package/dist/templates/base/openai-agents-sdk/package.json +3 -3
- package/dist/templates/base/openai-agents-sdk/web/package.json +1 -1
- package/package.json +3 -3
|
@@ -67,6 +67,11 @@ async function listDirs(root) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
async function resolveTemplateDir(templatesDir, template, framework) {
|
|
70
|
+
if (template === "agent") {
|
|
71
|
+
const flat = join(templatesDir, "agent");
|
|
72
|
+
if (await pathExists(flat)) return flat;
|
|
73
|
+
throw new Error(`No "agent" template under ${templatesDir} \u2014 rebuild templates (pnpm build).`);
|
|
74
|
+
}
|
|
70
75
|
const dir = join(templatesDir, template, framework);
|
|
71
76
|
if (await pathExists(dir)) return dir;
|
|
72
77
|
const templates = (await listDirs(templatesDir)).filter((name) => name !== "mcp-base");
|
|
@@ -141,6 +146,13 @@ async function runInstall(projectDir) {
|
|
|
141
146
|
);
|
|
142
147
|
}
|
|
143
148
|
}
|
|
149
|
+
async function stampAppId(projectDir, appId) {
|
|
150
|
+
const guueyJsonPath = join(projectDir, "guuey.json");
|
|
151
|
+
const parsed = JSON.parse(await fs2.readFile(guueyJsonPath, "utf8"));
|
|
152
|
+
parsed.appId = appId;
|
|
153
|
+
await fs2.writeFile(guueyJsonPath, `${JSON.stringify(parsed, null, 2)}
|
|
154
|
+
`);
|
|
155
|
+
}
|
|
144
156
|
async function scaffold(opts) {
|
|
145
157
|
assertNpmSafeName(opts.name, "project");
|
|
146
158
|
const scope = opts.scope ?? opts.name;
|
|
@@ -150,6 +162,9 @@ async function scaffold(opts) {
|
|
|
150
162
|
await ensureTargetDir(projectDir, opts.force);
|
|
151
163
|
await copyTree(templateDir, projectDir, opts.name, scope);
|
|
152
164
|
await seedEnvLocal(projectDir);
|
|
165
|
+
if (opts.appId !== void 0 && opts.appId !== "") {
|
|
166
|
+
await stampAppId(projectDir, opts.appId);
|
|
167
|
+
}
|
|
153
168
|
if (opts.git !== false) {
|
|
154
169
|
await initGit(projectDir);
|
|
155
170
|
}
|
package/dist/cli.cjs
CHANGED
|
@@ -75,6 +75,11 @@ async function listDirs(root) {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
async function resolveTemplateDir(templatesDir, template, framework) {
|
|
78
|
+
if (template === "agent") {
|
|
79
|
+
const flat = (0, import_node_path.join)(templatesDir, "agent");
|
|
80
|
+
if (await pathExists(flat)) return flat;
|
|
81
|
+
throw new Error(`No "agent" template under ${templatesDir} \u2014 rebuild templates (pnpm build).`);
|
|
82
|
+
}
|
|
78
83
|
const dir = (0, import_node_path.join)(templatesDir, template, framework);
|
|
79
84
|
if (await pathExists(dir)) return dir;
|
|
80
85
|
const templates = (await listDirs(templatesDir)).filter((name) => name !== "mcp-base");
|
|
@@ -149,6 +154,13 @@ async function runInstall(projectDir) {
|
|
|
149
154
|
);
|
|
150
155
|
}
|
|
151
156
|
}
|
|
157
|
+
async function stampAppId(projectDir, appId) {
|
|
158
|
+
const guueyJsonPath = (0, import_node_path.join)(projectDir, "guuey.json");
|
|
159
|
+
const parsed = JSON.parse(await import_node_fs2.promises.readFile(guueyJsonPath, "utf8"));
|
|
160
|
+
parsed.appId = appId;
|
|
161
|
+
await import_node_fs2.promises.writeFile(guueyJsonPath, `${JSON.stringify(parsed, null, 2)}
|
|
162
|
+
`);
|
|
163
|
+
}
|
|
152
164
|
async function scaffold(opts) {
|
|
153
165
|
assertNpmSafeName(opts.name, "project");
|
|
154
166
|
const scope = opts.scope ?? opts.name;
|
|
@@ -158,6 +170,9 @@ async function scaffold(opts) {
|
|
|
158
170
|
await ensureTargetDir(projectDir, opts.force);
|
|
159
171
|
await copyTree(templateDir, projectDir, opts.name, scope);
|
|
160
172
|
await seedEnvLocal(projectDir);
|
|
173
|
+
if (opts.appId !== void 0 && opts.appId !== "") {
|
|
174
|
+
await stampAppId(projectDir, opts.appId);
|
|
175
|
+
}
|
|
161
176
|
if (opts.git !== false) {
|
|
162
177
|
await initGit(projectDir);
|
|
163
178
|
}
|
|
@@ -261,7 +276,7 @@ var defaultTemplatesDir2 = (0, import_node_path3.join)(packageRoot2, "dist", "te
|
|
|
261
276
|
|
|
262
277
|
// src/cli.ts
|
|
263
278
|
var FRAMEWORKS = ["claude-agent-sdk", "openai-agents-sdk", "google-adk"];
|
|
264
|
-
var TEMPLATES = ["base", "agentic-app"];
|
|
279
|
+
var TEMPLATES = ["base", "agentic-app", "agent"];
|
|
265
280
|
function isFramework(value) {
|
|
266
281
|
return FRAMEWORKS.includes(value);
|
|
267
282
|
}
|
|
@@ -299,15 +314,21 @@ Arguments:
|
|
|
299
314
|
Options:
|
|
300
315
|
--name <name> Project name (default: derived from target)
|
|
301
316
|
--scope <scope> npm scope for @<scope>/* packages (default: name)
|
|
302
|
-
--template <t>
|
|
317
|
+
--template <t> Template: ${TEMPLATES.join(" | ")} (default: base)
|
|
303
318
|
base = landing + login + home + chat;
|
|
304
319
|
agentic-app = base + split-sidebar product shell with
|
|
305
|
-
a fullscreen agent canvas and "talk on mobile" QR
|
|
320
|
+
a fullscreen agent canvas and "talk on mobile" QR;
|
|
321
|
+
agent = MANAGE-ONLY (prompt + manifest, no web app \u2014
|
|
322
|
+
"I just want to run my agent"; guuey hosts the
|
|
323
|
+
surfaces). Embed-SDK builders want base/agentic-app
|
|
306
324
|
--framework <f> Framework: ${FRAMEWORKS.join(" | ")}
|
|
307
325
|
--agent <f> Alias for --framework
|
|
308
326
|
--example <vertical> Extract a demo app from github.com/withguuey/demos
|
|
309
327
|
instead of a blank template (mutually exclusive with
|
|
310
328
|
--template/--framework; re-brand via pnpm bootstrap)
|
|
329
|
+
--app <appId> Bind to an EXISTING guuey app: stamps the id into
|
|
330
|
+
guuey.json so "pnpm bootstrap -- --link" runs
|
|
331
|
+
promptless (the tada page's copy-paste line)
|
|
311
332
|
--install Run "pnpm install" after scaffolding
|
|
312
333
|
--no-git Skip "git init" + initial commit
|
|
313
334
|
--force Scaffold into a non-empty target directory
|
|
@@ -317,6 +338,7 @@ Options:
|
|
|
317
338
|
Examples:
|
|
318
339
|
create-agentic-app my-app --framework claude-agent-sdk
|
|
319
340
|
create-agentic-app my-app --agent openai-agents-sdk --install
|
|
341
|
+
create-agentic-app my-agent --app app_abc123 # born bound to your live agent
|
|
320
342
|
`);
|
|
321
343
|
}
|
|
322
344
|
function deriveName(target) {
|
|
@@ -393,7 +415,12 @@ Extracted the "${flags.example}" example into ${projectDir2}
|
|
|
393
415
|
const template = templateInput;
|
|
394
416
|
const frameworkFlag = flags.framework ?? flags.agent;
|
|
395
417
|
let frameworkInput = typeof frameworkFlag === "string" ? frameworkFlag : void 0;
|
|
396
|
-
if (
|
|
418
|
+
if (template === "agent") {
|
|
419
|
+
if (frameworkInput !== void 0) {
|
|
420
|
+
console.log("--template agent is framework-less (declarative) \u2014 ignoring --framework.");
|
|
421
|
+
}
|
|
422
|
+
frameworkInput = "claude-agent-sdk";
|
|
423
|
+
} else if (!frameworkInput) {
|
|
397
424
|
if (import_node_process.stdin.isTTY !== true) {
|
|
398
425
|
frameworkInput = "claude-agent-sdk";
|
|
399
426
|
console.log(
|
|
@@ -412,6 +439,12 @@ Extracted the "${flags.example}" example into ${projectDir2}
|
|
|
412
439
|
const name = typeof flags.name === "string" ? flags.name : deriveName(target);
|
|
413
440
|
const scope = typeof flags.scope === "string" ? flags.scope : void 0;
|
|
414
441
|
const install = flags.install === true;
|
|
442
|
+
if (flags.app === true) {
|
|
443
|
+
console.error("--app needs a value, e.g. --app app_abc123");
|
|
444
|
+
process.exit(1);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const appId = typeof flags.app === "string" ? flags.app : void 0;
|
|
415
448
|
const { projectDir } = await scaffold({
|
|
416
449
|
targetDir: target,
|
|
417
450
|
name,
|
|
@@ -419,6 +452,7 @@ Extracted the "${flags.example}" example into ${projectDir2}
|
|
|
419
452
|
template,
|
|
420
453
|
scope,
|
|
421
454
|
install,
|
|
455
|
+
...appId !== void 0 ? { appId } : {},
|
|
422
456
|
git: flags["no-git"] !== true,
|
|
423
457
|
force: flags.force === true
|
|
424
458
|
});
|
package/dist/cli.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
scaffold,
|
|
4
4
|
scaffoldExample
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QKFW5CVM.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
8
8
|
import { createInterface } from "readline/promises";
|
|
9
9
|
import { stdin, stdout } from "process";
|
|
10
10
|
var FRAMEWORKS = ["claude-agent-sdk", "openai-agents-sdk", "google-adk"];
|
|
11
|
-
var TEMPLATES = ["base", "agentic-app"];
|
|
11
|
+
var TEMPLATES = ["base", "agentic-app", "agent"];
|
|
12
12
|
function isFramework(value) {
|
|
13
13
|
return FRAMEWORKS.includes(value);
|
|
14
14
|
}
|
|
@@ -46,15 +46,21 @@ Arguments:
|
|
|
46
46
|
Options:
|
|
47
47
|
--name <name> Project name (default: derived from target)
|
|
48
48
|
--scope <scope> npm scope for @<scope>/* packages (default: name)
|
|
49
|
-
--template <t>
|
|
49
|
+
--template <t> Template: ${TEMPLATES.join(" | ")} (default: base)
|
|
50
50
|
base = landing + login + home + chat;
|
|
51
51
|
agentic-app = base + split-sidebar product shell with
|
|
52
|
-
a fullscreen agent canvas and "talk on mobile" QR
|
|
52
|
+
a fullscreen agent canvas and "talk on mobile" QR;
|
|
53
|
+
agent = MANAGE-ONLY (prompt + manifest, no web app \u2014
|
|
54
|
+
"I just want to run my agent"; guuey hosts the
|
|
55
|
+
surfaces). Embed-SDK builders want base/agentic-app
|
|
53
56
|
--framework <f> Framework: ${FRAMEWORKS.join(" | ")}
|
|
54
57
|
--agent <f> Alias for --framework
|
|
55
58
|
--example <vertical> Extract a demo app from github.com/withguuey/demos
|
|
56
59
|
instead of a blank template (mutually exclusive with
|
|
57
60
|
--template/--framework; re-brand via pnpm bootstrap)
|
|
61
|
+
--app <appId> Bind to an EXISTING guuey app: stamps the id into
|
|
62
|
+
guuey.json so "pnpm bootstrap -- --link" runs
|
|
63
|
+
promptless (the tada page's copy-paste line)
|
|
58
64
|
--install Run "pnpm install" after scaffolding
|
|
59
65
|
--no-git Skip "git init" + initial commit
|
|
60
66
|
--force Scaffold into a non-empty target directory
|
|
@@ -64,6 +70,7 @@ Options:
|
|
|
64
70
|
Examples:
|
|
65
71
|
create-agentic-app my-app --framework claude-agent-sdk
|
|
66
72
|
create-agentic-app my-app --agent openai-agents-sdk --install
|
|
73
|
+
create-agentic-app my-agent --app app_abc123 # born bound to your live agent
|
|
67
74
|
`);
|
|
68
75
|
}
|
|
69
76
|
function deriveName(target) {
|
|
@@ -140,7 +147,12 @@ Extracted the "${flags.example}" example into ${projectDir2}
|
|
|
140
147
|
const template = templateInput;
|
|
141
148
|
const frameworkFlag = flags.framework ?? flags.agent;
|
|
142
149
|
let frameworkInput = typeof frameworkFlag === "string" ? frameworkFlag : void 0;
|
|
143
|
-
if (
|
|
150
|
+
if (template === "agent") {
|
|
151
|
+
if (frameworkInput !== void 0) {
|
|
152
|
+
console.log("--template agent is framework-less (declarative) \u2014 ignoring --framework.");
|
|
153
|
+
}
|
|
154
|
+
frameworkInput = "claude-agent-sdk";
|
|
155
|
+
} else if (!frameworkInput) {
|
|
144
156
|
if (stdin.isTTY !== true) {
|
|
145
157
|
frameworkInput = "claude-agent-sdk";
|
|
146
158
|
console.log(
|
|
@@ -159,6 +171,12 @@ Extracted the "${flags.example}" example into ${projectDir2}
|
|
|
159
171
|
const name = typeof flags.name === "string" ? flags.name : deriveName(target);
|
|
160
172
|
const scope = typeof flags.scope === "string" ? flags.scope : void 0;
|
|
161
173
|
const install = flags.install === true;
|
|
174
|
+
if (flags.app === true) {
|
|
175
|
+
console.error("--app needs a value, e.g. --app app_abc123");
|
|
176
|
+
process.exit(1);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const appId = typeof flags.app === "string" ? flags.app : void 0;
|
|
162
180
|
const { projectDir } = await scaffold({
|
|
163
181
|
targetDir: target,
|
|
164
182
|
name,
|
|
@@ -166,6 +184,7 @@ Extracted the "${flags.example}" example into ${projectDir2}
|
|
|
166
184
|
template,
|
|
167
185
|
scope,
|
|
168
186
|
install,
|
|
187
|
+
...appId !== void 0 ? { appId } : {},
|
|
169
188
|
git: flags["no-git"] !== true,
|
|
170
189
|
force: flags.force === true
|
|
171
190
|
});
|
package/dist/index.cjs
CHANGED
|
@@ -97,6 +97,11 @@ async function listDirs(root) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
async function resolveTemplateDir(templatesDir, template, framework) {
|
|
100
|
+
if (template === "agent") {
|
|
101
|
+
const flat = (0, import_node_path.join)(templatesDir, "agent");
|
|
102
|
+
if (await pathExists(flat)) return flat;
|
|
103
|
+
throw new Error(`No "agent" template under ${templatesDir} \u2014 rebuild templates (pnpm build).`);
|
|
104
|
+
}
|
|
100
105
|
const dir = (0, import_node_path.join)(templatesDir, template, framework);
|
|
101
106
|
if (await pathExists(dir)) return dir;
|
|
102
107
|
const templates = (await listDirs(templatesDir)).filter((name) => name !== "mcp-base");
|
|
@@ -171,6 +176,13 @@ async function runInstall(projectDir) {
|
|
|
171
176
|
);
|
|
172
177
|
}
|
|
173
178
|
}
|
|
179
|
+
async function stampAppId(projectDir, appId) {
|
|
180
|
+
const guueyJsonPath = (0, import_node_path.join)(projectDir, "guuey.json");
|
|
181
|
+
const parsed = JSON.parse(await import_node_fs2.promises.readFile(guueyJsonPath, "utf8"));
|
|
182
|
+
parsed.appId = appId;
|
|
183
|
+
await import_node_fs2.promises.writeFile(guueyJsonPath, `${JSON.stringify(parsed, null, 2)}
|
|
184
|
+
`);
|
|
185
|
+
}
|
|
174
186
|
async function scaffold(opts) {
|
|
175
187
|
assertNpmSafeName(opts.name, "project");
|
|
176
188
|
const scope = opts.scope ?? opts.name;
|
|
@@ -180,6 +192,9 @@ async function scaffold(opts) {
|
|
|
180
192
|
await ensureTargetDir(projectDir, opts.force);
|
|
181
193
|
await copyTree(templateDir, projectDir, opts.name, scope);
|
|
182
194
|
await seedEnvLocal(projectDir);
|
|
195
|
+
if (opts.appId !== void 0 && opts.appId !== "") {
|
|
196
|
+
await stampAppId(projectDir, opts.appId);
|
|
197
|
+
}
|
|
183
198
|
if (opts.git !== false) {
|
|
184
199
|
await initGit(projectDir);
|
|
185
200
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -5,7 +5,7 @@ type Framework = 'claude-agent-sdk' | 'openai-agents-sdk' | 'google-adk';
|
|
|
5
5
|
* chat; `agentic-app` extends it with the split-sidebar product shell whose
|
|
6
6
|
* agent dock swaps the main canvas to a fullscreen agent.
|
|
7
7
|
*/
|
|
8
|
-
type Template = 'base' | 'agentic-app';
|
|
8
|
+
type Template = 'base' | 'agentic-app' | 'agent';
|
|
9
9
|
interface ScaffoldOptions {
|
|
10
10
|
/** Absolute or cwd-relative path to create/populate the new project in. */
|
|
11
11
|
targetDir: string;
|
|
@@ -20,6 +20,16 @@ interface ScaffoldOptions {
|
|
|
20
20
|
install?: boolean;
|
|
21
21
|
/** Run `git init` + an initial commit in the new project. Default: true. */
|
|
22
22
|
git?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Bind the scaffold to an EXISTING guuey app (guuey#580 point 4 — the
|
|
25
|
+
* tada page's one-liner): stamps top-level `appId` into the scaffolded
|
|
26
|
+
* guuey.json, which is exactly where `scripts/bootstrap.mjs --link`
|
|
27
|
+
* reads its default from — so the link phase runs promptless and the
|
|
28
|
+
* repo is born bound to the just-created agent. No validation here
|
|
29
|
+
* beyond non-empty: the id's truth is the platform's to judge at link
|
|
30
|
+
* time (a wrong id fails loudly there, with auth in hand).
|
|
31
|
+
*/
|
|
32
|
+
appId?: string;
|
|
23
33
|
/** Scaffold into a non-empty targetDir anyway. Default: false. */
|
|
24
34
|
force?: boolean;
|
|
25
35
|
/** Root directory holding `<template>/<framework>` trees (+ `mcp-base/`). Default: dist/templates. */
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ type Framework = 'claude-agent-sdk' | 'openai-agents-sdk' | 'google-adk';
|
|
|
5
5
|
* chat; `agentic-app` extends it with the split-sidebar product shell whose
|
|
6
6
|
* agent dock swaps the main canvas to a fullscreen agent.
|
|
7
7
|
*/
|
|
8
|
-
type Template = 'base' | 'agentic-app';
|
|
8
|
+
type Template = 'base' | 'agentic-app' | 'agent';
|
|
9
9
|
interface ScaffoldOptions {
|
|
10
10
|
/** Absolute or cwd-relative path to create/populate the new project in. */
|
|
11
11
|
targetDir: string;
|
|
@@ -20,6 +20,16 @@ interface ScaffoldOptions {
|
|
|
20
20
|
install?: boolean;
|
|
21
21
|
/** Run `git init` + an initial commit in the new project. Default: true. */
|
|
22
22
|
git?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Bind the scaffold to an EXISTING guuey app (guuey#580 point 4 — the
|
|
25
|
+
* tada page's one-liner): stamps top-level `appId` into the scaffolded
|
|
26
|
+
* guuey.json, which is exactly where `scripts/bootstrap.mjs --link`
|
|
27
|
+
* reads its default from — so the link phase runs promptless and the
|
|
28
|
+
* repo is born bound to the just-created agent. No validation here
|
|
29
|
+
* beyond non-empty: the id's truth is the platform's to judge at link
|
|
30
|
+
* time (a wrong id fails loudly there, with auth in hand).
|
|
31
|
+
*/
|
|
32
|
+
appId?: string;
|
|
23
33
|
/** Scaffold into a non-empty targetDir anyway. Default: false. */
|
|
24
34
|
force?: boolean;
|
|
25
35
|
/** Root directory holding `<template>/<framework>` trees (+ `mcp-base/`). Default: dist/templates. */
|
package/dist/index.js
CHANGED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# agentic-app-template
|
|
2
|
+
|
|
3
|
+
The **manage-only** repo for your guuey agent: the whole definition lives
|
|
4
|
+
here as files — the system prompt and the manifest — and `guuey agent
|
|
5
|
+
apply` is the whole deploy story. There is no web app in this repo; your
|
|
6
|
+
agent is reached through the surfaces guuey hosts for it (the widget
|
|
7
|
+
embed, the share page, the portal).
|
|
8
|
+
|
|
9
|
+
## The loop
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm install
|
|
13
|
+
pnpm login # once — opens the guuey console
|
|
14
|
+
# edit prompts/system.md (the agent's voice) and guuey.json (model, MCP servers)
|
|
15
|
+
pnpm apply # push the definition to your live agent
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`guuey.json`'s `appId` binds this repo to your app. If it was scaffolded
|
|
19
|
+
from the console it is already set; otherwise `pnpm apply` will tell you
|
|
20
|
+
what to do.
|
|
21
|
+
|
|
22
|
+
## Guest & authenticated modes
|
|
23
|
+
|
|
24
|
+
If your agent was drafted in the guuey console with guest/auth mode
|
|
25
|
+
prompts, **run `guuey pull` before your first `pnpm apply`** — it writes
|
|
26
|
+
the live definition (modes included) into this repo. Apply is
|
|
27
|
+
doc-is-desired-state: a document without `agent.modes` declares an agent
|
|
28
|
+
without modes, and the CLI will refuse a first apply that would strip
|
|
29
|
+
live modes (pass `--replace` only if that is what you mean). To declare
|
|
30
|
+
modes here directly:
|
|
31
|
+
|
|
32
|
+
```jsonc
|
|
33
|
+
// guuey.json → agent
|
|
34
|
+
"modes": {
|
|
35
|
+
"rep": { "systemPromptAppend": "prompts/rep.md", "audience": ["guest"] },
|
|
36
|
+
"agent": { "systemPromptAppend": "prompts/full.md", "audience": ["authenticated"] }
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Wanting more?
|
|
41
|
+
|
|
42
|
+
If you outgrow manage-only — you want your OWN site with the agent
|
|
43
|
+
embedded — scaffold the app template next to this repo:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx @guuey/create-agentic-app my-site --template agentic-app --app <your appId>
|
|
47
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentic-app-template",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"login": "guuey login",
|
|
8
|
+
"apply": "guuey agent apply",
|
|
9
|
+
"dev": "guuey dev",
|
|
10
|
+
"status": "guuey status",
|
|
11
|
+
"open": "guuey open"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@guuey/cli": "0.16.14"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
You are the agentic-app-template assistant. You have a todo tool server —
|
|
2
|
+
use it to create, list, toggle, and delete the user's todos.
|
|
3
|
+
|
|
4
|
+
Show, don't tell: when a result has structure — a todo list, a form, a
|
|
5
|
+
confirmation — render it as an interactive surface with the ggui render
|
|
6
|
+
loop by default; keep plain prose for one-line answers with nothing to
|
|
7
|
+
show. After changing todos (create, toggle, delete), render the updated
|
|
8
|
+
list, so every turn ends on a surface that reflects the current state.
|
|
9
|
+
Use only the fields the surface's schema declares.
|
|
10
|
+
|
|
11
|
+
An under-specified ask is NEVER answered with a text-only list of
|
|
12
|
+
questions: render the closest useful surface FIRST — the current list,
|
|
13
|
+
the options, a form — and ask your one narrowing question in a short
|
|
14
|
+
line beside it. Clarification happens ON a surface, from the very first
|
|
15
|
+
turn.
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@anthropic-ai/claude-agent-sdk": "^0.3.199",
|
|
15
|
-
"@guuey/config": "0.16.
|
|
16
|
-
"@guuey/worker": "0.16.
|
|
15
|
+
"@guuey/config": "0.16.14",
|
|
16
|
+
"@guuey/worker": "0.16.14"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@ggui-ai/cli": "0.13.0",
|
|
20
|
-
"@guuey/cli": "0.16.
|
|
20
|
+
"@guuey/cli": "0.16.14",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"typecheck": "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@guuey/agent-layout": "0.16.
|
|
13
|
-
"@guuey/chat": "0.16.
|
|
14
|
-
"@guuey/mcp-apps-host": "0.16.
|
|
12
|
+
"@guuey/agent-layout": "0.16.14",
|
|
13
|
+
"@guuey/chat": "0.16.14",
|
|
14
|
+
"@guuey/mcp-apps-host": "0.16.14",
|
|
15
15
|
"oidc-client-ts": "^3.1.0",
|
|
16
16
|
"qrcode": "^1.5.4",
|
|
17
17
|
"react": "^19.0.0",
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"typecheck": "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@guuey/agent-layout": "0.16.
|
|
13
|
-
"@guuey/chat": "0.16.
|
|
14
|
-
"@guuey/mcp-apps-host": "0.16.
|
|
12
|
+
"@guuey/agent-layout": "0.16.14",
|
|
13
|
+
"@guuey/chat": "0.16.14",
|
|
14
|
+
"@guuey/mcp-apps-host": "0.16.14",
|
|
15
15
|
"oidc-client-ts": "^3.1.0",
|
|
16
16
|
"qrcode": "^1.5.4",
|
|
17
17
|
"react": "^19.0.0",
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@openai/agents": "^0.12.0",
|
|
15
|
-
"@guuey/config": "0.16.
|
|
16
|
-
"@guuey/worker": "0.16.
|
|
15
|
+
"@guuey/config": "0.16.14",
|
|
16
|
+
"@guuey/worker": "0.16.14"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@ggui-ai/cli": "0.13.0",
|
|
20
|
-
"@guuey/cli": "0.16.
|
|
20
|
+
"@guuey/cli": "0.16.14",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"typecheck": "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@guuey/agent-layout": "0.16.
|
|
13
|
-
"@guuey/chat": "0.16.
|
|
14
|
-
"@guuey/mcp-apps-host": "0.16.
|
|
12
|
+
"@guuey/agent-layout": "0.16.14",
|
|
13
|
+
"@guuey/chat": "0.16.14",
|
|
14
|
+
"@guuey/mcp-apps-host": "0.16.14",
|
|
15
15
|
"oidc-client-ts": "^3.1.0",
|
|
16
16
|
"qrcode": "^1.5.4",
|
|
17
17
|
"react": "^19.0.0",
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@anthropic-ai/claude-agent-sdk": "^0.3.199",
|
|
15
|
-
"@guuey/config": "0.16.
|
|
16
|
-
"@guuey/worker": "0.16.
|
|
15
|
+
"@guuey/config": "0.16.14",
|
|
16
|
+
"@guuey/worker": "0.16.14"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@ggui-ai/cli": "0.13.0",
|
|
20
|
-
"@guuey/cli": "0.16.
|
|
20
|
+
"@guuey/cli": "0.16.14",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@openai/agents": "^0.12.0",
|
|
15
|
-
"@guuey/config": "0.16.
|
|
16
|
-
"@guuey/worker": "0.16.
|
|
15
|
+
"@guuey/config": "0.16.14",
|
|
16
|
+
"@guuey/worker": "0.16.14"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@ggui-ai/cli": "0.13.0",
|
|
20
|
-
"@guuey/cli": "0.16.
|
|
20
|
+
"@guuey/cli": "0.16.14",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guuey/create-agentic-app",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.14",
|
|
4
4
|
"description": "Scaffold a guuey agentic app: code-mode agent + custom MCP + ggui + web, local pnpm dev, one-command guuey deploy.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"tsup": "^8.5.0",
|
|
26
26
|
"typescript": "^5.8.0",
|
|
27
27
|
"vitest": "^3.2.7",
|
|
28
|
-
"@guuey/config": "0.16.
|
|
29
|
-
"@guuey/worker": "0.16.
|
|
28
|
+
"@guuey/config": "0.16.14",
|
|
29
|
+
"@guuey/worker": "0.16.14"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|