@agent-native/core 0.25.0 → 0.26.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/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +2 -1
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +2 -1
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +31 -12
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/output-tokens.d.ts +8 -0
- package/dist/agent/engine/output-tokens.d.ts.map +1 -0
- package/dist/agent/engine/output-tokens.js +60 -0
- package/dist/agent/engine/output-tokens.js.map +1 -0
- package/dist/agent/production-agent.d.ts +2 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +66 -25
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +3 -1
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/use-external-value.d.ts +17 -0
- package/dist/client/use-external-value.d.ts.map +1 -0
- package/dist/client/use-external-value.js +29 -0
- package/dist/client/use-external-value.js.map +1 -0
- package/dist/collab/client.d.ts +18 -0
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +81 -2
- package/dist/collab/client.js.map +1 -1
- package/dist/scripts/docs/search.d.ts.map +1 -1
- package/dist/scripts/docs/search.js +52 -6
- package/dist/scripts/docs/search.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +87 -79
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +6 -6
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +5 -1
- package/dist/server/create-server.js.map +1 -1
- package/package.json +1 -2
|
@@ -28,7 +28,7 @@ function parseFrontmatter(raw) {
|
|
|
28
28
|
}
|
|
29
29
|
return { data, body: match[2] };
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function loadFilesystemDocs() {
|
|
32
32
|
const docsDir = getDocsDir();
|
|
33
33
|
if (!fs.existsSync(docsDir))
|
|
34
34
|
return [];
|
|
@@ -45,8 +45,54 @@ function loadAllDocs() {
|
|
|
45
45
|
};
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
function
|
|
49
|
-
|
|
48
|
+
function slugifyDocId(value) {
|
|
49
|
+
return value
|
|
50
|
+
.trim()
|
|
51
|
+
.toLowerCase()
|
|
52
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
53
|
+
.replace(/^-+|-+$/g, "");
|
|
54
|
+
}
|
|
55
|
+
async function loadAgentBundleDocs() {
|
|
56
|
+
try {
|
|
57
|
+
const { loadAgentsBundle } = await import("../../server/agents-bundle.js");
|
|
58
|
+
const bundle = await loadAgentsBundle();
|
|
59
|
+
const docs = [];
|
|
60
|
+
if (bundle.workspaceAgentsMd?.trim()) {
|
|
61
|
+
docs.push({
|
|
62
|
+
slug: "agents-workspace",
|
|
63
|
+
title: "Workspace AGENTS.md",
|
|
64
|
+
description: "Full bundled workspace-level agent instructions.",
|
|
65
|
+
body: bundle.workspaceAgentsMd,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (bundle.agentsMd?.trim()) {
|
|
69
|
+
docs.push({
|
|
70
|
+
slug: "agents-template",
|
|
71
|
+
title: "Template AGENTS.md",
|
|
72
|
+
description: "Full bundled template/app agent instructions.",
|
|
73
|
+
body: bundle.agentsMd,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
for (const skill of Object.values(bundle.skills)) {
|
|
77
|
+
const slug = `skill-${slugifyDocId(skill.meta.name)}`;
|
|
78
|
+
docs.push({
|
|
79
|
+
slug,
|
|
80
|
+
title: `Skill: ${skill.meta.name}`,
|
|
81
|
+
description: skill.meta.description,
|
|
82
|
+
body: skill.content,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return docs;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function loadAllDocs() {
|
|
92
|
+
return [...loadFilesystemDocs(), ...(await loadAgentBundleDocs())];
|
|
93
|
+
}
|
|
94
|
+
async function searchDocs(query) {
|
|
95
|
+
const docs = await loadAllDocs();
|
|
50
96
|
const terms = query.toLowerCase().split(/\s+/);
|
|
51
97
|
const scored = docs
|
|
52
98
|
.map((doc) => {
|
|
@@ -86,7 +132,7 @@ Options:
|
|
|
86
132
|
return;
|
|
87
133
|
}
|
|
88
134
|
if (parsed.list === "true") {
|
|
89
|
-
const docs = loadAllDocs();
|
|
135
|
+
const docs = await loadAllDocs();
|
|
90
136
|
const listing = docs.map((d) => ({
|
|
91
137
|
slug: d.slug,
|
|
92
138
|
title: d.title,
|
|
@@ -96,7 +142,7 @@ Options:
|
|
|
96
142
|
return;
|
|
97
143
|
}
|
|
98
144
|
if (parsed.slug) {
|
|
99
|
-
const docs = loadAllDocs();
|
|
145
|
+
const docs = await loadAllDocs();
|
|
100
146
|
const doc = docs.find((d) => d.slug === parsed.slug);
|
|
101
147
|
if (!doc) {
|
|
102
148
|
console.log(`Doc not found: ${parsed.slug}`);
|
|
@@ -110,7 +156,7 @@ Options:
|
|
|
110
156
|
return;
|
|
111
157
|
}
|
|
112
158
|
if (parsed.query) {
|
|
113
|
-
const results = searchDocs(parsed.query);
|
|
159
|
+
const results = await searchDocs(parsed.query);
|
|
114
160
|
if (results.length === 0) {
|
|
115
161
|
console.log(`No docs found matching "${parsed.query}".`);
|
|
116
162
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/scripts/docs/search.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Core script: docs-search\n *\n * Search and read agent-native framework documentation.\n * Docs are bundled in @agent-native/core so they're always the right version.\n *\n * Usage:\n * pnpm action docs-search --query \"actions\"\n * pnpm action docs-search --slug authentication\n * pnpm action docs-search --list\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseArgs } from \"../utils.js\";\n\ninterface DocMeta {\n slug: string;\n title: string;\n description: string;\n}\n\ninterface DocFull extends DocMeta {\n body: string;\n}\n\nfunction getDocsDir(): string {\n // Resolve from the package root: src/scripts/docs/search.ts -> docs/content/\n return path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n \"../../../docs/content\",\n );\n}\n\nfunction parseFrontmatter(raw: string): {\n data: Record<string, string>;\n body: string;\n} {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n([\\s\\S]*)$/);\n if (!match) return { data: {}, body: raw };\n\n const data: Record<string, string> = {};\n for (const line of match[1].split(\"\\n\")) {\n const m = line.match(/^(\\w+):\\s*\"?(.*?)\"?\\s*$/);\n if (m) data[m[1]] = m[2];\n }\n return { data, body: match[2] };\n}\n\nfunction loadAllDocs(): DocFull[] {\n const docsDir = getDocsDir();\n if (!fs.existsSync(docsDir)) return [];\n\n const files = fs.readdirSync(docsDir).filter((f) => f.endsWith(\".md\"));\n return files.map((file) => {\n const raw = fs.readFileSync(path.join(docsDir, file), \"utf-8\");\n const slug = file.replace(/\\.md$/, \"\");\n const { data, body } = parseFrontmatter(raw);\n return {\n slug,\n title: data.title || slug,\n description: data.description || \"\",\n body,\n };\n });\n}\n\nfunction searchDocs(query: string): DocMeta[] {\n const docs = loadAllDocs();\n const terms = query.toLowerCase().split(/\\s+/);\n\n const scored = docs\n .map((doc) => {\n const searchText =\n `${doc.title} ${doc.description} ${doc.body}`.toLowerCase();\n let score = 0;\n for (const term of terms) {\n if (doc.title.toLowerCase().includes(term)) score += 10;\n if (doc.description.toLowerCase().includes(term)) score += 5;\n if (doc.slug.includes(term)) score += 8;\n // Count body occurrences\n const bodyMatches = searchText.split(term).length - 1;\n score += Math.min(bodyMatches, 5);\n }\n return { doc, score };\n })\n .filter((item) => item.score > 0)\n .sort((a, b) => b.score - a.score);\n\n return scored.map(({ doc }) => ({\n slug: doc.slug,\n title: doc.title,\n description: doc.description,\n }));\n}\n\nexport default async function docsSearchScript(args: string[]): Promise<void> {\n const parsed = parseArgs(args);\n\n if (parsed.help === \"true\") {\n console.log(`Usage: pnpm action docs-search [options]\n\nOptions:\n --query <text> Search docs by keyword (returns matching pages)\n --slug <slug> Read a specific doc page by slug\n --list List all available doc pages\n --help Show this help message`);\n return;\n }\n\n if (parsed.list === \"true\") {\n const docs = loadAllDocs();\n const listing = docs.map((d) => ({\n slug: d.slug,\n title: d.title,\n description: d.description,\n }));\n console.log(JSON.stringify(listing, null, 2));\n return;\n }\n\n if (parsed.slug) {\n const docs = loadAllDocs();\n const doc = docs.find((d) => d.slug === parsed.slug);\n if (!doc) {\n console.log(`Doc not found: ${parsed.slug}`);\n console.log(`Available: ${docs.map((d) => d.slug).join(\", \")}`);\n return;\n }\n console.log(`# ${doc.title}\\n`);\n if (doc.description) console.log(`${doc.description}\\n`);\n console.log(doc.body);\n return;\n }\n\n if (parsed.query) {\n const results = searchDocs(parsed.query);\n if (results.length === 0) {\n console.log(`No docs found matching \"${parsed.query}\".`);\n return;\n }\n console.log(`Found ${results.length} doc(s) matching \"${parsed.query}\":\\n`);\n for (const result of results.slice(0, 8)) {\n console.log(` ${result.slug} — ${result.title}`);\n if (result.description) {\n console.log(` ${result.description}`);\n }\n }\n console.log(`\\nUse --slug <slug> to read the full doc.`);\n return;\n }\n\n console.log(\"Provide --query, --slug, or --list. Use --help for details.\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/scripts/docs/search.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Core script: docs-search\n *\n * Search and read agent-native framework documentation.\n * Docs are bundled in @agent-native/core so they're always the right version.\n *\n * Usage:\n * pnpm action docs-search --query \"actions\"\n * pnpm action docs-search --slug authentication\n * pnpm action docs-search --list\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseArgs } from \"../utils.js\";\n\ninterface DocMeta {\n slug: string;\n title: string;\n description: string;\n}\n\ninterface DocFull extends DocMeta {\n body: string;\n}\n\nfunction getDocsDir(): string {\n // Resolve from the package root: src/scripts/docs/search.ts -> docs/content/\n return path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n \"../../../docs/content\",\n );\n}\n\nfunction parseFrontmatter(raw: string): {\n data: Record<string, string>;\n body: string;\n} {\n const match = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n([\\s\\S]*)$/);\n if (!match) return { data: {}, body: raw };\n\n const data: Record<string, string> = {};\n for (const line of match[1].split(\"\\n\")) {\n const m = line.match(/^(\\w+):\\s*\"?(.*?)\"?\\s*$/);\n if (m) data[m[1]] = m[2];\n }\n return { data, body: match[2] };\n}\n\nfunction loadFilesystemDocs(): DocFull[] {\n const docsDir = getDocsDir();\n if (!fs.existsSync(docsDir)) return [];\n\n const files = fs.readdirSync(docsDir).filter((f) => f.endsWith(\".md\"));\n return files.map((file) => {\n const raw = fs.readFileSync(path.join(docsDir, file), \"utf-8\");\n const slug = file.replace(/\\.md$/, \"\");\n const { data, body } = parseFrontmatter(raw);\n return {\n slug,\n title: data.title || slug,\n description: data.description || \"\",\n body,\n };\n });\n}\n\nfunction slugifyDocId(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nasync function loadAgentBundleDocs(): Promise<DocFull[]> {\n try {\n const { loadAgentsBundle } = await import(\"../../server/agents-bundle.js\");\n const bundle = await loadAgentsBundle();\n const docs: DocFull[] = [];\n if (bundle.workspaceAgentsMd?.trim()) {\n docs.push({\n slug: \"agents-workspace\",\n title: \"Workspace AGENTS.md\",\n description: \"Full bundled workspace-level agent instructions.\",\n body: bundle.workspaceAgentsMd,\n });\n }\n if (bundle.agentsMd?.trim()) {\n docs.push({\n slug: \"agents-template\",\n title: \"Template AGENTS.md\",\n description: \"Full bundled template/app agent instructions.\",\n body: bundle.agentsMd,\n });\n }\n for (const skill of Object.values(bundle.skills)) {\n const slug = `skill-${slugifyDocId(skill.meta.name)}`;\n docs.push({\n slug,\n title: `Skill: ${skill.meta.name}`,\n description: skill.meta.description,\n body: skill.content,\n });\n }\n return docs;\n } catch {\n return [];\n }\n}\n\nasync function loadAllDocs(): Promise<DocFull[]> {\n return [...loadFilesystemDocs(), ...(await loadAgentBundleDocs())];\n}\n\nasync function searchDocs(query: string): Promise<DocMeta[]> {\n const docs = await loadAllDocs();\n const terms = query.toLowerCase().split(/\\s+/);\n\n const scored = docs\n .map((doc) => {\n const searchText =\n `${doc.title} ${doc.description} ${doc.body}`.toLowerCase();\n let score = 0;\n for (const term of terms) {\n if (doc.title.toLowerCase().includes(term)) score += 10;\n if (doc.description.toLowerCase().includes(term)) score += 5;\n if (doc.slug.includes(term)) score += 8;\n // Count body occurrences\n const bodyMatches = searchText.split(term).length - 1;\n score += Math.min(bodyMatches, 5);\n }\n return { doc, score };\n })\n .filter((item) => item.score > 0)\n .sort((a, b) => b.score - a.score);\n\n return scored.map(({ doc }) => ({\n slug: doc.slug,\n title: doc.title,\n description: doc.description,\n }));\n}\n\nexport default async function docsSearchScript(args: string[]): Promise<void> {\n const parsed = parseArgs(args);\n\n if (parsed.help === \"true\") {\n console.log(`Usage: pnpm action docs-search [options]\n\nOptions:\n --query <text> Search docs by keyword (returns matching pages)\n --slug <slug> Read a specific doc page by slug\n --list List all available doc pages\n --help Show this help message`);\n return;\n }\n\n if (parsed.list === \"true\") {\n const docs = await loadAllDocs();\n const listing = docs.map((d) => ({\n slug: d.slug,\n title: d.title,\n description: d.description,\n }));\n console.log(JSON.stringify(listing, null, 2));\n return;\n }\n\n if (parsed.slug) {\n const docs = await loadAllDocs();\n const doc = docs.find((d) => d.slug === parsed.slug);\n if (!doc) {\n console.log(`Doc not found: ${parsed.slug}`);\n console.log(`Available: ${docs.map((d) => d.slug).join(\", \")}`);\n return;\n }\n console.log(`# ${doc.title}\\n`);\n if (doc.description) console.log(`${doc.description}\\n`);\n console.log(doc.body);\n return;\n }\n\n if (parsed.query) {\n const results = await searchDocs(parsed.query);\n if (results.length === 0) {\n console.log(`No docs found matching \"${parsed.query}\".`);\n return;\n }\n console.log(`Found ${results.length} doc(s) matching \"${parsed.query}\":\\n`);\n for (const result of results.slice(0, 8)) {\n console.log(` ${result.slug} — ${result.title}`);\n if (result.description) {\n console.log(` ${result.description}`);\n }\n }\n console.log(`\\nUse --slug <slug> to read the full doc.`);\n return;\n }\n\n console.log(\"Provide --query, --slug, or --list. Use --help for details.\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-chat-plugin.d.ts","sourceRoot":"","sources":["../../src/server/agent-chat-plugin.ts"],"names":[],"mappings":"AAaA,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAC;AAqBtC,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAElB,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,gBAAgB,EAajB,MAAM,wBAAwB,CAAC;AA+DhC,OAAO,EAGL,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-chat-plugin.d.ts","sourceRoot":"","sources":["../../src/server/agent-chat-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,14 @@ async function lazyFs() {
|
|
|
37
37
|
return _fs;
|
|
38
38
|
}
|
|
39
39
|
const SHARED_PROMPT_RESOURCE_MAX_CHARS = 30_000;
|
|
40
|
+
const COMPACT_PROMPT_RESOURCE_MAX_CHARS = 12_000;
|
|
41
|
+
const MAX_ACTION_SUMMARY_DESCRIPTION_CHARS = 140;
|
|
42
|
+
function compactPromptLine(value, maxChars) {
|
|
43
|
+
const line = value.replace(/\s+/g, " ").trim();
|
|
44
|
+
if (line.length <= maxChars)
|
|
45
|
+
return line;
|
|
46
|
+
return `${line.slice(0, maxChars - 1)}…`;
|
|
47
|
+
}
|
|
40
48
|
const SHARED_RESOURCE_INDEX_LIMIT = 40;
|
|
41
49
|
function normalizeResourcePathForPrompt(path) {
|
|
42
50
|
return path.replace(/^\/+/, "").trim();
|
|
@@ -44,18 +52,20 @@ function normalizeResourcePathForPrompt(path) {
|
|
|
44
52
|
function escapeXmlAttribute(value) {
|
|
45
53
|
return value.replace(/&/g, "&").replace(/"/g, """);
|
|
46
54
|
}
|
|
47
|
-
function truncatePromptResourceContent(content, path, maxChars = SHARED_PROMPT_RESOURCE_MAX_CHARS) {
|
|
55
|
+
function truncatePromptResourceContent(content, path, maxChars = SHARED_PROMPT_RESOURCE_MAX_CHARS, readHint) {
|
|
48
56
|
const trimmed = content.trim();
|
|
49
57
|
if (trimmed.length <= maxChars)
|
|
50
58
|
return trimmed;
|
|
51
59
|
const omitted = trimmed.length - maxChars;
|
|
52
|
-
|
|
60
|
+
const hint = readHint ??
|
|
61
|
+
`Use resource-read --path "${path}" with the resource's scope for the full content.`;
|
|
62
|
+
return `${trimmed.slice(0, maxChars)}\n\n[Resource ${path} truncated after ${maxChars.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted. ${hint}]`;
|
|
53
63
|
}
|
|
54
64
|
function promptResourceBlock(input) {
|
|
55
65
|
const normalizedPath = input.path
|
|
56
66
|
? normalizeResourcePathForPrompt(input.path)
|
|
57
67
|
: undefined;
|
|
58
|
-
const content = truncatePromptResourceContent(input.content, normalizedPath ?? input.name, input.maxChars);
|
|
68
|
+
const content = truncatePromptResourceContent(input.content, normalizedPath ?? input.name, input.maxChars, input.readHint);
|
|
59
69
|
if (!content)
|
|
60
70
|
return null;
|
|
61
71
|
const pathAttr = normalizedPath
|
|
@@ -112,7 +122,7 @@ function resourceScopeForOwner(owner, currentOwner) {
|
|
|
112
122
|
return "personal";
|
|
113
123
|
return "resource";
|
|
114
124
|
}
|
|
115
|
-
async function loadAgentsResourceForPrompt(owner, scope) {
|
|
125
|
+
async function loadAgentsResourceForPrompt(owner, scope, maxChars = SHARED_PROMPT_RESOURCE_MAX_CHARS) {
|
|
116
126
|
try {
|
|
117
127
|
const agents = await resourceGetByPath(owner, "AGENTS.md");
|
|
118
128
|
if (!agents?.content?.trim())
|
|
@@ -122,13 +132,14 @@ async function loadAgentsResourceForPrompt(owner, scope) {
|
|
|
122
132
|
scope,
|
|
123
133
|
path: "AGENTS.md",
|
|
124
134
|
content: agents.content,
|
|
135
|
+
maxChars,
|
|
125
136
|
});
|
|
126
137
|
}
|
|
127
138
|
catch {
|
|
128
139
|
return null;
|
|
129
140
|
}
|
|
130
141
|
}
|
|
131
|
-
async function loadInstructionResourcesForPrompt(owner, scope) {
|
|
142
|
+
async function loadInstructionResourcesForPrompt(owner, scope, maxChars = SHARED_PROMPT_RESOURCE_MAX_CHARS) {
|
|
132
143
|
try {
|
|
133
144
|
const resources = await resourceList(owner, "instructions/");
|
|
134
145
|
const blocks = [];
|
|
@@ -144,6 +155,7 @@ async function loadInstructionResourcesForPrompt(owner, scope) {
|
|
|
144
155
|
scope,
|
|
145
156
|
path: resource.path,
|
|
146
157
|
content: full.content,
|
|
158
|
+
maxChars,
|
|
147
159
|
});
|
|
148
160
|
if (block)
|
|
149
161
|
blocks.push(block);
|
|
@@ -2019,17 +2031,38 @@ const DEFAULT_SYSTEM_PROMPT = PROD_FRAMEWORK_PROMPT;
|
|
|
2019
2031
|
export async function loadResourcesForPrompt(owner, compact = false, selfAppId) {
|
|
2020
2032
|
await ensurePersonalDefaults(owner);
|
|
2021
2033
|
const sections = [];
|
|
2034
|
+
const promptResourceMaxChars = compact
|
|
2035
|
+
? COMPACT_PROMPT_RESOURCE_MAX_CHARS
|
|
2036
|
+
: SHARED_PROMPT_RESOURCE_MAX_CHARS;
|
|
2022
2037
|
// 1. Workspace AGENTS.md + skills merged into the template bundle.
|
|
2023
2038
|
try {
|
|
2024
2039
|
const { loadAgentsBundle, generateSkillsPromptBlock } = await import("./agents-bundle.js");
|
|
2025
2040
|
const bundle = await loadAgentsBundle();
|
|
2026
2041
|
// Workspace-core AGENTS.md (enterprise-wide instructions), if present.
|
|
2027
2042
|
if (bundle.workspaceAgentsMd && bundle.workspaceAgentsMd.trim()) {
|
|
2028
|
-
|
|
2043
|
+
const block = promptResourceBlock({
|
|
2044
|
+
name: "AGENTS.md",
|
|
2045
|
+
scope: "workspace",
|
|
2046
|
+
path: "AGENTS.md",
|
|
2047
|
+
content: bundle.workspaceAgentsMd,
|
|
2048
|
+
maxChars: promptResourceMaxChars,
|
|
2049
|
+
readHint: 'Use docs-search --slug "agents-workspace" to read the full workspace AGENTS.md.',
|
|
2050
|
+
});
|
|
2051
|
+
if (block)
|
|
2052
|
+
sections.push(block);
|
|
2029
2053
|
}
|
|
2030
2054
|
// 2. Template AGENTS.md — always included (critical template instructions).
|
|
2031
2055
|
if (bundle.agentsMd.trim()) {
|
|
2032
|
-
|
|
2056
|
+
const block = promptResourceBlock({
|
|
2057
|
+
name: "AGENTS.md",
|
|
2058
|
+
scope: "template",
|
|
2059
|
+
path: "AGENTS.md",
|
|
2060
|
+
content: bundle.agentsMd,
|
|
2061
|
+
maxChars: promptResourceMaxChars,
|
|
2062
|
+
readHint: 'Use docs-search --slug "agents-template" to read the full template AGENTS.md.',
|
|
2063
|
+
});
|
|
2064
|
+
if (block)
|
|
2065
|
+
sections.push(block);
|
|
2033
2066
|
}
|
|
2034
2067
|
// In compact mode, skip the full skills block — the agent can use
|
|
2035
2068
|
// `docs-search` to find skills when it needs them.
|
|
@@ -2048,23 +2081,23 @@ export async function loadResourcesForPrompt(owner, compact = false, selfAppId)
|
|
|
2048
2081
|
catch { }
|
|
2049
2082
|
// 3. Runtime workspace resources from SQL. These are global defaults
|
|
2050
2083
|
// inherited by every app in the workspace, not copied into app scopes.
|
|
2051
|
-
const workspaceAgents = await loadAgentsResourceForPrompt(WORKSPACE_OWNER, "workspace");
|
|
2084
|
+
const workspaceAgents = await loadAgentsResourceForPrompt(WORKSPACE_OWNER, "workspace", promptResourceMaxChars);
|
|
2052
2085
|
if (workspaceAgents)
|
|
2053
2086
|
sections.push(workspaceAgents);
|
|
2054
|
-
sections.push(...(await loadInstructionResourcesForPrompt(WORKSPACE_OWNER, "workspace-instruction")));
|
|
2087
|
+
sections.push(...(await loadInstructionResourcesForPrompt(WORKSPACE_OWNER, "workspace-instruction", promptResourceMaxChars)));
|
|
2055
2088
|
// 4. Runtime shared/app/org resources from SQL. These come after workspace
|
|
2056
2089
|
// defaults so app/team-specific guidance can override or narrow them.
|
|
2057
|
-
const sharedAgents = await loadAgentsResourceForPrompt(SHARED_OWNER, "shared");
|
|
2090
|
+
const sharedAgents = await loadAgentsResourceForPrompt(SHARED_OWNER, "shared", promptResourceMaxChars);
|
|
2058
2091
|
if (sharedAgents)
|
|
2059
2092
|
sections.push(sharedAgents);
|
|
2060
|
-
sections.push(...(await loadInstructionResourcesForPrompt(SHARED_OWNER, "shared-instruction")));
|
|
2093
|
+
sections.push(...(await loadInstructionResourcesForPrompt(SHARED_OWNER, "shared-instruction", promptResourceMaxChars)));
|
|
2061
2094
|
// 5. Personal SQL resources. These come last in the instruction stack so a
|
|
2062
2095
|
// user can narrow or override organization/app and workspace defaults.
|
|
2063
2096
|
if (owner !== SHARED_OWNER && owner !== WORKSPACE_OWNER) {
|
|
2064
|
-
const personalAgents = await loadAgentsResourceForPrompt(owner, "personal");
|
|
2097
|
+
const personalAgents = await loadAgentsResourceForPrompt(owner, "personal", promptResourceMaxChars);
|
|
2065
2098
|
if (personalAgents)
|
|
2066
2099
|
sections.push(personalAgents);
|
|
2067
|
-
sections.push(...(await loadInstructionResourcesForPrompt(owner, "personal-instruction")));
|
|
2100
|
+
sections.push(...(await loadInstructionResourcesForPrompt(owner, "personal-instruction", promptResourceMaxChars)));
|
|
2068
2101
|
}
|
|
2069
2102
|
const resourceSkillsBlock = await loadResourceSkillsPromptBlock(owner);
|
|
2070
2103
|
if (resourceSkillsBlock)
|
|
@@ -2154,84 +2187,59 @@ const DEFAULT_DEV_PROMPT = "";
|
|
|
2154
2187
|
function generateActionsPrompt(registry, mode = "tool") {
|
|
2155
2188
|
if (!registry || Object.keys(registry).length === 0)
|
|
2156
2189
|
return "";
|
|
2157
|
-
const
|
|
2190
|
+
const actionEntries = Object.entries(registry);
|
|
2191
|
+
if (mode === "tool") {
|
|
2192
|
+
const summaryLines = actionEntries.map(([name, entry]) => {
|
|
2193
|
+
const desc = compactPromptLine(entry.tool.description, MAX_ACTION_SUMMARY_DESCRIPTION_CHARS);
|
|
2194
|
+
return `- \`${name}\` — ${desc}`;
|
|
2195
|
+
});
|
|
2196
|
+
return `\n\n## Available Actions
|
|
2197
|
+
|
|
2198
|
+
**Use these actions directly as tool calls.** They handle database access, validation, and business logic internally. The native tool schemas contain the full parameter details.
|
|
2199
|
+
|
|
2200
|
+
${summaryLines.join("\n")}`;
|
|
2201
|
+
}
|
|
2202
|
+
const lines = actionEntries.map(([name, entry]) => {
|
|
2158
2203
|
const desc = entry.tool.description;
|
|
2159
2204
|
const params = entry.tool.parameters?.properties;
|
|
2160
2205
|
const requiredFields = new Set(entry.tool.parameters?.required ?? []);
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2206
|
+
// CLI mode: emit `pnpm action <name> --required <type> [--optional <type>]`
|
|
2207
|
+
if (!params || Object.keys(params).length === 0) {
|
|
2208
|
+
return `- \`pnpm action ${name}\` — ${desc}`;
|
|
2209
|
+
}
|
|
2210
|
+
const entries = Object.entries(params);
|
|
2211
|
+
// Required first (alphabetical), then optional (alphabetical)
|
|
2212
|
+
entries.sort(([a], [b]) => {
|
|
2213
|
+
const ar = requiredFields.has(a) ? 0 : 1;
|
|
2214
|
+
const br = requiredFields.has(b) ? 0 : 1;
|
|
2215
|
+
if (ar !== br)
|
|
2216
|
+
return ar - br;
|
|
2217
|
+
return a.localeCompare(b);
|
|
2218
|
+
});
|
|
2219
|
+
const required = [];
|
|
2220
|
+
const optional = [];
|
|
2221
|
+
const requiredNames = [];
|
|
2222
|
+
for (const [k, v] of entries) {
|
|
2223
|
+
const type = v.type ?? "any";
|
|
2224
|
+
const flag = `--${k} <${type}>`;
|
|
2225
|
+
if (requiredFields.has(k)) {
|
|
2226
|
+
required.push(flag);
|
|
2227
|
+
requiredNames.push(`--${k}`);
|
|
2165
2228
|
}
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
entries.sort(([a], [b]) => {
|
|
2169
|
-
const ar = requiredFields.has(a) ? 0 : 1;
|
|
2170
|
-
const br = requiredFields.has(b) ? 0 : 1;
|
|
2171
|
-
if (ar !== br)
|
|
2172
|
-
return ar - br;
|
|
2173
|
-
return a.localeCompare(b);
|
|
2174
|
-
});
|
|
2175
|
-
const required = [];
|
|
2176
|
-
const optional = [];
|
|
2177
|
-
const requiredNames = [];
|
|
2178
|
-
for (const [k, v] of entries) {
|
|
2179
|
-
const type = v.type ?? "any";
|
|
2180
|
-
const flag = `--${k} <${type}>`;
|
|
2181
|
-
if (requiredFields.has(k)) {
|
|
2182
|
-
required.push(flag);
|
|
2183
|
-
requiredNames.push(`--${k}`);
|
|
2184
|
-
}
|
|
2185
|
-
else {
|
|
2186
|
-
optional.push(`[${flag}]`);
|
|
2187
|
-
}
|
|
2229
|
+
else {
|
|
2230
|
+
optional.push(`[${flag}]`);
|
|
2188
2231
|
}
|
|
2189
|
-
const cmd = ["pnpm action " + name, ...required, ...optional].join(" ");
|
|
2190
|
-
const requiredNote = requiredNames.length > 0
|
|
2191
|
-
? ` Required: ${requiredNames.join(", ")}.`
|
|
2192
|
-
: "";
|
|
2193
|
-
return `- \`${cmd}\` — ${desc}.${requiredNote}`;
|
|
2194
2232
|
}
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
// and include type + description so the agent knows exactly how to call.
|
|
2199
|
-
const entries = Object.entries(params);
|
|
2200
|
-
entries.sort(([a], [b]) => {
|
|
2201
|
-
const ar = requiredFields.has(a) ? 0 : 1;
|
|
2202
|
-
const br = requiredFields.has(b) ? 0 : 1;
|
|
2203
|
-
if (ar !== br)
|
|
2204
|
-
return ar - br;
|
|
2205
|
-
return a.localeCompare(b);
|
|
2206
|
-
});
|
|
2207
|
-
const paramList = entries
|
|
2208
|
-
.map(([k, v]) => {
|
|
2209
|
-
const isRequired = requiredFields.has(k);
|
|
2210
|
-
const type = v.type ?? "any";
|
|
2211
|
-
const marker = isRequired ? "*" : "?";
|
|
2212
|
-
const descPart = v.description ? ` — ${v.description}` : "";
|
|
2213
|
-
return `${k}${marker}: ${type}${descPart}`;
|
|
2214
|
-
})
|
|
2215
|
-
.join("; ");
|
|
2216
|
-
return `- \`${name}\`(${paramList}) — ${desc}`;
|
|
2217
|
-
}
|
|
2218
|
-
return `- \`${name}\`() — ${desc}`;
|
|
2233
|
+
const cmd = ["pnpm action " + name, ...required, ...optional].join(" ");
|
|
2234
|
+
const requiredNote = requiredNames.length > 0 ? ` Required: ${requiredNames.join(", ")}.` : "";
|
|
2235
|
+
return `- \`${cmd}\` — ${desc}.${requiredNote}`;
|
|
2219
2236
|
});
|
|
2220
|
-
|
|
2221
|
-
return `\n\n## Available Actions
|
|
2237
|
+
return `\n\n## Available Actions
|
|
2222
2238
|
|
|
2223
2239
|
**These template actions are NOT exposed as direct tools in dev mode. To run any of them, use the \`bash\` tool with the exact command shown below.** Example: \`bash(command="pnpm action add-slide --deckId abc --content 'Hello'")\`.
|
|
2224
2240
|
|
|
2225
2241
|
Do NOT try to call these by name as if they were tools — they will not exist in your tool list. Always go through \`bash\`.
|
|
2226
2242
|
|
|
2227
|
-
${lines.join("\n")}`;
|
|
2228
|
-
}
|
|
2229
|
-
return `\n\n## Available Actions
|
|
2230
|
-
|
|
2231
|
-
**Use these actions directly as tool calls.** They are your primary tools — they handle database access, validation, and business logic internally. Prefer these over lower-level tools like \`web-request\` or \`db-query\`.
|
|
2232
|
-
|
|
2233
|
-
Parameter notation: \`name*\` = required, \`name?\` = optional. Pass parameters as a JSON object.
|
|
2234
|
-
|
|
2235
2243
|
${lines.join("\n")}`;
|
|
2236
2244
|
}
|
|
2237
2245
|
/**
|