memstack-skill-loader 4.1.0__tar.gz → 4.1.1__tar.gz

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 (28) hide show
  1. {memstack_skill_loader-4.1.0/src/memstack_skill_loader.egg-info → memstack_skill_loader-4.1.1}/PKG-INFO +1 -1
  2. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/pyproject.toml +1 -1
  3. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/__init__.py +1 -1
  4. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/dashboard.html +50 -10
  5. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1/src/memstack_skill_loader.egg-info}/PKG-INFO +1 -1
  6. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/MANIFEST.in +0 -0
  7. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/README.md +0 -0
  8. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/setup.cfg +0 -0
  9. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/__main__.py +0 -0
  10. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/agent_runner.py +0 -0
  11. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/categories.py +0 -0
  12. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/compression.py +0 -0
  13. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/config.py +0 -0
  14. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/dashboard.py +0 -0
  15. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/indexer.py +0 -0
  16. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/license.py +0 -0
  17. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/memory_db.py +0 -0
  18. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/search.py +0 -0
  19. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/server.py +0 -0
  20. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/skill_config.py +0 -0
  21. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/stats.py +0 -0
  22. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/tfidf_search.py +0 -0
  23. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader/version_check.py +0 -0
  24. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader.egg-info/SOURCES.txt +0 -0
  25. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader.egg-info/dependency_links.txt +0 -0
  26. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader.egg-info/entry_points.txt +0 -0
  27. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader.egg-info/requires.txt +0 -0
  28. {memstack_skill_loader-4.1.0 → memstack_skill_loader-4.1.1}/src/memstack_skill_loader.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memstack-skill-loader
3
- Version: 4.1.0
3
+ Version: 4.1.1
4
4
  Summary: MCP server that vector-indexes MemStack Pro skills for on-demand loading
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: mcp>=1.0.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "memstack-skill-loader"
7
- version = "4.1.0"
7
+ version = "4.1.1"
8
8
  description = "MCP server that vector-indexes MemStack Pro skills for on-demand loading"
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
@@ -1,3 +1,3 @@
1
1
  """MemStack Skill Loader — MCP server for semantic skill search."""
2
2
 
3
- __version__ = "4.1.0"
3
+ __version__ = "4.1.1"
@@ -1163,6 +1163,9 @@
1163
1163
  min-height: 2.4em;
1164
1164
  overflow-y: hidden;
1165
1165
  box-sizing: border-box;
1166
+ word-wrap: break-word;
1167
+ white-space: pre-wrap;
1168
+ overflow-wrap: break-word;
1166
1169
  }
1167
1170
  .diary-summary-card {
1168
1171
  display: none;
@@ -1660,6 +1663,7 @@
1660
1663
  <div style="max-width:640px;margin:0 auto;text-align:center;">
1661
1664
  <div style="font-size:2.5rem;margin-bottom:0.5rem;">&#9989;</div>
1662
1665
  <h2 style="color:#e6edf3;font-size:1.1rem;margin-bottom:0.8rem;">Task Completed</h2>
1666
+ <span id="agent-completed-session-badge" style="display:inline-block;font-size:0.75rem;color:#8b949e;background:#21262d;padding:2px 8px;border-radius:4px;margin-bottom:0.8rem;"></span>
1663
1667
  <div id="agent-result-summary" style="background:#161b22;border:1px solid #30363d;border-radius:8px;padding:1rem;text-align:left;font-size:0.85rem;color:#c9d1d9;margin-bottom:1.2rem;white-space:pre-wrap;"></div>
1664
1668
  <div id="agent-token-summary" class="token-summary-card"></div>
1665
1669
  <div style="display:flex;gap:0.5rem;justify-content:center;margin-bottom:1.5rem;">
@@ -1667,7 +1671,7 @@
1667
1671
  <button onclick="saveDiaryCompleted()" class="btn-diary" id="completed-diary-btn">Save Diary</button>
1668
1672
  </div>
1669
1673
  <div id="diary-summary-card" class="diary-summary-card"></div>
1670
- <div style="text-align:left;background:#161b22;border:1px solid #30363d;border-radius:8px;padding:1rem;margin-bottom:1.2rem;">
1674
+ <div id="agent-commit-section" style="text-align:left;background:#161b22;border:1px solid #30363d;border-radius:8px;padding:1rem;margin-bottom:1.2rem;">
1671
1675
  <label style="display:block;font-size:0.82rem;color:#8b949e;margin-bottom:0.4rem;font-weight:600;">Commit Message</label>
1672
1676
  <textarea id="agent-commit-msg" rows="2" class="commit-msg-input"></textarea>
1673
1677
  <div style="display:flex;gap:0.5rem;">
@@ -1677,6 +1681,7 @@
1677
1681
  </div>
1678
1682
  <pre id="agent-git-output" style="display:none;margin-top:0.8rem;padding:0.6rem;background:#0d1117;border:1px solid #30363d;border-radius:6px;color:#8b949e;font-size:0.78rem;white-space:pre-wrap;max-height:200px;overflow-y:auto;"></pre>
1679
1683
  </div>
1684
+ <div id="agent-no-changes-note" style="display:none;text-align:center;font-size:0.82rem;color:#8b949e;margin-bottom:1.2rem;">No files changed. Nothing to commit.</div>
1680
1685
  </div>
1681
1686
  <h3 style="color:#e6edf3;font-size:0.95rem;margin-bottom:0.8rem;">Message Log</h3>
1682
1687
  <div id="agent-completed-messages" style="max-height:400px;overflow-y:auto;border:1px solid #30363d;border-radius:8px;background:#0d1117;padding:0.5rem;"></div>
@@ -2806,6 +2811,12 @@ function _renderDiarySummary(summary) {
2806
2811
  html += '<span class="ds-label">Insights saved:</span> <span class="ds-value">' + insightsSaved + '</span>';
2807
2812
  card.innerHTML = html;
2808
2813
  card.style.display = 'block';
2814
+ if (filesChanged === 0) {
2815
+ const cs = document.getElementById('agent-commit-section');
2816
+ const nc = document.getElementById('agent-no-changes-note');
2817
+ if (cs) cs.style.display = 'none';
2818
+ if (nc) nc.style.display = '';
2819
+ }
2809
2820
  }
2810
2821
 
2811
2822
  async function saveDiary() {
@@ -3015,6 +3026,8 @@ async function resetAgentUI() {
3015
3026
  document.getElementById('agent-completed').style.display = 'none';
3016
3027
  document.getElementById('agent-commit-msg').value = '';
3017
3028
  document.getElementById('agent-git-output').style.display = 'none';
3029
+ document.getElementById('agent-commit-section').style.display = '';
3030
+ document.getElementById('agent-no-changes-note').style.display = 'none';
3018
3031
  // Clear task and context inputs
3019
3032
  document.getElementById('agent-task-input').value = '';
3020
3033
  document.getElementById('agent-context-input').value = '';
@@ -3767,6 +3780,7 @@ function renderAgentUI(data) {
3767
3780
  document.querySelector('#agent-completed div div:first-child').innerHTML = icon;
3768
3781
  const h2 = document.querySelector('#agent-completed h2');
3769
3782
  if (h2) h2.textContent = title;
3783
+ document.getElementById('agent-completed-session-badge').textContent = 'Session: ' + (currentAgentSessionId || '—');
3770
3784
  document.getElementById('agent-result-summary').textContent = status === 'stopped' ? (data.result || 'Task stopped by user') : (data.result || `Session ${status}`);
3771
3785
  const COMPACTION_LIMIT = 200000;
3772
3786
  const COMPACTION_WARN = 155000;
@@ -3798,19 +3812,34 @@ function renderAgentUI(data) {
3798
3812
  document.getElementById('agent-token-summary').innerHTML = '<h4>Token Usage</h4>' + tokenRows;
3799
3813
  const commitInput = document.getElementById('agent-commit-msg');
3800
3814
  if (commitInput && !commitInput.value) {
3801
- const taskDesc = data.task || '';
3815
+ let taskDesc = (data.task || '').trim();
3816
+ taskDesc = taskDesc.replace(/^Working directory:.*$/gm, '').replace(/^Branch:.*$/gm, '').replace(/^Task:\s*/gm, '').trim();
3802
3817
  const prefix = /fix|bug|error/i.test(taskDesc) ? 'fix' : 'feat';
3803
- let sourceText = (data.result || '').trim();
3804
- sourceText = sourceText.replace(/approved after \d+ iteration\(s\):?\s*/gi, '').trim();
3805
- sourceText = sourceText.replace(/approved:\s*/gi, '').trim();
3806
- if (!sourceText) sourceText = taskDesc;
3807
- let summary = sourceText.split(/\.\s+|\.$|\n/)[0].trim() || 'dashboard updates';
3808
- if (summary.length > 72) {
3809
- const cut = summary.substring(0, 72);
3818
+ let summary = '';
3819
+ const firstLine = taskDesc.split(/\n/)[0].trim();
3820
+ const looksLikePath = /^(In\s|src\/|\.\/|[A-Za-z]:\\|\/|.*[\/\\]\S+\.\w+)/.test(firstLine);
3821
+ if (firstLine && !looksLikePath) {
3822
+ summary = firstLine.split(/\.\s+|\.$|,\s+|\s+and\s+/i)[0].trim();
3823
+ }
3824
+ if (!summary) {
3825
+ let rev = (data.result || '').trim();
3826
+ rev = rev.replace(/^approved\s+after\s+\d+\s+iteration\(s\):?\s*/i, '');
3827
+ rev = rev.replace(/^approved:?\s*/i, '');
3828
+ rev = rev.replace(/^the\s+builder\s+/i, '');
3829
+ rev = rev.replace(/\bcorrectly\s+/gi, '');
3830
+ rev = rev.split(/\.\s+|\.$|,\s+|\s+and\s+/i)[0].trim();
3831
+ rev = rev.replace(/^(has|have|had)\s+/i, '');
3832
+ summary = rev || 'dashboard updates';
3833
+ }
3834
+ summary = summary.charAt(0).toUpperCase() + summary.slice(1);
3835
+ const tag = 'agent: ' + prefix + ': ';
3836
+ const maxLen = 72 - tag.length;
3837
+ if (summary.length > maxLen) {
3838
+ const cut = summary.substring(0, maxLen);
3810
3839
  const sp = cut.lastIndexOf(' ');
3811
3840
  summary = sp > 0 ? cut.substring(0, sp) : cut;
3812
3841
  }
3813
- commitInput.value = 'agent: ' + prefix + ': ' + summary;
3842
+ commitInput.value = tag + summary;
3814
3843
  autoResize(commitInput);
3815
3844
  }
3816
3845
  const commitBtn = document.getElementById('agent-commit-btn');
@@ -3838,6 +3867,17 @@ function renderAgentUI(data) {
3838
3867
  } else {
3839
3868
  gitEl.style.display = 'none';
3840
3869
  }
3870
+ const resultText = (data.result || '').toLowerCase();
3871
+ const noChanges = /no files were modified|no code changes|files changed:\s*0|nothing to commit/i.test(resultText);
3872
+ const commitSection = document.getElementById('agent-commit-section');
3873
+ const noChangesNote = document.getElementById('agent-no-changes-note');
3874
+ if (noChanges) {
3875
+ commitSection.style.display = 'none';
3876
+ noChangesNote.style.display = '';
3877
+ } else {
3878
+ commitSection.style.display = '';
3879
+ noChangesNote.style.display = 'none';
3880
+ }
3841
3881
  renderMessageLog(document.getElementById('agent-completed-messages'), messages);
3842
3882
  return;
3843
3883
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memstack-skill-loader
3
- Version: 4.1.0
3
+ Version: 4.1.1
4
4
  Summary: MCP server that vector-indexes MemStack Pro skills for on-demand loading
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: mcp>=1.0.0