@lumerahq/cli 0.33.0 → 0.33.2

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.
@@ -5,8 +5,8 @@ import { join, resolve } from "path";
5
5
  import pc from "picocolors";
6
6
 
7
7
  // src/lib/functions-sdk.ts
8
- var FUNCTIONS_SDK_VERSION_RANGE = ">=0.42.1,<0.43.0";
9
- var FUNCTIONS_SDK_COMPATIBILITY_RANGE = ">=0.34.0,<0.43.0";
8
+ var FUNCTIONS_SDK_VERSION_RANGE = ">=0.43.0,<0.44.0";
9
+ var FUNCTIONS_SDK_COMPATIBILITY_RANGE = ">=0.34.0,<0.44.0";
10
10
  var FUNCTIONS_SDK_REQUIREMENT = `lumera[functions]${FUNCTIONS_SDK_COMPATIBILITY_RANGE}`;
11
11
  var DEFAULT_FUNCTIONS_SDK_REQUIREMENT = `lumera[functions]${FUNCTIONS_SDK_VERSION_RANGE}`;
12
12
  var RELEASE_SDK_REQUIREMENT = `lumera[release]${FUNCTIONS_SDK_VERSION_RANGE}`;
@@ -4,7 +4,7 @@ import {
4
4
  findFunctionsProjectRoot,
5
5
  functions,
6
6
  runFunctionRunner
7
- } from "./chunk-OQKBXKXW.js";
7
+ } from "./chunk-BCSUKRDA.js";
8
8
  import "./chunk-PNKVD2UK.js";
9
9
  export {
10
10
  buildFunctionRunnerArgs,
package/dist/index.js CHANGED
@@ -242,25 +242,25 @@ async function main() {
242
242
  switch (command) {
243
243
  // Resource commands
244
244
  case "plan":
245
- await import("./resources-LQWCEIJT.js").then((m) => m.plan(args.slice(1)));
245
+ await import("./resources-IY3XSYJH.js").then((m) => m.plan(args.slice(1)));
246
246
  break;
247
247
  case "apply":
248
- await import("./resources-LQWCEIJT.js").then((m) => m.apply(args.slice(1)));
248
+ await import("./resources-IY3XSYJH.js").then((m) => m.apply(args.slice(1)));
249
249
  break;
250
250
  case "pull":
251
- await import("./resources-LQWCEIJT.js").then((m) => m.pull(args.slice(1)));
251
+ await import("./resources-IY3XSYJH.js").then((m) => m.pull(args.slice(1)));
252
252
  break;
253
253
  case "destroy":
254
- await import("./resources-LQWCEIJT.js").then((m) => m.destroy(args.slice(1)));
254
+ await import("./resources-IY3XSYJH.js").then((m) => m.destroy(args.slice(1)));
255
255
  break;
256
256
  case "list":
257
- await import("./resources-LQWCEIJT.js").then((m) => m.list(args.slice(1)));
257
+ await import("./resources-IY3XSYJH.js").then((m) => m.list(args.slice(1)));
258
258
  break;
259
259
  case "show":
260
- await import("./resources-LQWCEIJT.js").then((m) => m.show(args.slice(1)));
260
+ await import("./resources-IY3XSYJH.js").then((m) => m.show(args.slice(1)));
261
261
  break;
262
262
  case "diff":
263
- await import("./resources-LQWCEIJT.js").then((m) => m.diff(args.slice(1)));
263
+ await import("./resources-IY3XSYJH.js").then((m) => m.diff(args.slice(1)));
264
264
  break;
265
265
  // Development
266
266
  case "dev":
@@ -270,12 +270,12 @@ async function main() {
270
270
  await import("./run-4XFA5ZDJ.js").then((m) => m.run(args.slice(1)));
271
271
  break;
272
272
  case "functions":
273
- await import("./functions-WUZVDJUP.js").then(
273
+ await import("./functions-BAJ3PCNO.js").then(
274
274
  (m) => m.functions(subcommand, args.slice(2))
275
275
  );
276
276
  break;
277
277
  case "project":
278
- await import("./project-2VFG3J42.js").then(
278
+ await import("./project-O7ZZQXFN.js").then(
279
279
  (m) => m.project(subcommand, args.slice(2))
280
280
  );
281
281
  break;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RELEASE_SDK_REQUIREMENT,
3
3
  findFunctionsProjectRoot
4
- } from "./chunk-OQKBXKXW.js";
4
+ } from "./chunk-BCSUKRDA.js";
5
5
  import "./chunk-PNKVD2UK.js";
6
6
 
7
7
  // src/commands/project.ts
@@ -3387,7 +3387,7 @@ async function planAgents(api, localAgents, projectId, localSourceSkillSlugs = /
3387
3387
  changes.push({ type: "create", resource: "agent", id: agent.external_id, name: agent.name });
3388
3388
  } else {
3389
3389
  const diffs = [];
3390
- if (JSON.stringify([...remote.allowed_functions ?? []].sort()) !== JSON.stringify([...agent.allowed_functions ?? []].sort())) diffs.push("allowed_functions");
3390
+ if (allowedFunctionsChanged(remote.allowed_functions, agent.allowed_functions)) diffs.push("allowed_functions");
3391
3391
  if (remote.name !== agent.name) diffs.push("name");
3392
3392
  if ((remote.description || "") !== (agent.description || "")) diffs.push("description");
3393
3393
  if ((remote.system_prompt || "").trim() !== systemPrompt.trim()) diffs.push("system_prompt");
@@ -3498,7 +3498,7 @@ async function applyAgents(api, localAgents, projectId, localSourceSkillSlugs =
3498
3498
  ...agent.thinking_level !== void 0 ? { thinking_level: agent.thinking_level } : {},
3499
3499
  idle_reap_timeout_seconds: agent.idle_reap_timeout_seconds ?? 0,
3500
3500
  skill_ids: skillIds,
3501
- allowed_functions: agent.allowed_functions ?? [],
3501
+ ...agent.allowed_functions !== void 0 ? { allowed_functions: agent.allowed_functions } : {},
3502
3502
  policy_script: policyScript || "",
3503
3503
  policy_enabled: agent.policy_enabled || false,
3504
3504
  policy_description: agent.policy_description || ""
@@ -3519,6 +3519,10 @@ async function applyAgents(api, localAgents, projectId, localSourceSkillSlugs =
3519
3519
  }
3520
3520
  return errors;
3521
3521
  }
3522
+ function allowedFunctionsChanged(remote, local) {
3523
+ if (local === void 0) return false;
3524
+ return JSON.stringify([...remote ?? []].sort()) !== JSON.stringify([...local].sort());
3525
+ }
3522
3526
  async function pullAgents(api, platformDir, filterName, projectId, appName) {
3523
3527
  const agentsDir = join2(platformDir, "agents");
3524
3528
  mkdirSync(agentsDir, { recursive: true });
@@ -5025,7 +5029,7 @@ async function diff(args) {
5025
5029
  console.log(` policy_enabled: ${pc2.red(String(remote.policy_enabled || false))} \u2192 ${pc2.green(String(local.agent.policy_enabled || false))}`);
5026
5030
  const promptChanged = (remote.system_prompt || "").trim() !== local.systemPrompt.trim();
5027
5031
  const policyChanged = (remote.policy_script || "").trim() !== (local.policyScript || "").trim();
5028
- const functionsChanged = JSON.stringify([...remote.allowed_functions ?? []].sort()) !== JSON.stringify([...local.agent.allowed_functions ?? []].sort());
5032
+ const functionsChanged = allowedFunctionsChanged(remote.allowed_functions, local.agent.allowed_functions);
5029
5033
  if (functionsChanged) console.log(` allowed_functions: ${JSON.stringify(remote.allowed_functions ?? [])} \u2192 ${JSON.stringify(local.agent.allowed_functions ?? [])}`);
5030
5034
  const thinkingLevelChanged = local.agent.thinking_level !== void 0 && (remote.thinking_level || "") !== local.agent.thinking_level;
5031
5035
  if (!functionsChanged && !promptChanged && !policyChanged && !thinkingLevelChanged && remote.name === local.agent.name && (remote.description || "") === (local.agent.description || "") && (remote.model || "") === (local.agent.model || "") && (remote.idle_reap_timeout_seconds ?? 0) === (local.agent.idle_reap_timeout_seconds ?? 0) && (remote.policy_enabled || false) === (local.agent.policy_enabled || false)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumerahq/cli",
3
- "version": "0.33.0",
3
+ "version": "0.33.2",
4
4
  "description": "CLI for building and deploying Lumera apps",
5
5
  "type": "module",
6
6
  "engines": {
@@ -1,56 +1,38 @@
1
1
  # {{projectTitle}}
2
2
 
3
- > Status: new project — nothing built yet.
4
-
5
- <!--
6
- AGENT CONTRACT — keep this file true.
7
- This is the project's durable memory, shared by every coding agent that works
8
- here. It records what cannot be re-derived from the code: why things are the
9
- way they are, what the business needs, what must not break.
10
- - Update it in the same turn as the change that makes it stale.
11
- - Small focused edits; delete stale lines rather than appending duplicates.
12
- - Leave a section empty rather than padding it.
13
- - Keep this file concise and always under 100 KB. Before an update would cross
14
- that limit—or if the file is already over it—compact it in the same turn by
15
- removing stale, superseded, duplicated, transient, and re-derivable detail
16
- while preserving user-written notes.
17
- - Do NOT put here: platform documentation (skills and prompts carry that),
18
- code inventories, secrets/credentials, or transient chat summaries.
19
- -->
20
-
21
3
  ## What this is
22
4
 
23
- One paragraph: the problem this solves, for whom, and its current shape
5
+ One short paragraph: the problem this solves, for whom, and its current shape
24
6
  (app / automation / agent / one-off analysis). Update when scope changes.
25
7
 
26
- ## Business context
27
-
28
- - Who uses it, when, and for what workflow (roles, cadence — e.g. month-end)
29
- - Domain terms with tenant-specific meaning
30
- - Source-of-truth data and how it arrives (uploads, mailbox, webhooks, integrations)
31
-
32
- ## Data
33
-
34
- - What each collection represents; non-obvious field/status semantics
35
- - Identifiers that map to external systems, and their formats
36
-
37
- ## Decisions
38
-
39
- - YYYY-MM-DD — decision — why.
40
-
41
8
  ## Working agreements
42
9
 
43
- - User preferences: review gates, deploy expectations, formatting
44
-
45
- ## Correctness
46
-
47
- - What "correct" means here: validations, reconciliations, tolerances, approvals
48
- - Known edge cases; behavior when required data is missing
49
-
50
- ## Gotchas
51
-
52
- - Things that look wrong but are intentional; workarounds and why
53
-
54
- ## Follow-ups
55
-
56
- - [ ] Open questions and deferred work
10
+ Keep critical safety rules and user preferences that apply to every task here.
11
+
12
+ ## Managing memory
13
+
14
+ - Keep this file short: ideally a few KB, always under 10 KB. Put detailed
15
+ knowledge in `memories/<topic>.md` and link it from the index below.
16
+ - Save information that helps future agents: useful context, user preferences,
17
+ important decisions and their reasons, proven approaches, and lessons from
18
+ mistakes. Prefer knowledge that saves the user from repeating instructions or
19
+ future agents from rediscovering hard-won solutions. If there is nothing worth
20
+ remembering, do not update memory.
21
+ - Distill what matters, not everything that happened. Keep routine progress and
22
+ temporary task state in the conversation.
23
+ - Include useful paths, commands, and verification steps when they make a lesson
24
+ easier to reuse. For recurring problems, capture the symptom, cause, and proven
25
+ fix. Be honest about uncertainty. Do not turn a one-off request into a standing
26
+ rule. Check changeable facts against their source.
27
+ - Read only relevant topics when needed; search if necessary. Do not load every
28
+ topic or use automatic file imports.
29
+ - Organize by topic, not turn or date. Update existing notes, merge duplicates,
30
+ and remove outdated material. Keep memory files in version control and check
31
+ this file's size and links after changes.
32
+ - Keep secrets out of memory. Link to source documents rather than copying them.
33
+ Data the app needs belongs in collections or app configuration.
34
+
35
+ ## Memory index
36
+
37
+ Add one relative Markdown link with a one-line description per topic after
38
+ creating the file. No topics recorded yet.
File without changes
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  description = "{{projectTitle}} - Lumera custom app"
5
5
  requires-python = ">=3.11"
6
6
  dependencies = [
7
- "lumera[functions]>=0.42.1,<0.43.0",
7
+ "lumera[functions]>=0.43.0,<0.44.0",
8
8
  ]
9
9
 
10
10
  [project.optional-dependencies]