create-loopengine 0.1.38 → 0.1.41
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/package.json +2 -2
- package/template/adapters/http.ts +20 -3
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-loopengine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.41",
|
|
4
4
|
"description": "Scaffold a new loopengine agent project — a runnable HTTP server with one example agent, in your own repo.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"homepage": "https://loopengine.co",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/
|
|
10
|
+
"url": "git+https://github.com/loopengine-co/create-loopengine.git"
|
|
11
11
|
},
|
|
12
12
|
"bin": {
|
|
13
13
|
"create-loopengine": "dist/cli.js"
|
|
@@ -102,6 +102,7 @@ import {
|
|
|
102
102
|
installAbility,
|
|
103
103
|
upgradeAbility,
|
|
104
104
|
listInstalledAbilities,
|
|
105
|
+
backfillDependencies,
|
|
105
106
|
AbilityAlreadyInstalledError,
|
|
106
107
|
AbilityCollisionError,
|
|
107
108
|
AbilityManifestError,
|
|
@@ -355,7 +356,16 @@ async function describeAgent(entry: RegistryEntry): Promise<Record<string, unkno
|
|
|
355
356
|
name: config.name,
|
|
356
357
|
systemPrompt: config.systemPrompt,
|
|
357
358
|
model: config.model
|
|
358
|
-
? {
|
|
359
|
+
? {
|
|
360
|
+
provider: config.model.provider,
|
|
361
|
+
model: config.model.model,
|
|
362
|
+
maxTokens: config.model.maxTokens,
|
|
363
|
+
// Only the 'openai' variant of AgentModelConfig carries this —
|
|
364
|
+
// an `in` check rather than a cast, so a provider that can
|
|
365
|
+
// never have it just reports undefined instead of needing its
|
|
366
|
+
// own narrowing branch here.
|
|
367
|
+
reasoningEffort: 'reasoningEffort' in config.model ? config.model.reasoningEffort : undefined,
|
|
368
|
+
}
|
|
359
369
|
: 'custom (module exports its own createModelCall)',
|
|
360
370
|
maxTurns: config.maxTurns ?? 25,
|
|
361
371
|
contextBudgetTokens: config.contextBudgetTokens ?? 100000,
|
|
@@ -1033,9 +1043,16 @@ async function handleAbilitiesGet(res: ServerResponse, agentName: string): Promi
|
|
|
1033
1043
|
const installed = listInstalledAbilities(agentName)
|
|
1034
1044
|
const abilities = await Promise.all(
|
|
1035
1045
|
installed.map(async (a) => {
|
|
1046
|
+
// a.dependencies is only ever undefined for a record from before
|
|
1047
|
+
// that field existed — backfillDependencies re-derives and
|
|
1048
|
+
// persists it once rather than this route silently treating
|
|
1049
|
+
// "never recorded" the same as "confirmed zero", which would
|
|
1050
|
+
// otherwise permanently hide "Install deps" for an ability that
|
|
1051
|
+
// genuinely still needs something.
|
|
1052
|
+
const dependencies = a.dependencies !== undefined ? a.dependencies : ((await backfillDependencies(agentName, a.name)) ?? [])
|
|
1036
1053
|
const latestVersion = await fetchLatestAbilityVersion(a.name)
|
|
1037
|
-
const missingDependencies =
|
|
1038
|
-
return { ...a, latestVersion, upToDate: latestVersion !== null && latestVersion === a.version, missingDependencies }
|
|
1054
|
+
const missingDependencies = dependencies.filter((dep) => !hasNodeModule(dep))
|
|
1055
|
+
return { ...a, dependencies, latestVersion, upToDate: latestVersion !== null && latestVersion === a.version, missingDependencies }
|
|
1039
1056
|
}),
|
|
1040
1057
|
)
|
|
1041
1058
|
res.writeHead(200, { 'content-type': 'application/json' }).end(JSON.stringify({ abilities }))
|