@lazyingart/agintiflow 0.17.0 → 0.17.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyingart/agintiflow",
3
- "version": "0.17.0",
3
+ "version": "0.17.1",
4
4
  "type": "module",
5
5
  "description": "AgInTiFlow is a resumable Playwright website-control agent with OpenAI-compatible tool calling.",
6
6
  "license": "Apache-2.0",
@@ -144,6 +144,10 @@ try {
144
144
  if (!skillsResult.stdout.includes("website-app") || !skillsResult.stdout.includes("Website And App Builder")) {
145
145
  throw new Error("interactive /skills did not show matching built-in skills");
146
146
  }
147
+ const abbreviatedSkillsResult = await runChat("/sk website\n/ex\n");
148
+ if (abbreviatedSkillsResult.stdout.includes("Unknown command") || !abbreviatedSkillsResult.stdout.includes("website-app")) {
149
+ throw new Error("interactive slash command prefix did not auto-select the first matching command");
150
+ }
147
151
  await runChat("remember that this project prefers pytest smoke tests in AGINTI.md\n/exit\n");
148
152
  const updatedInstructions = await fs.readFile(path.join(tempRoot, "AGINTI.md"), "utf8");
149
153
  if (!updatedInstructions.includes("pytest smoke tests")) {
@@ -181,7 +185,7 @@ try {
181
185
  {
182
186
  ok: true,
183
187
  projectRoot: tempRoot,
184
- checks: ["markdown-render", "markdown-table-no-duplicate", "patch-diff-render", "prompt-layout", "user-prompt-label", "escape-policy", "live-input-status-layout", "agent-response-gutter", "aginti-md", "instructions-command", "skills-command", "instructions-chat-edit", "interactive-chat", "mock-file-write", "run-status", "resume-latest", "resume-history-full"],
188
+ checks: ["markdown-render", "markdown-table-no-duplicate", "patch-diff-render", "prompt-layout", "user-prompt-label", "escape-policy", "live-input-status-layout", "agent-response-gutter", "aginti-md", "instructions-command", "skills-command", "slash-prefix-autoselect", "instructions-chat-edit", "interactive-chat", "mock-file-write", "run-status", "resume-latest", "resume-history-full"],
185
189
  },
186
190
  null,
187
191
  2
@@ -153,6 +153,15 @@ function commandSuggestions(line = "") {
153
153
  return SLASH_COMMANDS.filter((command) => command.startsWith(trimmed)).slice(0, 8);
154
154
  }
155
155
 
156
+ function resolveSlashCommand(command = "") {
157
+ const raw = String(command || "").trim();
158
+ if (!raw) return raw;
159
+ const slashCommand = `/${raw}`;
160
+ if (SLASH_COMMANDS.includes(slashCommand)) return raw;
161
+ const suggestion = SLASH_COMMANDS.find((candidate) => candidate.startsWith(slashCommand));
162
+ return suggestion ? suggestion.slice(1) : raw;
163
+ }
164
+
156
165
  function clamp(value, min, max) {
157
166
  return Math.min(Math.max(value, min), max);
158
167
  }
@@ -1465,7 +1474,8 @@ async function promptAndSaveProviderKey(provider = "", state = null) {
1465
1474
  }
1466
1475
 
1467
1476
  async function handleCommand(line, state, packageDir) {
1468
- const [command, ...rest] = line.slice(1).trim().split(/\s+/);
1477
+ const [rawCommand, ...rest] = line.slice(1).trim().split(/\s+/);
1478
+ const command = resolveSlashCommand(rawCommand);
1469
1479
  const value = rest.join(" ").trim();
1470
1480
 
1471
1481
  if (!command || command === "help" || command === "?") {