@massa-ai/opencode-plugin 1.54.1 → 1.56.0

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.
Files changed (147) hide show
  1. package/agent-profiles/balanced/massa-ai-architecture-specialist.md +1 -1
  2. package/agent-profiles/balanced/massa-ai-audit-specialist.md +1 -1
  3. package/agent-profiles/balanced/massa-ai-builder.md +1 -1
  4. package/agent-profiles/balanced/massa-ai-context-curator.md +1 -1
  5. package/agent-profiles/balanced/massa-ai-designer.md +1 -1
  6. package/agent-profiles/balanced/massa-ai-documentation-agent.md +1 -1
  7. package/agent-profiles/balanced/massa-ai-furps-analyst.md +1 -1
  8. package/agent-profiles/balanced/massa-ai-investigator.md +1 -1
  9. package/agent-profiles/balanced/massa-ai-judge.md +1 -1
  10. package/agent-profiles/balanced/massa-ai-meta-judge.md +1 -1
  11. package/agent-profiles/balanced/massa-ai-mobile-specialist.md +1 -1
  12. package/agent-profiles/balanced/massa-ai-navigator.md +1 -1
  13. package/agent-profiles/balanced/massa-ai-plan-critic.md +1 -1
  14. package/agent-profiles/balanced/massa-ai-planner.md +1 -1
  15. package/agent-profiles/balanced/massa-ai-requirements-analyst.md +1 -1
  16. package/agent-profiles/balanced/massa-ai-reviewer.md +1 -1
  17. package/agent-profiles/balanced/massa-ai-test-engineer.md +1 -1
  18. package/agent-profiles/balanced/massa-ai-verification-agent.md +1 -1
  19. package/agent-profiles/cheap/massa-ai-architecture-specialist.md +1 -1
  20. package/agent-profiles/cheap/massa-ai-audit-specialist.md +1 -1
  21. package/agent-profiles/cheap/massa-ai-builder.md +1 -1
  22. package/agent-profiles/cheap/massa-ai-context-curator.md +1 -1
  23. package/agent-profiles/cheap/massa-ai-designer.md +1 -1
  24. package/agent-profiles/cheap/massa-ai-documentation-agent.md +1 -1
  25. package/agent-profiles/cheap/massa-ai-furps-analyst.md +1 -1
  26. package/agent-profiles/cheap/massa-ai-investigator.md +1 -1
  27. package/agent-profiles/cheap/massa-ai-judge.md +1 -1
  28. package/agent-profiles/cheap/massa-ai-meta-judge.md +1 -1
  29. package/agent-profiles/cheap/massa-ai-mobile-specialist.md +1 -1
  30. package/agent-profiles/cheap/massa-ai-navigator.md +1 -1
  31. package/agent-profiles/cheap/massa-ai-plan-critic.md +1 -1
  32. package/agent-profiles/cheap/massa-ai-planner.md +1 -1
  33. package/agent-profiles/cheap/massa-ai-requirements-analyst.md +1 -1
  34. package/agent-profiles/cheap/massa-ai-reviewer.md +1 -1
  35. package/agent-profiles/cheap/massa-ai-test-engineer.md +1 -1
  36. package/agent-profiles/cheap/massa-ai-verification-agent.md +1 -1
  37. package/agent-profiles/heavy/massa-ai-architecture-specialist.md +1 -1
  38. package/agent-profiles/heavy/massa-ai-audit-specialist.md +1 -1
  39. package/agent-profiles/heavy/massa-ai-builder.md +1 -1
  40. package/agent-profiles/heavy/massa-ai-context-curator.md +1 -1
  41. package/agent-profiles/heavy/massa-ai-designer.md +1 -1
  42. package/agent-profiles/heavy/massa-ai-documentation-agent.md +1 -1
  43. package/agent-profiles/heavy/massa-ai-furps-analyst.md +1 -1
  44. package/agent-profiles/heavy/massa-ai-investigator.md +1 -1
  45. package/agent-profiles/heavy/massa-ai-judge.md +1 -1
  46. package/agent-profiles/heavy/massa-ai-meta-judge.md +1 -1
  47. package/agent-profiles/heavy/massa-ai-mobile-specialist.md +1 -1
  48. package/agent-profiles/heavy/massa-ai-navigator.md +1 -1
  49. package/agent-profiles/heavy/massa-ai-plan-critic.md +1 -1
  50. package/agent-profiles/heavy/massa-ai-planner.md +1 -1
  51. package/agent-profiles/heavy/massa-ai-requirements-analyst.md +1 -1
  52. package/agent-profiles/heavy/massa-ai-reviewer.md +1 -1
  53. package/agent-profiles/heavy/massa-ai-test-engineer.md +1 -1
  54. package/agent-profiles/heavy/massa-ai-verification-agent.md +1 -1
  55. package/agent-profiles/home/massa-ai-architecture-specialist.md +1 -1
  56. package/agent-profiles/home/massa-ai-audit-specialist.md +1 -1
  57. package/agent-profiles/home/massa-ai-builder.md +1 -1
  58. package/agent-profiles/home/massa-ai-context-curator.md +1 -1
  59. package/agent-profiles/home/massa-ai-designer.md +1 -1
  60. package/agent-profiles/home/massa-ai-documentation-agent.md +1 -1
  61. package/agent-profiles/home/massa-ai-furps-analyst.md +1 -1
  62. package/agent-profiles/home/massa-ai-investigator.md +1 -1
  63. package/agent-profiles/home/massa-ai-judge.md +1 -1
  64. package/agent-profiles/home/massa-ai-meta-judge.md +1 -1
  65. package/agent-profiles/home/massa-ai-mobile-specialist.md +1 -1
  66. package/agent-profiles/home/massa-ai-navigator.md +1 -1
  67. package/agent-profiles/home/massa-ai-plan-critic.md +1 -1
  68. package/agent-profiles/home/massa-ai-planner.md +1 -1
  69. package/agent-profiles/home/massa-ai-requirements-analyst.md +1 -1
  70. package/agent-profiles/home/massa-ai-reviewer.md +1 -1
  71. package/agent-profiles/home/massa-ai-test-engineer.md +1 -1
  72. package/agent-profiles/home/massa-ai-verification-agent.md +1 -1
  73. package/agent-profiles/local_models/massa-ai-architecture-specialist.md +1 -1
  74. package/agent-profiles/local_models/massa-ai-audit-specialist.md +1 -1
  75. package/agent-profiles/local_models/massa-ai-builder.md +1 -1
  76. package/agent-profiles/local_models/massa-ai-context-curator.md +1 -1
  77. package/agent-profiles/local_models/massa-ai-designer.md +1 -1
  78. package/agent-profiles/local_models/massa-ai-documentation-agent.md +1 -1
  79. package/agent-profiles/local_models/massa-ai-furps-analyst.md +1 -1
  80. package/agent-profiles/local_models/massa-ai-investigator.md +1 -1
  81. package/agent-profiles/local_models/massa-ai-judge.md +1 -1
  82. package/agent-profiles/local_models/massa-ai-meta-judge.md +1 -1
  83. package/agent-profiles/local_models/massa-ai-mobile-specialist.md +1 -1
  84. package/agent-profiles/local_models/massa-ai-navigator.md +1 -1
  85. package/agent-profiles/local_models/massa-ai-plan-critic.md +1 -1
  86. package/agent-profiles/local_models/massa-ai-planner.md +1 -1
  87. package/agent-profiles/local_models/massa-ai-requirements-analyst.md +1 -1
  88. package/agent-profiles/local_models/massa-ai-reviewer.md +1 -1
  89. package/agent-profiles/local_models/massa-ai-test-engineer.md +1 -1
  90. package/agent-profiles/local_models/massa-ai-verification-agent.md +1 -1
  91. package/agent-profiles/open_models/massa-ai-architecture-specialist.md +1 -1
  92. package/agent-profiles/open_models/massa-ai-audit-specialist.md +1 -1
  93. package/agent-profiles/open_models/massa-ai-builder.md +1 -1
  94. package/agent-profiles/open_models/massa-ai-context-curator.md +1 -1
  95. package/agent-profiles/open_models/massa-ai-designer.md +1 -1
  96. package/agent-profiles/open_models/massa-ai-documentation-agent.md +1 -1
  97. package/agent-profiles/open_models/massa-ai-furps-analyst.md +1 -1
  98. package/agent-profiles/open_models/massa-ai-investigator.md +1 -1
  99. package/agent-profiles/open_models/massa-ai-judge.md +1 -1
  100. package/agent-profiles/open_models/massa-ai-meta-judge.md +1 -1
  101. package/agent-profiles/open_models/massa-ai-mobile-specialist.md +1 -1
  102. package/agent-profiles/open_models/massa-ai-navigator.md +1 -1
  103. package/agent-profiles/open_models/massa-ai-plan-critic.md +1 -1
  104. package/agent-profiles/open_models/massa-ai-planner.md +1 -1
  105. package/agent-profiles/open_models/massa-ai-requirements-analyst.md +1 -1
  106. package/agent-profiles/open_models/massa-ai-reviewer.md +1 -1
  107. package/agent-profiles/open_models/massa-ai-test-engineer.md +1 -1
  108. package/agent-profiles/open_models/massa-ai-verification-agent.md +1 -1
  109. package/agent-profiles/work/massa-ai-architecture-specialist.md +1 -1
  110. package/agent-profiles/work/massa-ai-audit-specialist.md +1 -1
  111. package/agent-profiles/work/massa-ai-builder.md +1 -1
  112. package/agent-profiles/work/massa-ai-context-curator.md +1 -1
  113. package/agent-profiles/work/massa-ai-designer.md +1 -1
  114. package/agent-profiles/work/massa-ai-documentation-agent.md +1 -1
  115. package/agent-profiles/work/massa-ai-furps-analyst.md +1 -1
  116. package/agent-profiles/work/massa-ai-investigator.md +1 -1
  117. package/agent-profiles/work/massa-ai-judge.md +1 -1
  118. package/agent-profiles/work/massa-ai-meta-judge.md +1 -1
  119. package/agent-profiles/work/massa-ai-mobile-specialist.md +1 -1
  120. package/agent-profiles/work/massa-ai-navigator.md +1 -1
  121. package/agent-profiles/work/massa-ai-plan-critic.md +1 -1
  122. package/agent-profiles/work/massa-ai-planner.md +1 -1
  123. package/agent-profiles/work/massa-ai-requirements-analyst.md +1 -1
  124. package/agent-profiles/work/massa-ai-reviewer.md +1 -1
  125. package/agent-profiles/work/massa-ai-test-engineer.md +1 -1
  126. package/agent-profiles/work/massa-ai-verification-agent.md +1 -1
  127. package/agents/massa-ai-architecture-specialist.md +1 -1
  128. package/agents/massa-ai-audit-specialist.md +1 -1
  129. package/agents/massa-ai-builder.md +1 -1
  130. package/agents/massa-ai-context-curator.md +1 -1
  131. package/agents/massa-ai-designer.md +1 -1
  132. package/agents/massa-ai-documentation-agent.md +1 -1
  133. package/agents/massa-ai-furps-analyst.md +1 -1
  134. package/agents/massa-ai-investigator.md +1 -1
  135. package/agents/massa-ai-judge.md +1 -1
  136. package/agents/massa-ai-meta-judge.md +1 -1
  137. package/agents/massa-ai-mobile-specialist.md +1 -1
  138. package/agents/massa-ai-navigator.md +1 -1
  139. package/agents/massa-ai-plan-critic.md +1 -1
  140. package/agents/massa-ai-planner.md +1 -1
  141. package/agents/massa-ai-requirements-analyst.md +1 -1
  142. package/agents/massa-ai-reviewer.md +1 -1
  143. package/agents/massa-ai-test-engineer.md +1 -1
  144. package/agents/massa-ai-verification-agent.md +1 -1
  145. package/dist/config-cli.js +734 -17
  146. package/dist/index.js +82 -3
  147. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -600,15 +600,18 @@ var init_massa_ai_config = __esm(() => {
600
600
  security: {
601
601
  corsOrigins: []
602
602
  },
603
- scheduler: DEFAULT_SCHEDULER_CONFIG
603
+ scheduler: DEFAULT_SCHEDULER_CONFIG,
604
+ bootstrap: { rules: {} }
604
605
  };
605
606
  });
606
607
 
607
608
  // ../../packages/shared/dist/config/config-loader.js
608
609
  var exports_config_loader = {};
609
610
  __export(exports_config_loader, {
611
+ writeRawConfig: () => writeRawConfig,
610
612
  writeFileAtomically: () => writeFileAtomically,
611
613
  saveConfig: () => saveConfig,
614
+ readRawConfigStrict: () => readRawConfigStrict,
612
615
  migrateDataDirOnce: () => migrateDataDirOnce,
613
616
  mergeSchedulerSection: () => mergeSchedulerSection,
614
617
  loadRawUserConfig: () => loadRawUserConfig,
@@ -619,12 +622,23 @@ __export(exports_config_loader, {
619
622
  getConfigForEnv: () => getConfigForEnv,
620
623
  getConfigDir: () => getConfigDir,
621
624
  configExists: () => configExists,
622
- __resetMigrationForTests: () => __resetMigrationForTests
625
+ __resetMigrationForTests: () => __resetMigrationForTests,
626
+ ConfigWriteConflictError: () => ConfigWriteConflictError,
627
+ ConfigParseError: () => ConfigParseError
623
628
  });
624
629
  import fs from "fs";
625
630
  import path3 from "path";
626
631
  import os2 from "os";
627
632
  import crypto from "crypto";
633
+ function readConfigFileOrEmpty() {
634
+ try {
635
+ return fs.readFileSync(CONFIG_FILE, "utf-8");
636
+ } catch (error) {
637
+ if (error?.code === "ENOENT")
638
+ return "";
639
+ throw error;
640
+ }
641
+ }
628
642
  function getConfigDir() {
629
643
  return CONFIG_DIR;
630
644
  }
@@ -691,6 +705,21 @@ function loadRawUserConfig() {
691
705
  return {};
692
706
  }
693
707
  }
708
+ function readRawConfigStrict() {
709
+ const raw = readConfigFileOrEmpty();
710
+ if (raw === "")
711
+ return {};
712
+ let parsed;
713
+ try {
714
+ parsed = JSON.parse(raw);
715
+ } catch (error) {
716
+ throw new ConfigParseError(CONFIG_FILE, error);
717
+ }
718
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
719
+ throw new ConfigParseError(CONFIG_FILE, new Error("parsed value is not a JSON object"));
720
+ }
721
+ return parsed;
722
+ }
694
723
  function loadConfigSafe() {
695
724
  try {
696
725
  return loadConfig();
@@ -745,6 +774,43 @@ function writeFileAtomically(targetPath, content) {
745
774
  function saveConfig(config) {
746
775
  writeFileAtomically(CONFIG_FILE, JSON.stringify(config, null, 2));
747
776
  }
777
+ function writeRawConfig(doc, opts) {
778
+ const onDiskAtStart = readConfigFileOrEmpty();
779
+ if (onDiskAtStart === opts.expectedBytes) {
780
+ writeFileAtomically(CONFIG_FILE, JSON.stringify(doc, null, 2));
781
+ return;
782
+ }
783
+ let original;
784
+ let current;
785
+ try {
786
+ original = opts.expectedBytes === "" ? {} : JSON.parse(opts.expectedBytes);
787
+ } catch (error) {
788
+ throw new ConfigParseError(`${CONFIG_FILE} (caller-supplied expectedBytes)`, error);
789
+ }
790
+ try {
791
+ current = onDiskAtStart === "" ? {} : JSON.parse(onDiskAtStart);
792
+ } catch (error) {
793
+ throw new ConfigParseError(CONFIG_FILE, error);
794
+ }
795
+ const reapplied = { ...current };
796
+ const touchedKeys = new Set([...Object.keys(original), ...Object.keys(doc)]);
797
+ for (const key of touchedKeys) {
798
+ const before = JSON.stringify(original[key]);
799
+ const after = JSON.stringify(doc[key]);
800
+ if (before === after)
801
+ continue;
802
+ if (Object.prototype.hasOwnProperty.call(doc, key)) {
803
+ reapplied[key] = doc[key];
804
+ } else {
805
+ delete reapplied[key];
806
+ }
807
+ }
808
+ const onDiskImmediatelyBeforeWrite = readConfigFileOrEmpty();
809
+ if (onDiskImmediatelyBeforeWrite !== onDiskAtStart) {
810
+ throw new ConfigWriteConflictError(CONFIG_FILE);
811
+ }
812
+ writeFileAtomically(CONFIG_FILE, JSON.stringify(reapplied, null, 2));
813
+ }
748
814
  function initConfig() {
749
815
  if (!fs.existsSync(CONFIG_FILE)) {
750
816
  saveConfig(defaultMassaAiConfig);
@@ -771,12 +837,25 @@ function getConfigForEnv() {
771
837
  env.ENABLE_METRICS = String(config.logging.enableMetrics);
772
838
  return env;
773
839
  }
774
- var CONFIG_DIR, CONFIG_FILE, migrationAttempted = false, tempFileCounter = 0;
840
+ var CONFIG_DIR, CONFIG_FILE, ConfigParseError, ConfigWriteConflictError, migrationAttempted = false, tempFileCounter = 0;
775
841
  var init_config_loader = __esm(() => {
776
842
  init_massa_ai_config();
777
843
  init_xdg();
778
844
  CONFIG_DIR = configDir("massa-ai");
779
845
  CONFIG_FILE = path3.join(CONFIG_DIR, "config.json");
846
+ ConfigParseError = class ConfigParseError extends Error {
847
+ constructor(filePath, cause) {
848
+ const reason = cause instanceof Error ? cause.message : String(cause);
849
+ super(`Failed to parse ${filePath}: ${reason}`);
850
+ this.name = "ConfigParseError";
851
+ }
852
+ };
853
+ ConfigWriteConflictError = class ConfigWriteConflictError extends Error {
854
+ constructor(filePath) {
855
+ super(`${filePath} changed on disk twice while writing \u2014 refusing to overwrite a ` + `concurrent update. Re-read the file and retry.`);
856
+ this.name = "ConfigWriteConflictError";
857
+ }
858
+ };
780
859
  });
781
860
 
782
861
  // ../../packages/shared/dist/env.js
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massa-ai/opencode-plugin",
3
- "version": "1.54.1",
3
+ "version": "1.56.0",
4
4
  "description": "massa-ai plugin for OpenCode - Semantic code search, memory, and context compression",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,8 +24,8 @@
24
24
  "dependencies": {
25
25
  "@opencode-ai/plugin": "^1.2.15",
26
26
  "@opencode-ai/sdk": "^1.2.15",
27
- "@massa-ai/core": "^1.54.1",
28
- "@massa-ai/shared": "^1.54.1"
27
+ "@massa-ai/core": "^1.56.0",
28
+ "@massa-ai/shared": "^1.56.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.10.5",