@arpproject/vibearp-mcp 1.3.0 → 1.3.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.
package/README.md CHANGED
@@ -41,6 +41,9 @@ rocrate-mcp-server -i codex
41
41
  Supported IDs are `codex`, `claude`, `opencode`, `kilo`, `roo`, `gemini`, and
42
42
  `qwen`. The generated configuration launches the standalone server through the
43
43
  shared per-user RockIT socket (`~/.rockit/rocrate-mcp-server.sock`).
44
+ For OpenCode, the installer preserves the config format it finds: native V2
45
+ configs use `mcp.servers`, while V1-shaped configs use the format that V2 still
46
+ supports for compatibility.
44
47
 
45
48
  The standalone server and RocKIT share the same per-user profile and schema
46
49
  storage by default: `~/.rockit`. Set `ROCKIT_ROOT_PATH` to use another shared
@@ -111,6 +114,9 @@ Az elérhető azonosítók: `codex`, `claude`, `opencode`, `kilo`, `roo`, `gemin
111
114
  és `qwen`. A létrehozott konfiguráció a standalone szervert a közös,
112
115
  felhasználónkénti RockIT socketen (`~/.rockit/rocrate-mcp-server.sock`) keresztül
113
116
  indítja.
117
+ OpenCode esetén a telepítő a meglévő konfiguráció formátumát követi: a natív V2
118
+ konfigurációban az `mcp.servers` szerkezetet használja, a V1 alakú beállításokat
119
+ pedig V2 kompatibilitási okból továbbra is elfogadja.
114
120
 
115
121
  A standalone szerver és a RocKIT alapértelmezés szerint ugyanazt a
116
122
  felhasználónkénti profil- és séma-tárolót használja: `~/.rockit`. Másik közös
@@ -150,6 +156,8 @@ engedélyezett hozzáféréssel rendelkezik.
150
156
  This package is maintained by SZTAKI, Department of Distributed Systems
151
157
  (<https://dsd.sztaki.hu>).
152
158
 
159
+ Contact: [rockit@dsd.sztaki.hu](mailto:rockit@dsd.sztaki.hu).
160
+
153
161
  Individual contributors are listed in `package.json`.
154
162
 
155
163
  ## License
package/lib/server.js CHANGED
@@ -29,9 +29,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
29
  mod
30
30
  ));
31
31
 
32
- // ../../node_modules/mime-types/node_modules/mime-db/db.json
32
+ // ../rockit-common/node_modules/mime-db/db.json
33
33
  var require_db = __commonJS({
34
- "../../node_modules/mime-types/node_modules/mime-db/db.json"(exports2, module2) {
34
+ "../rockit-common/node_modules/mime-db/db.json"(exports2, module2) {
35
35
  module2.exports = {
36
36
  "application/1d-interleaved-parityfec": {
37
37
  source: "iana"
@@ -8554,16 +8554,16 @@ var require_db = __commonJS({
8554
8554
  }
8555
8555
  });
8556
8556
 
8557
- // ../../node_modules/mime-types/node_modules/mime-db/index.js
8557
+ // ../rockit-common/node_modules/mime-db/index.js
8558
8558
  var require_mime_db = __commonJS({
8559
- "../../node_modules/mime-types/node_modules/mime-db/index.js"(exports2, module2) {
8559
+ "../rockit-common/node_modules/mime-db/index.js"(exports2, module2) {
8560
8560
  module2.exports = require_db();
8561
8561
  }
8562
8562
  });
8563
8563
 
8564
- // ../../node_modules/mime-types/index.js
8564
+ // ../rockit-common/node_modules/mime-types/index.js
8565
8565
  var require_mime_types = __commonJS({
8566
- "../../node_modules/mime-types/index.js"(exports2) {
8566
+ "../rockit-common/node_modules/mime-types/index.js"(exports2) {
8567
8567
  "use strict";
8568
8568
  var db = require_mime_db();
8569
8569
  var extname2 = require("path").extname;
@@ -8668,6 +8668,7 @@ var require_ro_crate_technical_files = __commonJS({
8668
8668
  exports2.RO_CRATE_METADATA_FILE,
8669
8669
  exports2.RO_CRATE_APPROVAL_FILE_NAME,
8670
8670
  exports2.RO_CRATE_APPROVAL_FILE,
8671
+ "**/.DS_Store",
8671
8672
  "AGENTS.md",
8672
8673
  "CLAUDE.md",
8673
8674
  `${exports2.ROCKIT_IGNORE_DIR}/`
@@ -8675,7 +8676,8 @@ var require_ro_crate_technical_files = __commonJS({
8675
8676
  exports2.DEFAULT_IGNORED_ROOT_FILES = [
8676
8677
  exports2.RO_CRATE_METADATA_FILE,
8677
8678
  exports2.RO_CRATE_PREVIEW_FILE,
8678
- exports2.RO_CRATE_APPROVAL_FILE_NAME
8679
+ exports2.RO_CRATE_APPROVAL_FILE_NAME,
8680
+ ".DS_Store"
8679
8681
  ];
8680
8682
  }
8681
8683
  });
@@ -8797,6 +8799,9 @@ var require_default_ro_crate = __commonJS({
8797
8799
  if (!normalized) {
8798
8800
  return false;
8799
8801
  }
8802
+ if (normalized.split("/").some((segment) => segment.toLowerCase() === ".ds_store")) {
8803
+ return false;
8804
+ }
8800
8805
  if (isRootEntry) {
8801
8806
  const rootName = normalized.split("/")[0];
8802
8807
  if (rootName.startsWith(".")) {
@@ -36475,6 +36480,9 @@ var require_schema_url_resolution = __commonJS({
36475
36480
  exports2.deriveResourceBaseUrl = deriveResourceBaseUrl;
36476
36481
  function buildSchemaFetchCandidates(input, provider) {
36477
36482
  const value = input.trim();
36483
+ if (!value) {
36484
+ return [];
36485
+ }
36478
36486
  const resourceBaseUrl = deriveResourceBaseUrl(provider, value);
36479
36487
  const providerTemplateCandidates = buildProviderTemplateCandidates(value, provider, resourceBaseUrl);
36480
36488
  if (!/^https?:\/\//.test(value)) {
@@ -44429,7 +44437,7 @@ var AGENT_DEFINITIONS = [
44429
44437
  executables: ["opencode"],
44430
44438
  markerPaths: [".opencode"],
44431
44439
  config: {
44432
- relativePath: [".config", "opencode", "config.json"],
44440
+ relativePath: [".config", "opencode", "opencode.json"],
44433
44441
  kind: "json"
44434
44442
  }
44435
44443
  },
@@ -44627,18 +44635,21 @@ function toSerializableLaunchConfig(launchConfig) {
44627
44635
  }
44628
44636
  function upsertJsonMcpConfig(content, agentId, launchConfig) {
44629
44637
  const parsed = content.trim() === "" ? {} : JSON.parse(content);
44630
- const existingMcp = parsed.mcp && typeof parsed.mcp === "object" && !Array.isArray(parsed.mcp) ? parsed.mcp : {};
44631
- const existingMcpServers = parsed.mcpServers && typeof parsed.mcpServers === "object" && !Array.isArray(parsed.mcpServers) ? parsed.mcpServers : {};
44638
+ const existingMcp = isRecord(parsed.mcp) ? parsed.mcp : {};
44639
+ const existingMcpServers = isRecord(parsed.mcpServers) ? parsed.mcpServers : {};
44632
44640
  if (agentId === "opencode") {
44633
- parsed.mcp = {
44634
- ...existingMcp,
44635
- rocrate: {
44636
- type: "local",
44637
- enabled: true,
44638
- command: [launchConfig.command, ...launchConfig.args],
44639
- environment: launchConfig.env
44640
- }
44641
+ const nativeV2 = isOpenCodeV2ServerMap(existingMcp.servers);
44642
+ const existingServers = isRecord(existingMcp.servers) ? existingMcp.servers : {};
44643
+ const server = {
44644
+ type: "local",
44645
+ ...nativeV2 ? { disabled: false } : { enabled: true },
44646
+ command: [launchConfig.command, ...launchConfig.args],
44647
+ environment: launchConfig.env
44641
44648
  };
44649
+ parsed.mcp = nativeV2 ? {
44650
+ ...existingMcp,
44651
+ servers: { ...existingServers, rocrate: server }
44652
+ } : { ...existingMcp, rocrate: server };
44642
44653
  } else {
44643
44654
  parsed.mcpServers = {
44644
44655
  ...existingMcpServers,
@@ -44648,6 +44659,12 @@ function upsertJsonMcpConfig(content, agentId, launchConfig) {
44648
44659
  return `${JSON.stringify(parsed, null, 2)}
44649
44660
  `;
44650
44661
  }
44662
+ function isRecord(value) {
44663
+ return typeof value === "object" && value !== null && !Array.isArray(value);
44664
+ }
44665
+ function isOpenCodeV2ServerMap(value) {
44666
+ return isRecord(value) && typeof value.type !== "string" && typeof value.command !== "string" && !Array.isArray(value.command);
44667
+ }
44651
44668
  function buildMcpConfigSection(agent, launchConfig) {
44652
44669
  if (agent.configKind === "toml") {
44653
44670
  return `${buildTomlSnippet(launchConfig)}
@@ -52328,7 +52345,7 @@ var tools = [
52328
52345
  },
52329
52346
  {
52330
52347
  name: "create_default_rocrate",
52331
- description: "Create an initial ro-crate-metadata.json for a directory that does not yet have one. Scans files, bootstraps .rockit/ignored.txt, and writes metadata atomically.",
52348
+ description: "Create an initial ro-crate-metadata.json for a directory that does not yet have one. For a user-requested local crate creation or directory-file addition, call this as the first metadata operation before context/profile discovery. Scans directory contents while excluding .DS_Store at every depth, bootstraps .rockit/ignored.txt with the **/.DS_Store default ignore rule, and writes metadata atomically. Never use it to overwrite an existing crate unless overwrite=true was explicitly requested.",
52332
52349
  inputSchema: {
52333
52350
  type: "object",
52334
52351
  properties: {
@@ -52752,6 +52769,11 @@ You are editing an RO-Crate as a data steward.
52752
52769
 
52753
52770
  ## Mandatory Startup
52754
52771
 
52772
+ The configured RO-Crate MCP server's call names are "RO-Crate MCP" and
52773
+ "VibeARP". When a user says either name, use the configured server's tools even
52774
+ if the harness displays a different server label (commonly \`rocrate\` or
52775
+ \`rocrate-mcp-server\`).
52776
+
52755
52777
  Before advising on or editing RO-Crate metadata, read this top-level workflow doc
52756
52778
  with \`read_agent_workflow_doc\`. Then read the step-specific workflow doc before
52757
52779
  each step.
@@ -52760,13 +52782,21 @@ Use MCP \`rocrate\` tools for metadata edits and validation. Do not edit
52760
52782
  \`ro-crate-metadata.json\` directly unless the user explicitly asks for raw JSON
52761
52783
  editing and accepts the risk.
52762
52784
 
52763
- If the user starts work in a local directory and \`ro-crate-metadata.json\` is not
52764
- present, offer to initialize the directory with \`create_default_rocrate\` before
52765
- other metadata work. Explain that it scans the directory, writes
52766
- \`ro-crate-metadata.json\`, and bootstraps \`.rockit/ignored.txt\`. Do not overwrite
52767
- an existing metadata file unless the user explicitly asks and the tool call uses
52785
+ For a user-requested local RO-Crate creation or addition of files from a
52786
+ directory, check whether \`ro-crate-metadata.json\` exists. If it is absent, call
52787
+ \`create_default_rocrate\` as the first metadata operation after reading this
52788
+ workflow doc. Do not merely offer the tool or ask whether to initialize; the
52789
+ user's request authorizes this initialization. Then continue with
52790
+ \`get_rocrate_context\` and profile discovery before adding curated metadata. For
52791
+ read-only requests, do not initialize a missing crate. Do not overwrite an
52792
+ existing metadata file unless the user explicitly asks and the tool call uses
52768
52793
  \`overwrite=true\`.
52769
52794
 
52795
+ \`create_default_rocrate\` excludes \`.DS_Store\` files at every directory depth and
52796
+ adds the \`**/.DS_Store\` ignore rule to \`.rockit/ignored.txt\` by default. When
52797
+ adding files to an existing crate, omit \`.DS_Store\` entities by default and
52798
+ preserve or add its ignore rule in \`.rockit/ignored.txt\`.
52799
+
52770
52800
  ## Managed Workflow
52771
52801
 
52772
52802
  Before each step, output a brief summary after reading the referenced workflow
@@ -52911,7 +52941,11 @@ These rules are mandatory for RO-Crate metadata quality.
52911
52941
  Always follow this sequence when curating RO-Crate metadata:
52912
52942
 
52913
52943
  0. Use MCP \`rocrate\` tools for metadata edits and validation. Do not edit JSON directly.
52914
- 1. Call \`get_rocrate_context\` before any edit.
52944
+ 1. If the user requested local crate creation or adding files from a directory
52945
+ and \`ro-crate-metadata.json\` is absent, call \`create_default_rocrate\` first.
52946
+ This initializes the requested crate; do not stop to ask whether to do it.
52947
+ Then call \`get_rocrate_context\`. For an existing crate, call
52948
+ \`get_rocrate_context\` before any edit.
52915
52949
  In local mode this must be treated as a profile-resolution step as well as a context read.
52916
52950
  If the crate already contains \`conformsTo\` URLs, do not proceed until the corresponding
52917
52951
  profiles have been downloaded into the local profile store or the resolution failure
@@ -52934,7 +52968,9 @@ Always follow this sequence when curating RO-Crate metadata:
52934
52968
  locally,
52935
52969
  - do not collapse the list to only the profile you recommend,
52936
52970
  - if one profile seems best, mark it as recommended while still listing the other available profiles,
52937
- - offer a numbered menu in this order: all listed local profiles and remote templates first, then "provide another metadata profile URL", then "continue without a profile",
52971
+ - show the choices in the visible chat message as a clearly formatted Markdown menu, not only in tool output or collapsed details. Use a numbered list with one selectable profile/template per item; do not combine choices into a comma-separated paragraph.
52972
+ - group local profiles and remote CEDAR templates under separate short headings. Include each local profile's name, version, and \`conformsTo\` URL. For each remote leaf template, show its provider/folder path and template name; keep each choice on its own numbered line. Mark a recommendation inline without hiding other choices.
52973
+ - offer a numbered menu in this order: all listed local profiles and remote templates first, then "provide another metadata profile URL", then "continue without a profile". End with a direct prompt such as "Reply with the number of your choice." Keep the numbering continuous across groups.
52938
52974
  - stop and wait for the user's choice before planning fields, searching the web, or writing metadata,
52939
52975
  - for an already-downloaded local profile, call \`update_profile_conforms_to\`
52940
52976
  with its \`conformsTo\` URL after the user chooses it,
@@ -69242,8 +69278,9 @@ async function startServerWithTransports(options) {
69242
69278
  const mcpServer = new McpServer(
69243
69279
  {
69244
69280
  name: "rocrate-mcp-server",
69281
+ title: "RO-Crate MCP / VibeARP",
69245
69282
  version: getBuildInfo().version,
69246
- description: "RO-Crate metadata tools. The canonical way to open a local RO-Crate dataset in AROMA is open_aroma_for_local_file."
69283
+ description: "RO-Crate metadata tools, also known as RO-Crate MCP or VibeARP. These names refer to this same server. The canonical way to open a local RO-Crate dataset in AROMA is open_aroma_for_local_file."
69247
69284
  },
69248
69285
  {
69249
69286
  capabilities: {
@@ -69983,15 +70020,17 @@ function getDashboardUrl() {
69983
70020
  }
69984
70021
  function getMcpServerInstructions() {
69985
70022
  return `RO-CRATE TOOL ROUTING
70023
+ This MCP server is known by the call names "RO-Crate MCP" and "VibeARP". When a user mentions either name, use this configured RO-Crate MCP server's tools, regardless of the server label shown by the harness (commonly "rocrate" or "rocrate-mcp-server"). Do not search for or select a different MCP server based on these names.
69986
70024
  The canonical way to open a local RO-Crate dataset in AROMA is open_aroma_for_local_file.
69987
70025
  For a direct request to open, view, show, inspect, or launch a dataset in AROMA\u2014including the exact request "open dataset in AROMA"\u2014call open_aroma_for_local_file immediately as the first tool. Treat "dataset" as the RO-Crate in the current working directory and pass "ro-crate-metadata.json"; otherwise pass the dataset's ro-crate-metadata.json path.
69988
70026
  Before RO-Crate editing/advice, call read_agent_workflow_doc with name "rocrate_workflow.md" and follow it.
69989
70027
  Read the referenced step doc before each workflow step.
69990
70028
  Primary artifact is ro-crate-metadata.json.
69991
- If no ro-crate-metadata.json exists in a local directory, offer create_default_rocrate before other metadata work; never overwrite existing metadata unless explicitly requested with overwrite=true.
70029
+ For a user-requested local RO-Crate creation or addition of files from a directory, if the target has no ro-crate-metadata.json, call create_default_rocrate as the first metadata operation after reading the workflow doc. Do not merely offer the tool or ask whether to initialize; the user's request authorizes this initialization. Then continue with get_rocrate_context and profile discovery before adding curated metadata. For read-only requests, do not initialize a missing crate. Never overwrite existing metadata unless the user explicitly requests it and the tool call uses overwrite=true.
70030
+ When adding files from a directory, omit .DS_Store entities by default. The default initialization excludes .DS_Store at every depth and writes the recursive .DS_Store ignore rule to .rockit/ignored.txt; preserve or add that ignore rule when maintaining the ignore file.
69992
70031
  Prefer RO-Crate tools over ad-hoc edits.
69993
70032
  The RO-Crate MCP dashboard is available at ${getDashboardUrl()}; open it when the user asks to inspect MCP activity or dashboard telemetry.
69994
- First edit step is get_rocrate_context to discover active profile constraints; do not start with web search.
70033
+ After initialization when needed, call get_rocrate_context to discover active profile constraints before curated metadata edits; do not start with web search.
69995
70034
  Use update_profile_conforms_to to change profile URLs on conformsTo; apply_changes must not edit conformsTo.
69996
70035
  apply_changes writes by default; set dryRun=true to preview without persisting.
69997
70036
  Treat profile scope as entity-local (only entities explicitly declaring that profile URL in conformsTo).