@jagilber-org/index-server 1.28.0 → 1.28.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/CHANGELOG.md +18 -0
- package/README.md +8 -0
- package/dist/dashboard/client/admin.html +27 -27
- package/dist/server/index-server.js +1 -1
- package/package.json +1 -1
- package/scripts/build/generate-certs.mjs +1 -1
- package/scripts/build/setup-wizard.mjs +21 -8
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.28.2] - 2026-05-06
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Clean install setup coverage and release workflow safety fixes.
|
|
14
|
+
|
|
15
|
+
## [1.28.1] - 2026-05-05
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Setup wizard package entrypoint**: fixed `npx -y @jagilber-org/index-server@latest --setup` by pointing the packed CLI launcher at `scripts/build/setup-wizard.mjs`.
|
|
20
|
+
- **Release validation**: ensured PR and release unit-test paths emit `test-results/junit.xml`, restored public governance utilities in publish branches, and made duplicate MCP Registry publishes idempotent.
|
|
21
|
+
- **Public CI gates**: stabilized merge-only log hygiene and GGShield quota handling so public `main` remains green after release PR merges.
|
|
22
|
+
|
|
9
23
|
### Added
|
|
10
24
|
|
|
11
25
|
- **Release workflow**: added `scripts/Invoke-ReleaseWorkflow.ps1` as the canonical release/publish front door. It loads `.env`, resolves tag/remote/clean-room defaults, runs release preflight checks, optionally pushes and verifies the internal branch/tags, waits for internal GitHub Actions checks, prepares the clean-room mirror copy, and either prints or explicitly invokes the human-only public mirror delivery path.
|
|
@@ -17,6 +31,10 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
|
|
|
17
31
|
- **Tool classification docs**: clarified that registry `stable` vs `mutation` is a visibility/gating contract, so `feedback_submit` remains stable/core while still persisting feedback and audit entries.
|
|
18
32
|
- **Instruction content type migration**: bumped instruction schema version to v5 and added a compatibility path mapping legacy `contentType: "chat-session"` records and writes to `workflow`, preserving workflow/runbook semantics instead of falling back to `instruction`.
|
|
19
33
|
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- **Public release handoff**: `Publish-ToMirror.ps1 -CreatePR -WaitForMerge` now resumes from an already-merged publish PR when a previous wait timed out, treats an existing tag at the expected merge commit as success, and prints Release workflow watch commands instead of instructing operators to run a competing `gh release create`.
|
|
37
|
+
|
|
20
38
|
## [1.28.0] - 2026-05-04
|
|
21
39
|
|
|
22
40
|
### Added
|
package/README.md
CHANGED
|
@@ -19,6 +19,14 @@ Index Server is a central knowledge base that AI agents connect to via the [Mode
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
+
## Prerequisite: Node.js
|
|
23
|
+
|
|
24
|
+
Index Server requires **Node.js 22 or newer** before using the `npx` or source install options. Download Node.js from [nodejs.org](https://nodejs.org/) or install it with Windows Package Manager:
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
winget install nodejs
|
|
28
|
+
```
|
|
29
|
+
|
|
22
30
|
## Quick Start Options
|
|
23
31
|
|
|
24
32
|
### Option A: MCP-native via `npx` (recommended)
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
|
-
<meta name="dashboard-build-version" content="1.28.
|
|
4
|
+
<meta name="dashboard-build-version" content="1.28.2-0009101e">
|
|
5
5
|
<meta charset="UTF-8">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
7
|
<title>Index Server Admin</title>
|
|
8
|
-
<link rel="stylesheet" href="css/admin.css?v=1.28.
|
|
9
|
-
<script defer src="js/admin.utils.js?v=1.28.
|
|
10
|
-
<script defer src="js/admin.auth.js?v=1.28.
|
|
11
|
-
<script defer src="js/admin.overview.js?v=1.28.
|
|
12
|
-
<script defer src="js/admin.sessions.js?v=1.28.
|
|
13
|
-
<script defer src="js/admin.monitor.js?v=1.28.
|
|
14
|
-
<script defer src="js/admin.events.js?v=1.28.
|
|
15
|
-
<script defer src="js/admin.graph.js?v=1.28.
|
|
8
|
+
<link rel="stylesheet" href="css/admin.css?v=1.28.2-0009101e">
|
|
9
|
+
<script defer src="js/admin.utils.js?v=1.28.2-0009101e"></script>
|
|
10
|
+
<script defer src="js/admin.auth.js?v=1.28.2-0009101e"></script>
|
|
11
|
+
<script defer src="js/admin.overview.js?v=1.28.2-0009101e"></script>
|
|
12
|
+
<script defer src="js/admin.sessions.js?v=1.28.2-0009101e"></script>
|
|
13
|
+
<script defer src="js/admin.monitor.js?v=1.28.2-0009101e"></script>
|
|
14
|
+
<script defer src="js/admin.events.js?v=1.28.2-0009101e"></script>
|
|
15
|
+
<script defer src="js/admin.graph.js?v=1.28.2-0009101e"></script>
|
|
16
16
|
<script defer src="js/marked.umd.js"></script>
|
|
17
|
-
<script defer src="js/admin.instructions.js?v=1.28.
|
|
18
|
-
<script defer src="js/admin.logs.js?v=1.28.
|
|
19
|
-
<script defer src="js/admin.maintenance.js?v=1.28.
|
|
20
|
-
<script defer src="js/admin.config.js?v=1.28.
|
|
21
|
-
<script defer src="js/admin.performance.js?v=1.28.
|
|
22
|
-
<script defer src="js/admin.instances.js?v=1.28.
|
|
23
|
-
<script defer src="js/admin.embeddings.js?v=1.28.
|
|
24
|
-
<script defer src="js/admin.messaging.js?v=1.28.
|
|
25
|
-
<script defer src="js/admin.sqlite.js?v=1.28.
|
|
26
|
-
<script defer src="js/admin.boot.js?v=1.28.
|
|
27
|
-
<script defer src="js/admin.feedback.js?v=1.28.
|
|
17
|
+
<script defer src="js/admin.instructions.js?v=1.28.2-0009101e"></script>
|
|
18
|
+
<script defer src="js/admin.logs.js?v=1.28.2-0009101e"></script>
|
|
19
|
+
<script defer src="js/admin.maintenance.js?v=1.28.2-0009101e"></script>
|
|
20
|
+
<script defer src="js/admin.config.js?v=1.28.2-0009101e"></script>
|
|
21
|
+
<script defer src="js/admin.performance.js?v=1.28.2-0009101e"></script>
|
|
22
|
+
<script defer src="js/admin.instances.js?v=1.28.2-0009101e"></script>
|
|
23
|
+
<script defer src="js/admin.embeddings.js?v=1.28.2-0009101e"></script>
|
|
24
|
+
<script defer src="js/admin.messaging.js?v=1.28.2-0009101e"></script>
|
|
25
|
+
<script defer src="js/admin.sqlite.js?v=1.28.2-0009101e"></script>
|
|
26
|
+
<script defer src="js/admin.boot.js?v=1.28.2-0009101e"></script>
|
|
27
|
+
<script defer src="js/admin.feedback.js?v=1.28.2-0009101e"></script>
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
|
30
30
|
<div class="admin-container admin-root">
|
|
@@ -909,10 +909,10 @@
|
|
|
909
909
|
}
|
|
910
910
|
}
|
|
911
911
|
|
|
912
|
-
// Graph logic was extracted to js/admin.graph.js?v=1.28.
|
|
912
|
+
// Graph logic was extracted to js/admin.graph.js?v=1.28.2-0009101e
|
|
913
913
|
// Functions available globally: reloadGraphMermaid, initGraphScopeDefaults, copyMermaidSource, toggleGraphEdit, applyGraphEdit, cancelGraphEdit, refreshDrillCategories, loadDrillInstructions, clearSelections
|
|
914
914
|
|
|
915
|
-
<!-- overview functions moved to js/admin.overview.js?v=1.28.
|
|
915
|
+
<!-- overview functions moved to js/admin.overview.js?v=1.28.2-0009101e -->
|
|
916
916
|
|
|
917
917
|
// Lightweight overview-level maintenance display (optional)
|
|
918
918
|
// Intentionally minimal to avoid blocking overview rendering.
|
|
@@ -1097,7 +1097,7 @@
|
|
|
1097
1097
|
}
|
|
1098
1098
|
|
|
1099
1099
|
// --- Backup / Restore ---
|
|
1100
|
-
// Extracted to js/admin.maintenance.js?v=1.28.
|
|
1100
|
+
// Extracted to js/admin.maintenance.js?v=1.28.2-0009101e
|
|
1101
1101
|
|
|
1102
1102
|
async function performBackup() {
|
|
1103
1103
|
try {
|
|
@@ -1163,7 +1163,7 @@
|
|
|
1163
1163
|
}
|
|
1164
1164
|
|
|
1165
1165
|
async function loadConfiguration() {
|
|
1166
|
-
// Primary implementation in js/admin.config.js?v=1.28.
|
|
1166
|
+
// Primary implementation in js/admin.config.js?v=1.28.2-0009101e (loaded via defer).
|
|
1167
1167
|
// This inline fallback only fires if the external script failed to load.
|
|
1168
1168
|
if (window.__configExternalLoaded) return;
|
|
1169
1169
|
try {
|
|
@@ -1223,10 +1223,10 @@
|
|
|
1223
1223
|
return false;
|
|
1224
1224
|
}
|
|
1225
1225
|
|
|
1226
|
-
// Monitoring functions moved to js/admin.monitor.js?v=1.28.
|
|
1226
|
+
// Monitoring functions moved to js/admin.monitor.js?v=1.28.2-0009101e
|
|
1227
1227
|
|
|
1228
1228
|
// ===== Log Viewer =====
|
|
1229
|
-
// Extracted to js/admin.logs.js?v=1.28.
|
|
1229
|
+
// Extracted to js/admin.logs.js?v=1.28.2-0009101e
|
|
1230
1230
|
|
|
1231
1231
|
// ===== Instruction Management =====
|
|
1232
1232
|
let instructionEditing = null;
|
|
@@ -1723,7 +1723,7 @@
|
|
|
1723
1723
|
setInterval(fetchResourceTrends, 10000);
|
|
1724
1724
|
})();
|
|
1725
1725
|
|
|
1726
|
-
// Instruction management logic extracted to js/admin.instructions.js?v=1.28.
|
|
1726
|
+
// Instruction management logic extracted to js/admin.instructions.js?v=1.28.2-0009101e
|
|
1727
1727
|
// Functions exposed globally: loadInstructions, renderInstructionList, editInstruction, saveInstruction, deleteInstruction, etc.
|
|
1728
1728
|
|
|
1729
1729
|
function startAutoRefresh() {
|
|
@@ -365,7 +365,7 @@ function parseArgs(argv) {
|
|
|
365
365
|
return config;
|
|
366
366
|
}
|
|
367
367
|
function launchSetupWizard(argv) {
|
|
368
|
-
const wizardPath = path_1.default.join(__dirname, '..', '..', 'scripts', 'setup-wizard.mjs');
|
|
368
|
+
const wizardPath = path_1.default.join(__dirname, '..', '..', 'scripts', 'build', 'setup-wizard.mjs');
|
|
369
369
|
// Forward all args after --setup/--configure to the wizard
|
|
370
370
|
const setupIdx = argv.findIndex(a => a === '--setup' || a === '--configure');
|
|
371
371
|
const forwardArgs = setupIdx >= 0 ? argv.slice(setupIdx + 1) : [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jagilber-org/index-server",
|
|
3
|
-
"version": "1.28.
|
|
3
|
+
"version": "1.28.2",
|
|
4
4
|
"mcpName": "io.github.jagilber-org/index-server",
|
|
5
5
|
"description": "MCP instruction indexing server with search, CRUD, validation, and cross-repo knowledge promotion.",
|
|
6
6
|
"publishConfig": {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* For production, replace with certificates from a real CA.
|
|
7
7
|
*
|
|
8
8
|
* Usage:
|
|
9
|
-
* node scripts/generate-certs.mjs [--hostname <name>] [--days <n>] [--output <dir>]
|
|
9
|
+
* node scripts/build/generate-certs.mjs [--hostname <name>] [--days <n>] [--output <dir>]
|
|
10
10
|
*/
|
|
11
11
|
import { execFileSync } from 'child_process';
|
|
12
12
|
import fs from 'fs';
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* Usage:
|
|
15
15
|
* npx @jagilber-org/index-server --setup
|
|
16
16
|
* npm run setup
|
|
17
|
-
* node scripts/setup-wizard.mjs
|
|
18
|
-
* node scripts/setup-wizard.mjs --non-interactive --profile enhanced --root C:/mcp/index-server
|
|
17
|
+
* node scripts/build/setup-wizard.mjs
|
|
18
|
+
* node scripts/build/setup-wizard.mjs --non-interactive --profile enhanced --root C:/mcp/index-server
|
|
19
19
|
*/
|
|
20
20
|
import fs from 'fs';
|
|
21
21
|
import path from 'path';
|
|
@@ -27,6 +27,18 @@ import { select, input, confirm, checkbox } from '@inquirer/prompts';
|
|
|
27
27
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
28
28
|
const ROOT = path.resolve(__dirname, '..', '..');
|
|
29
29
|
const IS_WINDOWS = process.platform === 'win32';
|
|
30
|
+
function parsePositiveTimeout(value, fallback) {
|
|
31
|
+
const parsed = Number(value);
|
|
32
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
33
|
+
}
|
|
34
|
+
const DEPLOY_PACK_TIMEOUT_MS = parsePositiveTimeout(
|
|
35
|
+
process.env.INDEX_SERVER_SETUP_PACK_TIMEOUT_MS,
|
|
36
|
+
30_000
|
|
37
|
+
);
|
|
38
|
+
const DEPLOY_INSTALL_TIMEOUT_MS = parsePositiveTimeout(
|
|
39
|
+
process.env.INDEX_SERVER_SETUP_INSTALL_TIMEOUT_MS,
|
|
40
|
+
IS_WINDOWS ? 420_000 : 120_000
|
|
41
|
+
);
|
|
30
42
|
|
|
31
43
|
// --------------------------------------------------------------------------
|
|
32
44
|
// Launch spec resolver — determines how to invoke index-server at runtime.
|
|
@@ -781,7 +793,7 @@ async function deployRuntime(config) {
|
|
|
781
793
|
// and produces a proper self-contained node_modules tree.
|
|
782
794
|
const packOutput = runNpm(
|
|
783
795
|
['pack', '--pack-destination', targetRoot],
|
|
784
|
-
{ cwd: ROOT, stdio: ['pipe', 'pipe', 'inherit'], timeout:
|
|
796
|
+
{ cwd: ROOT, stdio: ['pipe', 'pipe', 'inherit'], timeout: DEPLOY_PACK_TIMEOUT_MS }
|
|
785
797
|
).toString().trim();
|
|
786
798
|
const tarballName = packOutput.split('\n').pop();
|
|
787
799
|
|
|
@@ -789,9 +801,10 @@ async function deployRuntime(config) {
|
|
|
789
801
|
|
|
790
802
|
try {
|
|
791
803
|
// Install from the local tarball
|
|
804
|
+
console.log(` npm install timeout: ${DEPLOY_INSTALL_TIMEOUT_MS}ms`);
|
|
792
805
|
runNpm(
|
|
793
806
|
['install', tarballPath, '--omit=dev', '--no-fund', '--no-audit'],
|
|
794
|
-
{ cwd: targetRoot, stdio: 'inherit', timeout:
|
|
807
|
+
{ cwd: targetRoot, stdio: 'inherit', timeout: DEPLOY_INSTALL_TIMEOUT_MS }
|
|
795
808
|
);
|
|
796
809
|
} finally {
|
|
797
810
|
// Clean up tarball
|
|
@@ -860,10 +873,10 @@ async function main() {
|
|
|
860
873
|
Interactive mode:
|
|
861
874
|
npx @jagilber-org/index-server --setup
|
|
862
875
|
npm run setup
|
|
863
|
-
node scripts/setup-wizard.mjs
|
|
876
|
+
node scripts/build/setup-wizard.mjs
|
|
864
877
|
|
|
865
878
|
Non-interactive mode:
|
|
866
|
-
node scripts/setup-wizard.mjs --non-interactive [options]
|
|
879
|
+
node scripts/build/setup-wizard.mjs --non-interactive [options]
|
|
867
880
|
--profile <name> default | enhanced | experimental
|
|
868
881
|
--root <dir> Base directory for all data paths
|
|
869
882
|
--port <n> Dashboard port (default: 8787)
|
|
@@ -959,12 +972,12 @@ Non-interactive mode:
|
|
|
959
972
|
const certDir = path.join(config.root, 'certs');
|
|
960
973
|
execFileSync(
|
|
961
974
|
process.execPath,
|
|
962
|
-
[path.join(ROOT, 'scripts', 'generate-certs.mjs'), '--hostname', 'localhost', '--output', certDir],
|
|
975
|
+
[path.join(ROOT, 'scripts', 'build', 'generate-certs.mjs'), '--hostname', 'localhost', '--output', certDir],
|
|
963
976
|
{ stdio: 'inherit' }
|
|
964
977
|
);
|
|
965
978
|
} catch {
|
|
966
979
|
console.error('❌ Certificate generation failed. Run manually:');
|
|
967
|
-
console.error(` node scripts/generate-certs.mjs --output "${path.join(config.root, 'certs')}"`);
|
|
980
|
+
console.error(` node scripts/build/generate-certs.mjs --output "${path.join(config.root, 'certs')}"`);
|
|
968
981
|
}
|
|
969
982
|
}
|
|
970
983
|
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/jagilber-org/index-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.28.
|
|
9
|
+
"version": "1.28.2",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@jagilber-org/index-server",
|
|
14
|
-
"version": "1.28.
|
|
14
|
+
"version": "1.28.2",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
}
|