@quanta-intellect/vessel-browser 0.1.138 → 0.1.140

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.
@@ -3763,6 +3763,17 @@
3763
3763
  background: var(--surface-active);
3764
3764
  }
3765
3765
 
3766
+ .tool-chip-failed {
3767
+ border-left-color: color-mix(in srgb, var(--error) 60%, transparent);
3768
+ background: color-mix(in srgb, var(--error) 8%, var(--surface-hover));
3769
+ }
3770
+
3771
+ .tool-chip-failed .tool-chip-icon,
3772
+ .tool-chip-failed .tool-chip-args {
3773
+ color: color-mix(in srgb, var(--error) 80%, var(--text-muted));
3774
+ opacity: 1;
3775
+ }
3776
+
3766
3777
  .tool-chip-icon {
3767
3778
  flex-shrink: 0;
3768
3779
  width: 16px;
@@ -6158,6 +6158,14 @@ function getSkillSlashSuggestions(value, kits, limit = 6) {
6158
6158
  return left.kit.name.localeCompare(right.kit.name);
6159
6159
  }).slice(0, limit).map(({ kit }) => kit);
6160
6160
  }
6161
+ function canRunWithoutSlashTask(kit, inputKey) {
6162
+ if (inputKey !== "task") return false;
6163
+ const taskPlaceholder = `{{${inputKey}}}`;
6164
+ const placeholderIndex = kit.promptTemplate.indexOf(taskPlaceholder);
6165
+ if (placeholderIndex <= 0) return false;
6166
+ const leadingInstructions = kit.promptTemplate.slice(0, placeholderIndex).replace(/\{\{\w+\}\}/g, "").replace(/\btask\s*:?\s*$/i, "").trim();
6167
+ return /[a-z0-9]/i.test(leadingInstructions);
6168
+ }
6161
6169
  function buildSlashSkillValues(kit, task) {
6162
6170
  const values = {};
6163
6171
  for (const input of kit.inputs) {
@@ -6167,12 +6175,15 @@ function buildSlashSkillValues(kit, task) {
6167
6175
  if (targetInput) {
6168
6176
  values[targetInput.key] = task;
6169
6177
  }
6170
- const missingLabels = kit.inputs.filter((input) => input.required).filter((input) => !values[input.key]?.trim()).map((input) => input.label);
6178
+ const missingLabels = kit.inputs.filter((input) => input.required).filter((input) => {
6179
+ if (values[input.key]?.trim()) return false;
6180
+ return !canRunWithoutSlashTask(kit, input.key);
6181
+ }).map((input) => input.label);
6171
6182
  return { values, missingLabels };
6172
6183
  }
6173
6184
  function renderKitPrompt(kit, values) {
6174
6185
  for (const input of kit.inputs) {
6175
- if (input.required && !values[input.key]?.trim()) {
6186
+ if (input.required && !values[input.key]?.trim() && !canRunWithoutSlashTask(kit, input.key)) {
6176
6187
  logger$1.warn(
6177
6188
  `Required field "${input.key}" is empty for kit "${kit.id}".`
6178
6189
  );
@@ -7594,8 +7605,9 @@ const TOOL_ICONS = {
7594
7605
  function renderToolChip(name, args) {
7595
7606
  const icon = TOOL_ICONS[name] || "⚙";
7596
7607
  const displayName = name.replace(/_/g, " ");
7608
+ const failed = args.trim().startsWith("⚠");
7597
7609
  const argsHtml = args ? `<span class="tool-chip-args">${escapeHtml(args.length > MAX_PREVIEW_TEXT ? args.slice(0, TRUNCATE_KEEP) + "..." : args)}</span>` : "";
7598
- return `<div class="tool-chip"><span class="tool-chip-icon">${icon}</span><span class="tool-chip-name">${escapeHtml(displayName)}</span>${argsHtml}</div>`;
7610
+ return `<div class="tool-chip${failed ? " tool-chip-failed" : ""}"><span class="tool-chip-icon">${icon}</span><span class="tool-chip-name">${escapeHtml(displayName)}</span>${argsHtml}</div>`;
7599
7611
  }
7600
7612
  function renderMarkdown(source) {
7601
7613
  const codeBlocks = [];
@@ -10089,11 +10101,6 @@ ${contextBlock}` : contextBlock);
10089
10101
  const kits = [...BUNDLED_KITS, ...installedKits];
10090
10102
  const invocation = parseSkillSlashInvocation(prompt, kits);
10091
10103
  if (invocation) {
10092
- if (!invocation.task) {
10093
- const [command] = prompt.split(/\s+/);
10094
- setChatCommandError(`Add instructions after ${command}.`);
10095
- return;
10096
- }
10097
10104
  const {
10098
10105
  values,
10099
10106
  missingLabels
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; base-uri 'none'; object-src 'none'; frame-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; font-src 'self' data:; form-action 'self';" />
7
7
  <title>Vessel</title>
8
- <script type="module" crossorigin src="./assets/index-Cjl9fej2.js"></script>
9
- <link rel="stylesheet" crossorigin href="./assets/index-DMcjRzqj.css">
8
+ <script type="module" crossorigin src="./assets/index-l3uzsLbO.js"></script>
9
+ <link rel="stylesheet" crossorigin href="./assets/index-T8vlGvDJ.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@quanta-intellect/vessel-browser",
3
3
  "mcpName": "io.github.unmodeled-tyler/vessel-browser",
4
- "version": "0.1.138",
4
+ "version": "0.1.140",
5
5
  "description": "AI-native web browser runtime for autonomous agents with human supervision",
6
6
  "main": "./out/main/index.js",
7
7
  "bin": {
@@ -70,7 +70,7 @@
70
70
  },
71
71
  "repository": {
72
72
  "type": "git",
73
- "url": "https://github.com/unmodeled-tyler/quanta-vessel-browser.git"
73
+ "url": "https://github.com/unmodeled-tyler/vessel-browser.git"
74
74
  },
75
75
  "engines": {
76
76
  "node": ">=22.12.0",