@elevasis/sdk 0.5.18 → 0.5.19

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/cli.cjs CHANGED
@@ -43407,6 +43407,10 @@ var ResourceRegistry = class {
43407
43407
  if (existingOrg) {
43408
43408
  existingOrg.workflows = [...existingOrg.workflows ?? [], ...org.workflows ?? []];
43409
43409
  existingOrg.agents = [...existingOrg.agents ?? [], ...org.agents ?? []];
43410
+ existingOrg.triggers = org.triggers;
43411
+ existingOrg.integrations = org.integrations;
43412
+ existingOrg.humanCheckpoints = org.humanCheckpoints;
43413
+ existingOrg.externalResources = org.externalResources;
43410
43414
  if (org.relationships) {
43411
43415
  existingOrg.relationships = {
43412
43416
  ...existingOrg.relationships ?? {},
@@ -43487,6 +43491,10 @@ var ResourceRegistry = class {
43487
43491
  if (!orgResources) return;
43488
43492
  orgResources.workflows = (orgResources.workflows ?? []).filter((w) => !remoteIds.has(w.config.resourceId));
43489
43493
  orgResources.agents = (orgResources.agents ?? []).filter((a) => !remoteIds.has(a.config.resourceId));
43494
+ orgResources.triggers = void 0;
43495
+ orgResources.integrations = void 0;
43496
+ orgResources.humanCheckpoints = void 0;
43497
+ orgResources.externalResources = void 0;
43490
43498
  if (orgResources.relationships) {
43491
43499
  for (const id of remoteIds) {
43492
43500
  delete orgResources.relationships[id];
@@ -43495,7 +43503,7 @@ var ResourceRegistry = class {
43495
43503
  delete orgResources.relationships;
43496
43504
  }
43497
43505
  }
43498
- const remaining = (orgResources.workflows?.length ?? 0) + (orgResources.agents?.length ?? 0) + (orgResources.triggers?.length ?? 0) + (orgResources.integrations?.length ?? 0) + (orgResources.externalResources?.length ?? 0) + (orgResources.humanCheckpoints?.length ?? 0);
43506
+ const remaining = (orgResources.workflows?.length ?? 0) + (orgResources.agents?.length ?? 0);
43499
43507
  if (remaining > 0) {
43500
43508
  this.serializedCache.set(orgName, serializeOrganization(orgResources));
43501
43509
  } else {
@@ -43865,7 +43873,7 @@ async function apiDelete(endpoint, apiUrl = resolveApiUrl()) {
43865
43873
  // package.json
43866
43874
  var package_default = {
43867
43875
  name: "@elevasis/sdk",
43868
- version: "0.5.18",
43876
+ version: "0.5.19",
43869
43877
  description: "SDK for building Elevasis organization resources",
43870
43878
  type: "module",
43871
43879
  bin: {
@@ -45202,7 +45210,7 @@ var import_path3 = require("path");
45202
45210
  var import_promises2 = require("fs/promises");
45203
45211
 
45204
45212
  // src/cli/commands/templates/core/workspace.ts
45205
- var TEMPLATE_VERSION = 29;
45213
+ var TEMPLATE_VERSION = 31;
45206
45214
  function configTemplate() {
45207
45215
  return `import type { ElevasConfig } from '@elevasis/sdk'
45208
45216
 
@@ -45660,7 +45668,6 @@ For detailed per-dimension adaptation rules, read
45660
45668
  | --- | --- |
45661
45669
  | \`/meta\` | Project lifecycle: init, status, fix, deploy, health |
45662
45670
  | \`/docs\` | Browse, create, and verify permanent documentation |
45663
- | \`/work\` | Task tracking: auto-detects intent (create, save, resume); suggests complete |
45664
45671
  | \`/tutorial\` | Progressive learning path (21 items across 4 sections) |
45665
45672
 
45666
45673
  ## Skills
@@ -45669,6 +45676,7 @@ Skills auto-trigger based on conversation context. You do not need to invoke the
45669
45676
 
45670
45677
  | Skill | Triggers When |
45671
45678
  | --- | --- |
45679
+ | \`work\` | You say /work, ask to track or save progress across sessions, ask what you were working on, want to create/resume/complete a task doc, or say you are done for today. Also proactively save when conversation is heavy or 2+ steps completed |
45672
45680
  | \`creds\` | You mention credentials, API keys, secrets, webhook secrets, or setting up integrations |
45673
45681
 
45674
45682
  ## Maintaining Memory
@@ -45835,8 +45843,8 @@ When automation is none:
45835
45843
  "This workspace comes with a built-in assistant that knows your project, your tools,
45836
45844
  and your goals. Let me show you how it's set up." Open CLAUDE.md and explain in
45837
45845
  plain terms: it's the agent's instruction sheet. Point out the commands in the
45838
- Commands table. Show /meta, /tutorial, /work. Explain the creds skill as
45839
- "the assistant automatically helps when you mention API keys." Tour the memory folder
45846
+ Commands table. Show /meta, /tutorial. Explain the work and creds skills as
45847
+ "the assistant automatically helps when you mention tasks or API keys." Tour the memory folder
45840
45848
  at a high level -- "this is where the agent stores what it learns about your project."
45841
45849
  Verify: Ask the user a question about their business goal and show how the agent
45842
45850
  references their profile in the answer.
@@ -45845,7 +45853,7 @@ Observation focus: agent-as-assistant concept, CLAUDE.md as instruction sheet.
45845
45853
  When automation is low-code:
45846
45854
  Read CLAUDE.md and walk through each section. Explain: what the agent reads on
45847
45855
  session start, how the navigation table works, what the Skills section means.
45848
- Explain the four commands briefly. Show that the agent has memory: open
45856
+ Explain the three commands briefly and the two auto-triggering skills (work, creds). Show that the agent has memory: open
45849
45857
  \`.claude/memory/profile/skills.md\` and show their own profile -- "every session,
45850
45858
  the agent reads this and adapts." Explain the initialized flag.
45851
45859
  Verify: Run /meta to see project status.
@@ -45854,7 +45862,7 @@ Observation focus: memory system concept, session initialization flow.
45854
45862
  When automation is custom:
45855
45863
  Read CLAUDE.md in full. Explain the session initialization sequence: CLAUDE.md ->
45856
45864
  navigation table -> memory files -> context loading. Walk through: Commands section
45857
- (4 commands + creds skill), Rules section (auto-loaded based on file paths), Skills
45865
+ (3 commands + work and creds skills), Rules section (auto-loaded based on file paths), Skills
45858
45866
  section (auto-triggered by content patterns). Point out the initialized flag and
45859
45867
  explain how /meta init set it.
45860
45868
  Verify: Run /meta to see project status; observe which fields it reports.
@@ -45917,7 +45925,7 @@ then notice auto-save. Then run /docs to browse docs/.
45917
45925
  Observation focus: intent-driven task tracking, /work vs /docs separation.
45918
45926
 
45919
45927
  When automation is custom:
45920
- Read \`.claude/commands/work.md\`. Full /work coverage:
45928
+ Read \`.claude/skills/work/SKILL.md\`. Full /work coverage:
45921
45929
  Intent detection table (list, create, resume, save auto-invoked; complete always suggests).
45922
45930
  Task doc anatomy: kebab-case filename, frontmatter with status, Objective/Plan/Progress/
45923
45931
  Resume Context sections. Auto-save behavior: triggers on heavy context, wrap-up signals,
@@ -46460,10 +46468,15 @@ The agent reads current templates from the installed SDK:
46460
46468
  \`@elevasis/sdk/templates\` subpath exports all template functions.
46461
46469
  `;
46462
46470
  }
46463
- function claudeWorkCommandTemplate() {
46464
- return `# /work command
46471
+ function claudeWorkSkillTemplate() {
46472
+ return `---
46473
+ name: work
46474
+ description: "Task tracking and progress persistence. TRIGGER when: user says /work, asks to track or save progress across sessions, asks what they were working on, wants to create/resume/complete a task doc, or says they are done for today. DO NOT TRIGGER when: user is just doing work without wanting to track it in docs/in-progress/."
46475
+ ---
46476
+
46477
+ # Task Tracking
46465
46478
 
46466
- You are a task tracking assistant for this Elevasis workspace. \`/work\` is the primary command for managing all work and projects.
46479
+ You are a task tracking assistant for this Elevasis workspace. \`/work\` is the primary interface for managing all work and projects.
46467
46480
 
46468
46481
  Your job is to **intelligently manage tasks without requiring the user to know subcommands**. Detect what the user needs from context and act accordingly.
46469
46482
 
@@ -46896,6 +46909,9 @@ Ask for provider, org UUID, resource ID, and credential name. Construct:
46896
46909
  function claudeSdkPatternsRuleTemplate() {
46897
46910
  return `---
46898
46911
  description: Elevasis SDK patterns -- imports, source structure, runtime, and platform tools
46912
+ paths:
46913
+ - src/**
46914
+ - elevasis.config.ts
46899
46915
  ---
46900
46916
 
46901
46917
  # SDK Patterns
@@ -46944,6 +46960,9 @@ Use \`platform.call()\` directly only for tools without adapters: \`supabase\`,
46944
46960
  function claudeWorkspaceRulesTemplate() {
46945
46961
  return `---
46946
46962
  description: Project-specific patterns for this workspace, promoted as the project grows
46963
+ paths:
46964
+ - src/**
46965
+ - .claude/rules/workspace-patterns.md
46947
46966
  ---
46948
46967
 
46949
46968
  # Workspace Patterns
@@ -46980,6 +46999,8 @@ This file is yours. The other \`.claude/rules/\` files are SDK-owned and updated
46980
46999
  function claudeDocsAuthoringRuleTemplate() {
46981
47000
  return `---
46982
47001
  description: Documentation conventions for docs/ files -- MDX escaping, frontmatter, structure
47002
+ paths:
47003
+ - docs/**/*.mdx
46983
47004
  ---
46984
47005
 
46985
47006
  # Docs Authoring
@@ -47011,6 +47032,8 @@ description: Concise description
47011
47032
  function claudeMemoryConventionsRuleTemplate() {
47012
47033
  return `---
47013
47034
  description: Memory system conventions -- what to store, structure, pruning
47035
+ paths:
47036
+ - .claude/memory/**
47014
47037
  ---
47015
47038
 
47016
47039
  # Memory Conventions
@@ -47035,6 +47058,9 @@ It is NOT for instructions (commands), reference docs, or templates.
47035
47058
  function claudeProjectMapRuleTemplate() {
47036
47059
  return `---
47037
47060
  description: Project map conventions -- auto-generated, do not edit, maintained by deploy and /meta fix
47061
+ paths:
47062
+ - docs/project-map.mdx
47063
+ - docs/resource-map.mdx
47038
47064
  ---
47039
47065
 
47040
47066
  # Project Map
@@ -47048,6 +47074,8 @@ description: Project map conventions -- auto-generated, do not edit, maintained
47048
47074
  function claudeTaskTrackingRuleTemplate() {
47049
47075
  return `---
47050
47076
  description: In-progress task conventions -- /work command, doc format, status values, auto-save behavior
47077
+ paths:
47078
+ - docs/in-progress/**
47051
47079
  ---
47052
47080
 
47053
47081
  # Task Tracking
@@ -47463,7 +47491,7 @@ function getManagedTemplates(ctx = {}) {
47463
47491
  ".claude/hooks/tool-failure-recovery.mjs": claudeToolFailureRecoveryHookTemplate,
47464
47492
  ".claude/commands/tutorial.md": claudeTutorialCommandTemplate,
47465
47493
  ".claude/commands/meta.md": claudeMetaCommandTemplate,
47466
- ".claude/commands/work.md": claudeWorkCommandTemplate,
47494
+ ".claude/skills/work/SKILL.md": claudeWorkSkillTemplate,
47467
47495
  ".claude/commands/docs.md": claudeDocsCommandTemplate,
47468
47496
  ".claude/skills/creds/SKILL.md": claudeCredsSkillTemplate,
47469
47497
  ".claude/rules/sdk-patterns.md": claudeSdkPatternsRuleTemplate,
@@ -47677,7 +47705,7 @@ var MANAGED_FILES = [
47677
47705
  ".claude/hooks/tool-failure-recovery.mjs",
47678
47706
  ".claude/commands/tutorial.md",
47679
47707
  ".claude/commands/meta.md",
47680
- ".claude/commands/work.md",
47708
+ ".claude/skills/work/SKILL.md",
47681
47709
  ".claude/commands/docs.md",
47682
47710
  ".claude/skills/creds/SKILL.md",
47683
47711
  ".claude/rules/sdk-patterns.md",
@@ -47747,7 +47775,7 @@ function registerInitCommand(program3) {
47747
47775
  ".claude/hooks/tool-failure-recovery.mjs": claudeToolFailureRecoveryHookTemplate(),
47748
47776
  ".claude/commands/tutorial.md": claudeTutorialCommandTemplate(),
47749
47777
  ".claude/commands/meta.md": claudeMetaCommandTemplate(),
47750
- ".claude/commands/work.md": claudeWorkCommandTemplate(),
47778
+ ".claude/skills/work/SKILL.md": claudeWorkSkillTemplate(),
47751
47779
  ".claude/commands/docs.md": claudeDocsCommandTemplate(),
47752
47780
  ".claude/skills/creds/SKILL.md": claudeCredsSkillTemplate(),
47753
47781
  ".claude/rules/sdk-patterns.md": claudeSdkPatternsRuleTemplate(),
@@ -47866,214 +47894,240 @@ function mergeSections(existing, template, sdkOwned) {
47866
47894
  };
47867
47895
  }
47868
47896
  function registerUpdateCommand(program3) {
47869
- program3.command("update").description("Update project scaffold to latest template version").option("--ui", "Add a Vite + React UI app in ui/").action(wrapAction("update", async (options2 = {}) => {
47870
- const cwd = process.cwd();
47871
- const configPath = (0, import_path4.resolve)(cwd, "elevasis.config.ts");
47872
- let currentVersion = 0;
47873
- let configContents = "";
47874
- try {
47875
- configContents = await (0, import_promises3.readFile)(configPath, "utf-8");
47876
- const match = configContents.match(/templateVersion:\s*(\d+)/);
47877
- if (match) {
47878
- currentVersion = parseInt(match[1], 10);
47879
- }
47880
- } catch {
47881
- }
47882
- const upToDate = currentVersion >= TEMPLATE_VERSION;
47883
- if (upToDate && !options2.ui) {
47884
- console.log(source_default.green(` Project is up to date (template version ${TEMPLATE_VERSION})`));
47885
- return;
47886
- }
47887
- let hasUI = !!options2.ui;
47888
- if (!hasUI) {
47897
+ program3.command("update").description("Update project scaffold to latest template version").option("--ui", "Add a Vite + React UI app in ui/").action(
47898
+ wrapAction("update", async (options2 = {}) => {
47899
+ const cwd = process.cwd();
47900
+ const configPath = (0, import_path4.resolve)(cwd, "elevasis.config.ts");
47901
+ let currentVersion = 0;
47902
+ let configContents = "";
47889
47903
  try {
47890
- await (0, import_promises3.access)((0, import_path4.resolve)(cwd, "ui"));
47891
- hasUI = true;
47904
+ configContents = await (0, import_promises3.readFile)(configPath, "utf-8");
47905
+ const match = configContents.match(/templateVersion:\s*(\d+)/);
47906
+ if (match) {
47907
+ currentVersion = parseInt(match[1], 10);
47908
+ }
47892
47909
  } catch {
47893
47910
  }
47894
- }
47895
- const managedTemplates = getManagedTemplates({ hasUI });
47896
- const added = [];
47897
- const flagged = [];
47898
- const appendedGitignore = [];
47899
- const mergedUpdated = [];
47900
- const mergedPreserved = [];
47901
- const uiAffectedFiles = /* @__PURE__ */ new Set([".gitignore", "CLAUDE.md"]);
47902
- const filesToProcess = upToDate ? MANAGED_FILES.filter((f) => uiAffectedFiles.has(f)) : MANAGED_FILES;
47903
- for (const file2 of filesToProcess) {
47904
- const filePath = (0, import_path4.resolve)(cwd, file2);
47905
- const templateFn = managedTemplates[file2];
47906
- if (!templateFn) continue;
47907
- const templateContent = templateFn();
47908
- if (file2 === ".gitignore") {
47911
+ const upToDate = currentVersion >= TEMPLATE_VERSION;
47912
+ if (upToDate && !options2.ui) {
47913
+ console.log(source_default.green(` Project is up to date (template version ${TEMPLATE_VERSION})`));
47914
+ return;
47915
+ }
47916
+ let hasUI = !!options2.ui;
47917
+ if (!hasUI) {
47909
47918
  try {
47910
- await (0, import_promises3.access)(filePath);
47911
- const existingContent = await (0, import_promises3.readFile)(filePath, "utf-8");
47912
- const existingLines = existingContent.split("\n");
47913
- const templateLines = templateContent.split("\n");
47914
- const linesToAppend = [];
47915
- for (const line of templateLines) {
47916
- if (line.trim() === "") continue;
47917
- if (!existingLines.includes(line)) {
47918
- linesToAppend.push(line);
47919
+ await (0, import_promises3.access)((0, import_path4.resolve)(cwd, "ui"));
47920
+ hasUI = true;
47921
+ } catch {
47922
+ }
47923
+ }
47924
+ const managedTemplates = getManagedTemplates({ hasUI });
47925
+ const added = [];
47926
+ const flagged = [];
47927
+ const appendedGitignore = [];
47928
+ const mergedUpdated = [];
47929
+ const mergedPreserved = [];
47930
+ const uiAffectedFiles = /* @__PURE__ */ new Set([".gitignore", "CLAUDE.md"]);
47931
+ const filesToProcess = upToDate ? MANAGED_FILES.filter((f) => uiAffectedFiles.has(f)) : MANAGED_FILES;
47932
+ for (const file2 of filesToProcess) {
47933
+ const filePath = (0, import_path4.resolve)(cwd, file2);
47934
+ const templateFn = managedTemplates[file2];
47935
+ if (!templateFn) continue;
47936
+ const templateContent = templateFn();
47937
+ if (file2 === ".gitignore") {
47938
+ try {
47939
+ await (0, import_promises3.access)(filePath);
47940
+ const existingContent = await (0, import_promises3.readFile)(filePath, "utf-8");
47941
+ const existingLines = existingContent.split("\n");
47942
+ const templateLines = templateContent.split("\n");
47943
+ const linesToAppend = [];
47944
+ for (const line of templateLines) {
47945
+ if (line.trim() === "") continue;
47946
+ if (!existingLines.includes(line)) {
47947
+ linesToAppend.push(line);
47948
+ }
47919
47949
  }
47950
+ if (linesToAppend.length > 0) {
47951
+ const appendContent = (existingContent.endsWith("\n") ? "" : "\n") + linesToAppend.join("\n") + "\n";
47952
+ await (0, import_promises3.writeFile)(filePath, existingContent + appendContent, "utf-8");
47953
+ appendedGitignore.push(...linesToAppend);
47954
+ }
47955
+ } catch {
47956
+ await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
47957
+ await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
47958
+ added.push(file2);
47920
47959
  }
47921
- if (linesToAppend.length > 0) {
47922
- const appendContent = (existingContent.endsWith("\n") ? "" : "\n") + linesToAppend.join("\n") + "\n";
47923
- await (0, import_promises3.writeFile)(filePath, existingContent + appendContent, "utf-8");
47924
- appendedGitignore.push(...linesToAppend);
47960
+ continue;
47961
+ }
47962
+ if (file2 === "elevasis.config.ts") {
47963
+ if (configContents) {
47964
+ if (/templateVersion:\s*\d+/.test(configContents)) {
47965
+ const updated = configContents.replace(/templateVersion:\s*\d+/, `templateVersion: ${TEMPLATE_VERSION}`);
47966
+ await (0, import_promises3.writeFile)(filePath, updated, "utf-8");
47967
+ } else {
47968
+ const updated = configContents.replace(
47969
+ /\bexport default\s*\{/,
47970
+ `export default {
47971
+ templateVersion: ${TEMPLATE_VERSION},`
47972
+ );
47973
+ await (0, import_promises3.writeFile)(filePath, updated, "utf-8");
47974
+ }
47975
+ } else {
47976
+ await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
47977
+ await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
47978
+ added.push(file2);
47925
47979
  }
47926
- } catch {
47927
- await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
47928
- await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
47929
- added.push(file2);
47980
+ continue;
47930
47981
  }
47931
- continue;
47932
- }
47933
- if (file2 === "elevasis.config.ts") {
47934
- if (configContents) {
47935
- if (/templateVersion:\s*\d+/.test(configContents)) {
47936
- const updated = configContents.replace(
47937
- /templateVersion:\s*\d+/,
47938
- `templateVersion: ${TEMPLATE_VERSION}`
47939
- );
47940
- await (0, import_promises3.writeFile)(filePath, updated, "utf-8");
47982
+ if (file2 === "CLAUDE.md") {
47983
+ let existingContent = null;
47984
+ try {
47985
+ await (0, import_promises3.access)(filePath);
47986
+ existingContent = await (0, import_promises3.readFile)(filePath, "utf-8");
47987
+ } catch {
47988
+ }
47989
+ if (existingContent !== null) {
47990
+ const {
47991
+ merged,
47992
+ updated: sectionUpdated,
47993
+ preserved: sectionPreserved
47994
+ } = mergeSections(existingContent, templateContent, SDK_OWNED_SECTIONS);
47995
+ await (0, import_promises3.writeFile)(filePath, merged, "utf-8");
47996
+ mergedUpdated.push(...sectionUpdated);
47997
+ mergedPreserved.push(...sectionPreserved);
47941
47998
  } else {
47942
- const updated = configContents.replace(
47943
- /\bexport default\s*\{/,
47944
- `export default {
47945
- templateVersion: ${TEMPLATE_VERSION},`
47946
- );
47947
- await (0, import_promises3.writeFile)(filePath, updated, "utf-8");
47999
+ await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
48000
+ await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
48001
+ added.push(file2);
47948
48002
  }
47949
- } else {
47950
- await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
47951
- await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
47952
- added.push(file2);
48003
+ continue;
47953
48004
  }
47954
- continue;
47955
- }
47956
- if (file2 === "CLAUDE.md") {
47957
- let existingContent = null;
48005
+ let exists = false;
47958
48006
  try {
47959
48007
  await (0, import_promises3.access)(filePath);
47960
- existingContent = await (0, import_promises3.readFile)(filePath, "utf-8");
48008
+ exists = true;
47961
48009
  } catch {
47962
48010
  }
47963
- if (existingContent !== null) {
47964
- const { merged, updated: sectionUpdated, preserved: sectionPreserved } = mergeSections(existingContent, templateContent, SDK_OWNED_SECTIONS);
47965
- await (0, import_promises3.writeFile)(filePath, merged, "utf-8");
47966
- mergedUpdated.push(...sectionUpdated);
47967
- mergedPreserved.push(...sectionPreserved);
47968
- } else {
48011
+ if (!exists) {
47969
48012
  await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
47970
48013
  await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
47971
48014
  added.push(file2);
48015
+ } else {
48016
+ const existingContent = await (0, import_promises3.readFile)(filePath, "utf-8");
48017
+ const normalize = (s) => s.replace(/\r\n/g, "\n");
48018
+ if (normalize(existingContent) === normalize(templateContent)) {
48019
+ } else {
48020
+ flagged.push(file2);
48021
+ }
47972
48022
  }
47973
- continue;
47974
48023
  }
47975
- let exists = false;
47976
- try {
47977
- await (0, import_promises3.access)(filePath);
47978
- exists = true;
47979
- } catch {
48024
+ const OBSOLETE_FILES = [
48025
+ ".claude/commands/work.md"
48026
+ // v31: moved to .claude/skills/work/SKILL.md
48027
+ ];
48028
+ const removed = [];
48029
+ if (!upToDate) {
48030
+ for (const file2 of OBSOLETE_FILES) {
48031
+ const filePath = (0, import_path4.resolve)(cwd, file2);
48032
+ try {
48033
+ await (0, import_promises3.access)(filePath);
48034
+ await (0, import_promises3.unlink)(filePath);
48035
+ removed.push(file2);
48036
+ } catch {
48037
+ }
48038
+ }
47980
48039
  }
47981
- if (!exists) {
47982
- await (0, import_promises3.mkdir)((0, import_path4.dirname)(filePath), { recursive: true });
47983
- await (0, import_promises3.writeFile)(filePath, templateContent, "utf-8");
47984
- added.push(file2);
47985
- } else {
47986
- const existingContent = await (0, import_promises3.readFile)(filePath, "utf-8");
47987
- const normalize = (s) => s.replace(/\r\n/g, "\n");
47988
- if (normalize(existingContent) === normalize(templateContent)) {
47989
- } else {
47990
- flagged.push(file2);
48040
+ const uiAdded = [];
48041
+ const uiSkipped = [];
48042
+ if (options2.ui) {
48043
+ const orgSlug = (0, import_path4.basename)(cwd).toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/^[^a-z]+/, "").replace(/-+/g, "-").replace(/-$/, "") || "my-workspace";
48044
+ await (0, import_promises3.mkdir)((0, import_path4.resolve)(cwd, "ui/src"), { recursive: true });
48045
+ const uiFiles = getUIFiles(orgSlug);
48046
+ for (const [file2, content] of Object.entries(uiFiles)) {
48047
+ const filePath = (0, import_path4.resolve)(cwd, file2);
48048
+ let exists = false;
48049
+ try {
48050
+ await (0, import_promises3.access)(filePath);
48051
+ exists = true;
48052
+ } catch {
48053
+ }
48054
+ if (!exists) {
48055
+ await (0, import_promises3.writeFile)(filePath, content, "utf-8");
48056
+ uiAdded.push(file2);
48057
+ } else {
48058
+ uiSkipped.push(file2);
48059
+ }
47991
48060
  }
47992
48061
  }
47993
- }
47994
- const uiAdded = [];
47995
- const uiSkipped = [];
47996
- if (options2.ui) {
47997
- const orgSlug = (0, import_path4.basename)(cwd).toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/^[^a-z]+/, "").replace(/-+/g, "-").replace(/-$/, "") || "my-workspace";
47998
- await (0, import_promises3.mkdir)((0, import_path4.resolve)(cwd, "ui/src"), { recursive: true });
47999
- const uiFiles = getUIFiles(orgSlug);
48000
- for (const [file2, content] of Object.entries(uiFiles)) {
48001
- const filePath = (0, import_path4.resolve)(cwd, file2);
48002
- let exists = false;
48003
- try {
48004
- await (0, import_promises3.access)(filePath);
48005
- exists = true;
48006
- } catch {
48062
+ console.log("");
48063
+ if (upToDate) {
48064
+ console.log(source_default.green.bold(` Added UI to project (template version ${TEMPLATE_VERSION})`));
48065
+ } else {
48066
+ console.log(source_default.green.bold(` Updated @elevasis/sdk template v${currentVersion} -> v${TEMPLATE_VERSION}`));
48067
+ }
48068
+ if (added.length > 0) {
48069
+ console.log("");
48070
+ console.log(" Added:");
48071
+ for (const file2 of added) {
48072
+ console.log(source_default.green(` ${file2}`));
48007
48073
  }
48008
- if (!exists) {
48009
- await (0, import_promises3.writeFile)(filePath, content, "utf-8");
48010
- uiAdded.push(file2);
48011
- } else {
48012
- uiSkipped.push(file2);
48074
+ }
48075
+ if (removed.length > 0) {
48076
+ console.log("");
48077
+ console.log(" Removed (obsolete):");
48078
+ for (const file2 of removed) {
48079
+ console.log(source_default.red(` ${file2}`));
48013
48080
  }
48014
48081
  }
48015
- }
48016
- console.log("");
48017
- if (upToDate) {
48018
- console.log(source_default.green.bold(` Added UI to project (template version ${TEMPLATE_VERSION})`));
48019
- } else {
48020
- console.log(source_default.green.bold(` Updated @elevasis/sdk template v${currentVersion} -> v${TEMPLATE_VERSION}`));
48021
- }
48022
- if (added.length > 0) {
48023
- console.log("");
48024
- console.log(" Added:");
48025
- for (const file2 of added) {
48026
- console.log(source_default.green(` ${file2}`));
48082
+ if (appendedGitignore.length > 0) {
48083
+ console.log("");
48084
+ console.log(" Appended to .gitignore:");
48085
+ for (const entry of appendedGitignore) {
48086
+ console.log(source_default.yellow(` ${entry}`));
48087
+ }
48027
48088
  }
48028
- }
48029
- if (appendedGitignore.length > 0) {
48030
- console.log("");
48031
- console.log(" Appended to .gitignore:");
48032
- for (const entry of appendedGitignore) {
48033
- console.log(source_default.yellow(` ${entry}`));
48089
+ if (flagged.length > 0) {
48090
+ console.log("");
48091
+ console.log(" Needs agent review:");
48092
+ for (const file2 of flagged) {
48093
+ console.log(source_default.cyan(` ${file2} (differs from template)`));
48094
+ }
48034
48095
  }
48035
- }
48036
- if (flagged.length > 0) {
48037
- console.log("");
48038
- console.log(" Needs agent review:");
48039
- for (const file2 of flagged) {
48040
- console.log(source_default.cyan(` ${file2} (differs from template)`));
48096
+ if (flagged.length > 0) {
48097
+ console.log("");
48098
+ console.log(source_default.gray(" Run /meta update in Claude Code to merge flagged files."));
48099
+ console.log(source_default.gray(" Or run /meta fix to verify and repair the full framework."));
48041
48100
  }
48042
- }
48043
- if (flagged.length > 0) {
48044
- console.log("");
48045
- console.log(source_default.gray(" Run /meta update in Claude Code to merge flagged files."));
48046
- console.log(source_default.gray(" Or run /meta fix to verify and repair the full framework."));
48047
- }
48048
- if (mergedUpdated.length > 0 || mergedPreserved.length > 0) {
48049
- console.log("");
48050
- console.log(" CLAUDE.md sections:");
48051
- for (const section of mergedUpdated) {
48052
- console.log(source_default.green(` updated: ${section}`));
48101
+ if (mergedUpdated.length > 0 || mergedPreserved.length > 0) {
48102
+ console.log("");
48103
+ console.log(" CLAUDE.md sections:");
48104
+ for (const section of mergedUpdated) {
48105
+ console.log(source_default.green(` updated: ${section}`));
48106
+ }
48107
+ for (const section of mergedPreserved) {
48108
+ console.log(source_default.gray(` preserved: ${section}`));
48109
+ }
48053
48110
  }
48054
- for (const section of mergedPreserved) {
48055
- console.log(source_default.gray(` preserved: ${section}`));
48111
+ if (uiAdded.length > 0) {
48112
+ console.log("");
48113
+ console.log(" UI scaffold added:");
48114
+ for (const file2 of uiAdded) {
48115
+ console.log(source_default.green(` ${file2}`));
48116
+ }
48117
+ console.log("");
48118
+ console.log(source_default.gray(" Next: cd ui && pnpm install"));
48119
+ console.log(source_default.gray(" Set VITE_WORKOS_CLIENT_ID in ui/.env"));
48056
48120
  }
48057
- }
48058
- if (uiAdded.length > 0) {
48059
- console.log("");
48060
- console.log(" UI scaffold added:");
48061
- for (const file2 of uiAdded) {
48062
- console.log(source_default.green(` ${file2}`));
48121
+ if (uiSkipped.length > 0) {
48122
+ console.log("");
48123
+ console.log(" UI files already exist (skipped):");
48124
+ for (const file2 of uiSkipped) {
48125
+ console.log(source_default.gray(` ${file2}`));
48126
+ }
48063
48127
  }
48064
48128
  console.log("");
48065
- console.log(source_default.gray(" Next: cd ui && pnpm install"));
48066
- console.log(source_default.gray(" Set VITE_WORKOS_CLIENT_ID in ui/.env"));
48067
- }
48068
- if (uiSkipped.length > 0) {
48069
- console.log("");
48070
- console.log(" UI files already exist (skipped):");
48071
- for (const file2 of uiSkipped) {
48072
- console.log(source_default.gray(` ${file2}`));
48073
- }
48074
- }
48075
- console.log("");
48076
- }));
48129
+ })
48130
+ );
48077
48131
  }
48078
48132
 
48079
48133
  // src/cli/commands/creds/creds-list.ts
package/dist/index.d.ts CHANGED
@@ -3585,6 +3585,7 @@ interface AcqDeal {
3585
3585
  interface BulkImportParams {
3586
3586
  organizationId: string;
3587
3587
  contacts: CreateContactParams[];
3588
+ listId?: string;
3588
3589
  }
3589
3590
  interface BulkImportResult {
3590
3591
  created: number;
@@ -3981,6 +3982,21 @@ interface RunActorResult {
3981
3982
  totalCount: number;
3982
3983
  executionTimeMs: number;
3983
3984
  }
3985
+ /**
3986
+ * Get dataset items parameters
3987
+ */
3988
+ interface GetDatasetItemsParams {
3989
+ datasetId: string;
3990
+ maxItems?: number;
3991
+ offset?: number;
3992
+ }
3993
+ /**
3994
+ * Get dataset items result
3995
+ */
3996
+ interface GetDatasetItemsResult {
3997
+ items: unknown[];
3998
+ totalCount: number;
3999
+ }
3984
4000
 
3985
4001
  /**
3986
4002
  * Shared Dropbox param/result types (browser-safe)
@@ -5161,6 +5177,10 @@ type ApifyToolMap = {
5161
5177
  params: RunActorParams;
5162
5178
  result: RunActorResult;
5163
5179
  };
5180
+ getDatasetItems: {
5181
+ params: GetDatasetItemsParams;
5182
+ result: GetDatasetItemsResult;
5183
+ };
5164
5184
  };
5165
5185
  type GmailToolMap = {
5166
5186
  sendEmail: {
package/dist/index.js CHANGED
@@ -3339,6 +3339,10 @@ var ResourceRegistry = class {
3339
3339
  if (existingOrg) {
3340
3340
  existingOrg.workflows = [...existingOrg.workflows ?? [], ...org.workflows ?? []];
3341
3341
  existingOrg.agents = [...existingOrg.agents ?? [], ...org.agents ?? []];
3342
+ existingOrg.triggers = org.triggers;
3343
+ existingOrg.integrations = org.integrations;
3344
+ existingOrg.humanCheckpoints = org.humanCheckpoints;
3345
+ existingOrg.externalResources = org.externalResources;
3342
3346
  if (org.relationships) {
3343
3347
  existingOrg.relationships = {
3344
3348
  ...existingOrg.relationships ?? {},
@@ -3419,6 +3423,10 @@ var ResourceRegistry = class {
3419
3423
  if (!orgResources) return;
3420
3424
  orgResources.workflows = (orgResources.workflows ?? []).filter((w) => !remoteIds.has(w.config.resourceId));
3421
3425
  orgResources.agents = (orgResources.agents ?? []).filter((a) => !remoteIds.has(a.config.resourceId));
3426
+ orgResources.triggers = void 0;
3427
+ orgResources.integrations = void 0;
3428
+ orgResources.humanCheckpoints = void 0;
3429
+ orgResources.externalResources = void 0;
3422
3430
  if (orgResources.relationships) {
3423
3431
  for (const id of remoteIds) {
3424
3432
  delete orgResources.relationships[id];
@@ -3427,7 +3435,7 @@ var ResourceRegistry = class {
3427
3435
  delete orgResources.relationships;
3428
3436
  }
3429
3437
  }
3430
- const remaining = (orgResources.workflows?.length ?? 0) + (orgResources.agents?.length ?? 0) + (orgResources.triggers?.length ?? 0) + (orgResources.integrations?.length ?? 0) + (orgResources.externalResources?.length ?? 0) + (orgResources.humanCheckpoints?.length ?? 0);
3438
+ const remaining = (orgResources.workflows?.length ?? 0) + (orgResources.agents?.length ?? 0);
3431
3439
  if (remaining > 0) {
3432
3440
  this.serializedCache.set(orgName, serializeOrganization(orgResources));
3433
3441
  } else {
package/dist/templates.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
 
3
3
  // src/cli/commands/templates/core/workspace.ts
4
- var TEMPLATE_VERSION = 29;
4
+ var TEMPLATE_VERSION = 31;
5
5
  function configTemplate() {
6
6
  return `import type { ElevasConfig } from '@elevasis/sdk'
7
7
 
@@ -332,7 +332,6 @@ For detailed per-dimension adaptation rules, read
332
332
  | --- | --- |
333
333
  | \`/meta\` | Project lifecycle: init, status, fix, deploy, health |
334
334
  | \`/docs\` | Browse, create, and verify permanent documentation |
335
- | \`/work\` | Task tracking: auto-detects intent (create, save, resume); suggests complete |
336
335
  | \`/tutorial\` | Progressive learning path (21 items across 4 sections) |
337
336
 
338
337
  ## Skills
@@ -341,6 +340,7 @@ Skills auto-trigger based on conversation context. You do not need to invoke the
341
340
 
342
341
  | Skill | Triggers When |
343
342
  | --- | --- |
343
+ | \`work\` | You say /work, ask to track or save progress across sessions, ask what you were working on, want to create/resume/complete a task doc, or say you are done for today. Also proactively save when conversation is heavy or 2+ steps completed |
344
344
  | \`creds\` | You mention credentials, API keys, secrets, webhook secrets, or setting up integrations |
345
345
 
346
346
  ## Maintaining Memory
@@ -507,8 +507,8 @@ When automation is none:
507
507
  "This workspace comes with a built-in assistant that knows your project, your tools,
508
508
  and your goals. Let me show you how it's set up." Open CLAUDE.md and explain in
509
509
  plain terms: it's the agent's instruction sheet. Point out the commands in the
510
- Commands table. Show /meta, /tutorial, /work. Explain the creds skill as
511
- "the assistant automatically helps when you mention API keys." Tour the memory folder
510
+ Commands table. Show /meta, /tutorial. Explain the work and creds skills as
511
+ "the assistant automatically helps when you mention tasks or API keys." Tour the memory folder
512
512
  at a high level -- "this is where the agent stores what it learns about your project."
513
513
  Verify: Ask the user a question about their business goal and show how the agent
514
514
  references their profile in the answer.
@@ -517,7 +517,7 @@ Observation focus: agent-as-assistant concept, CLAUDE.md as instruction sheet.
517
517
  When automation is low-code:
518
518
  Read CLAUDE.md and walk through each section. Explain: what the agent reads on
519
519
  session start, how the navigation table works, what the Skills section means.
520
- Explain the four commands briefly. Show that the agent has memory: open
520
+ Explain the three commands briefly and the two auto-triggering skills (work, creds). Show that the agent has memory: open
521
521
  \`.claude/memory/profile/skills.md\` and show their own profile -- "every session,
522
522
  the agent reads this and adapts." Explain the initialized flag.
523
523
  Verify: Run /meta to see project status.
@@ -526,7 +526,7 @@ Observation focus: memory system concept, session initialization flow.
526
526
  When automation is custom:
527
527
  Read CLAUDE.md in full. Explain the session initialization sequence: CLAUDE.md ->
528
528
  navigation table -> memory files -> context loading. Walk through: Commands section
529
- (4 commands + creds skill), Rules section (auto-loaded based on file paths), Skills
529
+ (3 commands + work and creds skills), Rules section (auto-loaded based on file paths), Skills
530
530
  section (auto-triggered by content patterns). Point out the initialized flag and
531
531
  explain how /meta init set it.
532
532
  Verify: Run /meta to see project status; observe which fields it reports.
@@ -589,7 +589,7 @@ then notice auto-save. Then run /docs to browse docs/.
589
589
  Observation focus: intent-driven task tracking, /work vs /docs separation.
590
590
 
591
591
  When automation is custom:
592
- Read \`.claude/commands/work.md\`. Full /work coverage:
592
+ Read \`.claude/skills/work/SKILL.md\`. Full /work coverage:
593
593
  Intent detection table (list, create, resume, save auto-invoked; complete always suggests).
594
594
  Task doc anatomy: kebab-case filename, frontmatter with status, Objective/Plan/Progress/
595
595
  Resume Context sections. Auto-save behavior: triggers on heavy context, wrap-up signals,
@@ -1132,10 +1132,15 @@ The agent reads current templates from the installed SDK:
1132
1132
  \`@elevasis/sdk/templates\` subpath exports all template functions.
1133
1133
  `;
1134
1134
  }
1135
- function claudeWorkCommandTemplate() {
1136
- return `# /work command
1135
+ function claudeWorkSkillTemplate() {
1136
+ return `---
1137
+ name: work
1138
+ description: "Task tracking and progress persistence. TRIGGER when: user says /work, asks to track or save progress across sessions, asks what they were working on, wants to create/resume/complete a task doc, or says they are done for today. DO NOT TRIGGER when: user is just doing work without wanting to track it in docs/in-progress/."
1139
+ ---
1140
+
1141
+ # Task Tracking
1137
1142
 
1138
- You are a task tracking assistant for this Elevasis workspace. \`/work\` is the primary command for managing all work and projects.
1143
+ You are a task tracking assistant for this Elevasis workspace. \`/work\` is the primary interface for managing all work and projects.
1139
1144
 
1140
1145
  Your job is to **intelligently manage tasks without requiring the user to know subcommands**. Detect what the user needs from context and act accordingly.
1141
1146
 
@@ -1568,6 +1573,9 @@ Ask for provider, org UUID, resource ID, and credential name. Construct:
1568
1573
  function claudeSdkPatternsRuleTemplate() {
1569
1574
  return `---
1570
1575
  description: Elevasis SDK patterns -- imports, source structure, runtime, and platform tools
1576
+ paths:
1577
+ - src/**
1578
+ - elevasis.config.ts
1571
1579
  ---
1572
1580
 
1573
1581
  # SDK Patterns
@@ -1616,6 +1624,8 @@ Use \`platform.call()\` directly only for tools without adapters: \`supabase\`,
1616
1624
  function claudeDocsAuthoringRuleTemplate() {
1617
1625
  return `---
1618
1626
  description: Documentation conventions for docs/ files -- MDX escaping, frontmatter, structure
1627
+ paths:
1628
+ - docs/**/*.mdx
1619
1629
  ---
1620
1630
 
1621
1631
  # Docs Authoring
@@ -1647,6 +1657,8 @@ description: Concise description
1647
1657
  function claudeMemoryConventionsRuleTemplate() {
1648
1658
  return `---
1649
1659
  description: Memory system conventions -- what to store, structure, pruning
1660
+ paths:
1661
+ - .claude/memory/**
1650
1662
  ---
1651
1663
 
1652
1664
  # Memory Conventions
@@ -1671,6 +1683,9 @@ It is NOT for instructions (commands), reference docs, or templates.
1671
1683
  function claudeProjectMapRuleTemplate() {
1672
1684
  return `---
1673
1685
  description: Project map conventions -- auto-generated, do not edit, maintained by deploy and /meta fix
1686
+ paths:
1687
+ - docs/project-map.mdx
1688
+ - docs/resource-map.mdx
1674
1689
  ---
1675
1690
 
1676
1691
  # Project Map
@@ -1684,6 +1699,8 @@ description: Project map conventions -- auto-generated, do not edit, maintained
1684
1699
  function claudeTaskTrackingRuleTemplate() {
1685
1700
  return `---
1686
1701
  description: In-progress task conventions -- /work command, doc format, status values, auto-save behavior
1702
+ paths:
1703
+ - docs/in-progress/**
1687
1704
  ---
1688
1705
 
1689
1706
  # Task Tracking
@@ -2081,7 +2098,7 @@ function getManagedTemplates(ctx = {}) {
2081
2098
  ".claude/hooks/tool-failure-recovery.mjs": claudeToolFailureRecoveryHookTemplate,
2082
2099
  ".claude/commands/tutorial.md": claudeTutorialCommandTemplate,
2083
2100
  ".claude/commands/meta.md": claudeMetaCommandTemplate,
2084
- ".claude/commands/work.md": claudeWorkCommandTemplate,
2101
+ ".claude/skills/work/SKILL.md": claudeWorkSkillTemplate,
2085
2102
  ".claude/commands/docs.md": claudeDocsCommandTemplate,
2086
2103
  ".claude/skills/creds/SKILL.md": claudeCredsSkillTemplate,
2087
2104
  ".claude/rules/sdk-patterns.md": claudeSdkPatternsRuleTemplate,
@@ -2092,4 +2109,4 @@ function getManagedTemplates(ctx = {}) {
2092
2109
  };
2093
2110
  }
2094
2111
 
2095
- export { claudeCredsSkillTemplate, claudeDocsAuthoringRuleTemplate, claudeMdTemplate, claudeMemoryConventionsRuleTemplate, claudeMetaCommandTemplate, claudeProjectMapRuleTemplate, claudeSdkBoundaryHookTemplate, claudeSdkPatternsRuleTemplate, claudeSettingsTemplate, claudeTaskTrackingRuleTemplate, claudeTutorialCommandTemplate, claudeWorkCommandTemplate, exampleBarrelTemplate, getManagedTemplates, gitignoreTemplate, operationsBarrelTemplate, platformStatusTemplate, starterWorkflowTemplate };
2112
+ export { claudeCredsSkillTemplate, claudeDocsAuthoringRuleTemplate, claudeMdTemplate, claudeMemoryConventionsRuleTemplate, claudeMetaCommandTemplate, claudeProjectMapRuleTemplate, claudeSdkBoundaryHookTemplate, claudeSdkPatternsRuleTemplate, claudeSettingsTemplate, claudeTaskTrackingRuleTemplate, claudeTutorialCommandTemplate, claudeWorkSkillTemplate, exampleBarrelTemplate, getManagedTemplates, gitignoreTemplate, operationsBarrelTemplate, platformStatusTemplate, starterWorkflowTemplate };
@@ -1,2 +1,2 @@
1
- export { claudeMdTemplate, claudeMetaCommandTemplate, claudeWorkCommandTemplate, claudeTutorialCommandTemplate, claudeSettingsTemplate, claudeSdkBoundaryHookTemplate, claudeCredsSkillTemplate, claudeSdkPatternsRuleTemplate, claudeDocsAuthoringRuleTemplate, claudeMemoryConventionsRuleTemplate, claudeProjectMapRuleTemplate, claudeTaskTrackingRuleTemplate, gitignoreTemplate, starterWorkflowTemplate, platformStatusTemplate, operationsBarrelTemplate, exampleBarrelTemplate, } from './cli/commands/init.js';
1
+ export { claudeMdTemplate, claudeMetaCommandTemplate, claudeWorkSkillTemplate, claudeTutorialCommandTemplate, claudeSettingsTemplate, claudeSdkBoundaryHookTemplate, claudeCredsSkillTemplate, claudeSdkPatternsRuleTemplate, claudeDocsAuthoringRuleTemplate, claudeMemoryConventionsRuleTemplate, claudeProjectMapRuleTemplate, claudeTaskTrackingRuleTemplate, gitignoreTemplate, starterWorkflowTemplate, platformStatusTemplate, operationsBarrelTemplate, exampleBarrelTemplate } from './cli/commands/init.js';
2
2
  export { getManagedTemplates } from './cli/commands/templates/core/index.js';
@@ -9,6 +9,6 @@ import type { ApifyToolMap } from '../../types/index.js';
9
9
  * Create a typed Apify adapter bound to a specific credential.
10
10
  *
11
11
  * @param credential - Credential name as configured in the command center
12
- * @returns Object with 1 typed method for Apify actor operations
12
+ * @returns Object with 2 typed methods for Apify actor operations
13
13
  */
14
14
  export declare function createApifyAdapter(credential: string): import("./create-adapter.js").TypedAdapter<ApifyToolMap>;
@@ -3284,7 +3284,7 @@ function timeoutError(operation) {
3284
3284
  }
3285
3285
 
3286
3286
  // ../core/src/platform/constants/timeouts.ts
3287
- var DEFAULT_TOOL_TIMEOUT = 3e5;
3287
+ var DEFAULT_TOOL_TIMEOUT = 6e5;
3288
3288
 
3289
3289
  // ../core/src/execution/engine/agent/actions/executor.ts
3290
3290
  async function executeToolCall(iterationContext, action) {
@@ -4813,9 +4813,7 @@ function createAttioAdapter(credential) {
4813
4813
  }
4814
4814
 
4815
4815
  // src/worker/adapters/apify.ts
4816
- var METHODS2 = [
4817
- "runActor"
4818
- ];
4816
+ var METHODS2 = ["runActor", "getDatasetItems"];
4819
4817
  function createApifyAdapter(credential) {
4820
4818
  return createAdapter("apify", METHODS2, credential);
4821
4819
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "0.5.18",
3
+ "version": "0.5.19",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "type": "module",
6
6
  "bin": {
@@ -249,8 +249,8 @@ Not all scaffolded files participate in template updates. Files fall into two ca
249
249
 
250
250
  - `elevasis.config.ts`, `.gitignore`, `CLAUDE.md`, `.claude/settings.json`
251
251
  - Three hooks: `.claude/hooks/enforce-sdk-boundary.mjs`, `.claude/hooks/post-edit-validate.mjs`, `.claude/hooks/tool-failure-recovery.mjs`
252
- - Four command files: `.claude/commands/meta.md`, `.claude/commands/docs.md`, `.claude/commands/tutorial.md`, `.claude/commands/work.md`
253
- - One skill: `.claude/skills/creds/SKILL.md`
252
+ - Three command files: `.claude/commands/meta.md`, `.claude/commands/docs.md`, `.claude/commands/tutorial.md`
253
+ - Two skills: `.claude/skills/work/SKILL.md`, `.claude/skills/creds/SKILL.md`
254
254
  - Five rule files: `.claude/rules/sdk-patterns.md`, `.claude/rules/docs-authoring.md`, `.claude/rules/memory-conventions.md`, `.claude/rules/project-map.md`, `.claude/rules/task-tracking.md`
255
255
  - One script: `.claude/scripts/statusline-command.js`
256
256