@decibelsystems/tools 2.1.4 → 3.0.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.
- package/CHANGELOG.md +160 -0
- package/README.md +1 -1
- package/dist/agentPresence.d.ts +80 -0
- package/dist/agentPresence.d.ts.map +1 -1
- package/dist/agentPresence.js +177 -0
- package/dist/agentPresence.js.map +1 -1
- package/dist/agentic/index.d.ts +18 -8
- package/dist/agentic/index.d.ts.map +1 -1
- package/dist/agentic/index.js +18 -144
- package/dist/agentic/index.js.map +1 -1
- package/dist/agentic/types.d.ts +106 -0
- package/dist/agentic/types.d.ts.map +1 -1
- package/dist/agentic/types.js +77 -1
- package/dist/agentic/types.js.map +1 -1
- package/dist/architectAdrs.d.ts +14 -2
- package/dist/architectAdrs.d.ts.map +1 -1
- package/dist/architectAdrs.js +9 -3
- package/dist/architectAdrs.js.map +1 -1
- package/dist/client/transports.d.ts.map +1 -1
- package/dist/client/transports.js +13 -3
- package/dist/client/transports.js.map +1 -1
- package/dist/daemon.d.ts +19 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +181 -38
- package/dist/daemon.js.map +1 -1
- package/dist/daemonConfig.d.ts +30 -0
- package/dist/daemonConfig.d.ts.map +1 -1
- package/dist/daemonConfig.js +56 -9
- package/dist/daemonConfig.js.map +1 -1
- package/dist/decibelPaths.d.ts.map +1 -1
- package/dist/decibelPaths.js +39 -6
- package/dist/decibelPaths.js.map +1 -1
- package/dist/domain/issue.d.ts +77 -0
- package/dist/domain/issue.d.ts.map +1 -0
- package/dist/domain/issue.js +134 -0
- package/dist/domain/issue.js.map +1 -0
- package/dist/domain/issueCodec.d.ts +39 -0
- package/dist/domain/issueCodec.d.ts.map +1 -0
- package/dist/domain/issueCodec.js +298 -0
- package/dist/domain/issueCodec.js.map +1 -0
- package/dist/domain/issueRepository.d.ts +91 -0
- package/dist/domain/issueRepository.d.ts.map +1 -0
- package/dist/domain/issueRepository.js +257 -0
- package/dist/domain/issueRepository.js.map +1 -0
- package/dist/facades/definitions.d.ts +0 -1
- package/dist/facades/definitions.d.ts.map +1 -1
- package/dist/facades/definitions.js +94 -98
- package/dist/facades/definitions.js.map +1 -1
- package/dist/facades/index.d.ts +2 -1
- package/dist/facades/index.d.ts.map +1 -1
- package/dist/facades/index.js +1 -1
- package/dist/facades/index.js.map +1 -1
- package/dist/facades/types.d.ts +17 -0
- package/dist/facades/types.d.ts.map +1 -1
- package/dist/httpArgs.d.ts +11 -0
- package/dist/httpArgs.d.ts.map +1 -0
- package/dist/httpArgs.js +39 -0
- package/dist/httpArgs.js.map +1 -0
- package/dist/httpServer.d.ts +1 -12
- package/dist/httpServer.d.ts.map +1 -1
- package/dist/httpServer.js +173 -98
- package/dist/httpServer.js.map +1 -1
- package/dist/kernel.d.ts +55 -1
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +366 -31
- package/dist/kernel.js.map +1 -1
- package/dist/lib/agent-services/assumptions.d.ts.map +1 -1
- package/dist/lib/agent-services/assumptions.js +8 -2
- package/dist/lib/agent-services/assumptions.js.map +1 -1
- package/dist/lib/atomicWrite.d.ts +26 -0
- package/dist/lib/atomicWrite.d.ts.map +1 -0
- package/dist/lib/atomicWrite.js +73 -0
- package/dist/lib/atomicWrite.js.map +1 -0
- package/dist/lib/envelope.d.ts +31 -0
- package/dist/lib/envelope.d.ts.map +1 -0
- package/dist/lib/envelope.js +80 -0
- package/dist/lib/envelope.js.map +1 -0
- package/dist/lib/fileLock.d.ts +38 -0
- package/dist/lib/fileLock.d.ts.map +1 -0
- package/dist/lib/fileLock.js +124 -0
- package/dist/lib/fileLock.js.map +1 -0
- package/dist/lib/recordIdAllocator.d.ts +86 -0
- package/dist/lib/recordIdAllocator.d.ts.map +1 -0
- package/dist/lib/recordIdAllocator.js +161 -0
- package/dist/lib/recordIdAllocator.js.map +1 -0
- package/dist/license.js +3 -3
- package/dist/license.js.map +1 -1
- package/dist/projectRegistry.d.ts +65 -3
- package/dist/projectRegistry.d.ts.map +1 -1
- package/dist/projectRegistry.js +233 -33
- package/dist/projectRegistry.js.map +1 -1
- package/dist/runtime/circuitBreaker.d.ts +95 -0
- package/dist/runtime/circuitBreaker.d.ts.map +1 -0
- package/dist/runtime/circuitBreaker.js +178 -0
- package/dist/runtime/circuitBreaker.js.map +1 -0
- package/dist/runtime/ensureRuntime.d.ts +103 -0
- package/dist/runtime/ensureRuntime.d.ts.map +1 -0
- package/dist/runtime/ensureRuntime.js +281 -0
- package/dist/runtime/ensureRuntime.js.map +1 -0
- package/dist/runtime/extensions.d.ts +57 -0
- package/dist/runtime/extensions.d.ts.map +1 -0
- package/dist/runtime/extensions.js +216 -0
- package/dist/runtime/extensions.js.map +1 -0
- package/dist/runtime/localHttp.d.ts +24 -0
- package/dist/runtime/localHttp.d.ts.map +1 -0
- package/dist/runtime/localHttp.js +84 -0
- package/dist/runtime/localHttp.js.map +1 -0
- package/dist/runtime/projectResolution.d.ts +29 -0
- package/dist/runtime/projectResolution.d.ts.map +1 -0
- package/dist/runtime/projectResolution.js +67 -0
- package/dist/runtime/projectResolution.js.map +1 -0
- package/dist/runtime/protocol.d.ts +62 -0
- package/dist/runtime/protocol.d.ts.map +1 -0
- package/dist/runtime/protocol.js +74 -0
- package/dist/runtime/protocol.js.map +1 -0
- package/dist/sentinelIssues.d.ts +26 -2
- package/dist/sentinelIssues.d.ts.map +1 -1
- package/dist/sentinelIssues.js +163 -76
- package/dist/sentinelIssues.js.map +1 -1
- package/dist/server.js +65 -12
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +83 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +445 -0
- package/dist/setup.js.map +1 -0
- package/dist/store/markdown.d.ts +14 -1
- package/dist/store/markdown.d.ts.map +1 -1
- package/dist/store/markdown.js +36 -3
- package/dist/store/markdown.js.map +1 -1
- package/dist/tools/agentic/index.d.ts.map +1 -1
- package/dist/tools/agentic/index.js +28 -2
- package/dist/tools/agentic/index.js.map +1 -1
- package/dist/tools/architect/index.d.ts.map +1 -1
- package/dist/tools/architect/index.js +7 -2
- package/dist/tools/architect/index.js.map +1 -1
- package/dist/tools/conductor/index.d.ts +9 -0
- package/dist/tools/conductor/index.d.ts.map +1 -0
- package/dist/tools/conductor/index.js +242 -0
- package/dist/tools/conductor/index.js.map +1 -0
- package/dist/tools/context.d.ts +10 -5
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +45 -18
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/coordinator/coordinator.d.ts.map +1 -1
- package/dist/tools/coordinator/coordinator.js +48 -19
- package/dist/tools/coordinator/coordinator.js.map +1 -1
- package/dist/tools/crit.d.ts +2 -1
- package/dist/tools/crit.d.ts.map +1 -1
- package/dist/tools/crit.js +19 -4
- package/dist/tools/crit.js.map +1 -1
- package/dist/tools/designer/index.d.ts.map +1 -1
- package/dist/tools/designer/index.js +4 -3
- package/dist/tools/designer/index.js.map +1 -1
- package/dist/tools/designer/lateral-tools.d.ts.map +1 -1
- package/dist/tools/designer/lateral-tools.js +4 -2
- package/dist/tools/designer/lateral-tools.js.map +1 -1
- package/dist/tools/designer.d.ts +2 -1
- package/dist/tools/designer.d.ts.map +1 -1
- package/dist/tools/designer.js +24 -12
- package/dist/tools/designer.js.map +1 -1
- package/dist/tools/dojo.d.ts +3 -2
- package/dist/tools/dojo.d.ts.map +1 -1
- package/dist/tools/dojo.js +64 -22
- package/dist/tools/dojo.js.map +1 -1
- package/dist/tools/dojoPolicy.js +1 -1
- package/dist/tools/dojoPolicy.js.map +1 -1
- package/dist/tools/friction.d.ts.map +1 -1
- package/dist/tools/friction.js +16 -6
- package/dist/tools/friction.js.map +1 -1
- package/dist/tools/guardian.d.ts +29 -7
- package/dist/tools/guardian.d.ts.map +1 -1
- package/dist/tools/guardian.js +90 -75
- package/dist/tools/guardian.js.map +1 -1
- package/dist/tools/hygiene/oracle-hygiene.d.ts.map +1 -1
- package/dist/tools/hygiene/oracle-hygiene.js +8 -2
- package/dist/tools/hygiene/oracle-hygiene.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +29 -18
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/learnings.d.ts +2 -1
- package/dist/tools/learnings.d.ts.map +1 -1
- package/dist/tools/learnings.js +31 -15
- package/dist/tools/learnings.js.map +1 -1
- package/dist/tools/oracle.d.ts.map +1 -1
- package/dist/tools/oracle.js +19 -6
- package/dist/tools/oracle.js.map +1 -1
- package/dist/tools/policy.d.ts +2 -1
- package/dist/tools/policy.d.ts.map +1 -1
- package/dist/tools/policy.js +28 -9
- package/dist/tools/policy.js.map +1 -1
- package/dist/tools/postoffice/index.d.ts +10 -0
- package/dist/tools/postoffice/index.d.ts.map +1 -0
- package/dist/tools/postoffice/index.js +218 -0
- package/dist/tools/postoffice/index.js.map +1 -0
- package/dist/tools/postoffice.d.ts +78 -0
- package/dist/tools/postoffice.d.ts.map +1 -0
- package/dist/tools/postoffice.js +199 -0
- package/dist/tools/postoffice.js.map +1 -0
- package/dist/tools/provenance.d.ts +7 -0
- package/dist/tools/provenance.d.ts.map +1 -1
- package/dist/tools/provenance.js +42 -16
- package/dist/tools/provenance.js.map +1 -1
- package/dist/tools/registry/index.d.ts.map +1 -1
- package/dist/tools/registry/index.js +41 -12
- package/dist/tools/registry/index.js.map +1 -1
- package/dist/tools/sentinel/index.d.ts +1 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -1
- package/dist/tools/sentinel/index.js +88 -4
- package/dist/tools/sentinel/index.js.map +1 -1
- package/dist/tools/sentinel.d.ts +117 -1
- package/dist/tools/sentinel.d.ts.map +1 -1
- package/dist/tools/sentinel.js +761 -339
- package/dist/tools/sentinel.js.map +1 -1
- package/dist/tools/shared/index.d.ts +2 -1
- package/dist/tools/shared/index.d.ts.map +1 -1
- package/dist/tools/shared/index.js +2 -1
- package/dist/tools/shared/index.js.map +1 -1
- package/dist/tools/shared/response.d.ts +24 -0
- package/dist/tools/shared/response.d.ts.map +1 -1
- package/dist/tools/shared/response.js +61 -7
- package/dist/tools/shared/response.js.map +1 -1
- package/dist/tools/shared/storeRead.d.ts +153 -0
- package/dist/tools/shared/storeRead.d.ts.map +1 -0
- package/dist/tools/shared/storeRead.js +242 -0
- package/dist/tools/shared/storeRead.js.map +1 -0
- package/dist/tools/testSpec.d.ts +3 -2
- package/dist/tools/testSpec.d.ts.map +1 -1
- package/dist/tools/testSpec.js +51 -14
- package/dist/tools/testSpec.js.map +1 -1
- package/dist/tools/vector.d.ts +33 -1
- package/dist/tools/vector.d.ts.map +1 -1
- package/dist/tools/vector.js +31 -5
- package/dist/tools/vector.js.map +1 -1
- package/dist/tools/zoom/index.d.ts +15 -0
- package/dist/tools/zoom/index.d.ts.map +1 -0
- package/dist/tools/zoom/index.js +174 -0
- package/dist/tools/zoom/index.js.map +1 -0
- package/dist/tools/zoom.d.ts +234 -0
- package/dist/tools/zoom.d.ts.map +1 -0
- package/dist/tools/zoom.js +627 -0
- package/dist/tools/zoom.js.map +1 -0
- package/dist/transports/bridge.d.ts +1 -1
- package/dist/transports/bridge.d.ts.map +1 -1
- package/dist/transports/bridge.js +2 -0
- package/dist/transports/bridge.js.map +1 -1
- package/dist/transports/http.d.ts +1 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +3 -1
- package/dist/transports/http.js.map +1 -1
- package/dist/transports/index.d.ts +1 -0
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +1 -0
- package/dist/transports/index.js.map +1 -1
- package/dist/transports/mcp.d.ts +1 -1
- package/dist/transports/mcp.d.ts.map +1 -1
- package/dist/transports/mcp.js +7 -3
- package/dist/transports/mcp.js.map +1 -1
- package/dist/transports/stdio.d.ts +1 -1
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +2 -0
- package/dist/transports/stdio.js.map +1 -1
- package/dist/transports/thinStdio.d.ts +22 -0
- package/dist/transports/thinStdio.d.ts.map +1 -0
- package/dist/transports/thinStdio.js +218 -0
- package/dist/transports/thinStdio.js.map +1 -0
- package/dist/transports/types.d.ts +8 -1
- package/dist/transports/types.d.ts.map +1 -1
- package/dist/types/agent-services.d.ts +7 -0
- package/dist/types/agent-services.d.ts.map +1 -1
- package/package.json +9 -4
- package/templates/com.decibel.daemon.plist +6 -1
- package/dist/tools/deck.d.ts +0 -11
- package/dist/tools/deck.d.ts.map +0 -1
- package/dist/tools/deck.js +0 -1656
- package/dist/tools/deck.js.map +0 -1
- package/dist/tools/mother.d.ts +0 -11
- package/dist/tools/mother.d.ts.map +0 -1
- package/dist/tools/mother.js +0 -503
- package/dist/tools/mother.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -3
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -189
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/senken.d.ts +0 -11
- package/dist/tools/senken.d.ts.map +0 -1
- package/dist/tools/senken.js +0 -482
- package/dist/tools/senken.js.map +0 -1
- package/dist/tools/terminal.d.ts +0 -17
- package/dist/tools/terminal.d.ts.map +0 -1
- package/dist/tools/terminal.js +0 -968
- package/dist/tools/terminal.js.map +0 -1
- package/dist/tools/toolsIndex.d.ts +0 -5
- package/dist/tools/toolsIndex.d.ts.map +0 -1
- package/dist/tools/toolsIndex.js +0 -37
- package/dist/tools/toolsIndex.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelIssues.d.ts","sourceRoot":"","sources":["../src/sentinelIssues.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sentinelIssues.d.ts","sourceRoot":"","sources":["../src/sentinelIssues.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,IAAI,oBAAoB,EACnC,aAAa,IAAI,sBAAsB,EACxC,MAAM,mBAAmB,CAAC;AAa3B,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAC/C,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiDD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBtE;AAMD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,EAAE,CAAC,CA8F1B;AAED;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAwBD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmB/B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA6H5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EAAE,EACvB,MAAM,EAAE,WAAW,GAClB,aAAa,EAAE,CAEjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EAAE,EACvB,MAAM,EAAE,MAAM,GACb,aAAa,EAAE,CAEjB"}
|
package/dist/sentinelIssues.js
CHANGED
|
@@ -3,6 +3,8 @@ import path from 'path';
|
|
|
3
3
|
import { parse as parseYaml, parseAllDocuments, stringify as stringifyYaml } from 'yaml';
|
|
4
4
|
import { log } from './config.js';
|
|
5
5
|
import { getWritePath, readFilesFromBothPaths } from './decibelPaths.js';
|
|
6
|
+
import { FsIssueRepository } from './domain/issueRepository.js';
|
|
7
|
+
import { writeFileAtomic } from './lib/atomicWrite.js';
|
|
6
8
|
// ============================================================================
|
|
7
9
|
// Constants
|
|
8
10
|
// ============================================================================
|
|
@@ -91,18 +93,29 @@ export async function listIssuesForProject(projectId) {
|
|
|
91
93
|
for (const { filePath, source } of files) {
|
|
92
94
|
try {
|
|
93
95
|
const content = await fs.readFile(filePath, 'utf-8');
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
97
|
+
const parsed = fmMatch ? safeParseYaml(fmMatch[1]) : safeParseYaml(content);
|
|
98
|
+
// Required fields, with fallbacks for markdown-frontmatter issues
|
|
99
|
+
// (tools/sentinel.ts createIssue): id = filename, title = `# heading`.
|
|
100
|
+
// Without these, read_issue/update_issue can't see .md issues at all.
|
|
101
|
+
const headingMatch = content.match(/^# (.+)$/m);
|
|
102
|
+
const id = parsed.id || path.basename(filePath);
|
|
103
|
+
const title = parsed.title ||
|
|
104
|
+
headingMatch?.[1] ||
|
|
105
|
+
path.basename(filePath).replace(/\.(md|ya?ml)$/, '');
|
|
98
106
|
if (!id || !title) {
|
|
99
107
|
log(`sentinelIssues: Skipping ${filePath} - missing id or title`);
|
|
100
108
|
continue;
|
|
101
109
|
}
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
110
|
+
// Two DIFFERENT issues can claim one id (ISS-0131). Dropping the second
|
|
111
|
+
// made it unreachable to read_issue/update_issue while the tool still
|
|
112
|
+
// reported success on the first — so keep both and mark them instead.
|
|
113
|
+
// (Cross-path duplicates of the SAME file are already deduped by
|
|
114
|
+
// filename in readFilesFromBothPaths, so this only ever fires on a real
|
|
115
|
+
// id collision.)
|
|
116
|
+
const isDuplicate = seenIds.has(id);
|
|
117
|
+
if (isDuplicate) {
|
|
118
|
+
log(`sentinelIssues: Duplicate id ${id} from ${source} path — both retained, marked ambiguous`);
|
|
106
119
|
}
|
|
107
120
|
seenIds.add(id);
|
|
108
121
|
const issue = {
|
|
@@ -115,7 +128,8 @@ export async function listIssuesForProject(projectId) {
|
|
|
115
128
|
tags: parsed.tags,
|
|
116
129
|
created_at: parsed.created_at,
|
|
117
130
|
updated_at: parsed.updated_at,
|
|
118
|
-
description: parsed.description
|
|
131
|
+
description: parsed.description ??
|
|
132
|
+
(fmMatch?.[2]?.trim() ? fmMatch[2].trim() : undefined),
|
|
119
133
|
};
|
|
120
134
|
// Copy any extra fields
|
|
121
135
|
for (const key of Object.keys(parsed)) {
|
|
@@ -123,6 +137,8 @@ export async function listIssuesForProject(projectId) {
|
|
|
123
137
|
issue[key] = parsed[key];
|
|
124
138
|
}
|
|
125
139
|
}
|
|
140
|
+
// Keep the on-disk filename so lookups can accept it as an ID
|
|
141
|
+
issue.filename = path.basename(filePath);
|
|
126
142
|
issues.push(issue);
|
|
127
143
|
}
|
|
128
144
|
catch (err) {
|
|
@@ -130,6 +146,20 @@ export async function listIssuesForProject(projectId) {
|
|
|
130
146
|
log(`sentinelIssues: Failed to parse ${filePath}: ${message}`);
|
|
131
147
|
}
|
|
132
148
|
}
|
|
149
|
+
// Mark EVERY member of a colliding id, not just the ones seen second — a
|
|
150
|
+
// caller holding the first file is in exactly as much danger as one holding
|
|
151
|
+
// the second, and neither can be safely written by id alone.
|
|
152
|
+
const byId = new Map();
|
|
153
|
+
for (const issue of issues) {
|
|
154
|
+
const key = issue.id.toUpperCase();
|
|
155
|
+
byId.set(key, [...(byId.get(key) ?? []), issue]);
|
|
156
|
+
}
|
|
157
|
+
for (const group of byId.values()) {
|
|
158
|
+
if (group.length > 1) {
|
|
159
|
+
for (const issue of group)
|
|
160
|
+
issue.duplicate_id = true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
133
163
|
// Sort by ID (newest first)
|
|
134
164
|
issues.sort((a, b) => extractIssueNumber(b.id) - extractIssueNumber(a.id));
|
|
135
165
|
return issues;
|
|
@@ -137,74 +167,99 @@ export async function listIssuesForProject(projectId) {
|
|
|
137
167
|
/**
|
|
138
168
|
* Create a new issue for a project
|
|
139
169
|
*/
|
|
170
|
+
/**
|
|
171
|
+
* Create an issue.
|
|
172
|
+
*
|
|
173
|
+
* EPIC-0038 Phase 5: this used to be the second writer. It emitted `.yml` while
|
|
174
|
+
* the facade path (src/tools/sentinel.ts -> FsIssueRepository) emitted `.md`,
|
|
175
|
+
* into the same directory, from the same ISS-NNNN space. Converging the files
|
|
176
|
+
* while both writers ran would have left this one re-emitting `.yml` behind the
|
|
177
|
+
* migration — which is why the epic sequences behaviour before representation.
|
|
178
|
+
*
|
|
179
|
+
* So it now delegates. The name, the input contract and the return shape are
|
|
180
|
+
* all preserved; only the bytes on disk change. `SentinelIssue` is a subset of
|
|
181
|
+
* the canonical `Issue`, so the mapping back is total rather than lossy:
|
|
182
|
+
* `details` carries what this API calls `description`, and everything else is
|
|
183
|
+
* the same field under the same name.
|
|
184
|
+
*
|
|
185
|
+
* One field needs a decision rather than a mapping. This API has no `severity`
|
|
186
|
+
* and the canonical model wants one, so callers may now pass it and it defaults
|
|
187
|
+
* to 'med' — the neutral middle of ['low','med','high','critical'] — rather
|
|
188
|
+
* than inventing a severity from `priority`, which answers a different question
|
|
189
|
+
* (how bad it is, versus when it gets worked on).
|
|
190
|
+
*/
|
|
140
191
|
export async function createIssue(input) {
|
|
141
|
-
const { projectId, title, description, epicId, priority, tags } = input;
|
|
142
|
-
// Always write to .decibel/ (primary path)
|
|
192
|
+
const { projectId, title, description, epicId, priority, tags, severity } = input;
|
|
143
193
|
const issuesDir = await getWritePath(projectId, ISSUES_SUBPATH);
|
|
144
194
|
await ensureDir(issuesDir);
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
const maxNum = existingIssues.reduce((max, issue) => Math.max(max, extractIssueNumber(issue.id)), 0);
|
|
148
|
-
const newNum = maxNum + 1;
|
|
149
|
-
const newId = formatIssueId(newNum);
|
|
150
|
-
// Build filename
|
|
151
|
-
const slug = slugify(title);
|
|
152
|
-
const filename = `${newId}-${slug}.yml`;
|
|
153
|
-
const filePath = path.join(issuesDir, filename);
|
|
154
|
-
// Build issue object
|
|
155
|
-
const now = new Date().toISOString();
|
|
156
|
-
const issue = {
|
|
157
|
-
id: newId,
|
|
195
|
+
const repo = new FsIssueRepository(issuesDir);
|
|
196
|
+
const stored = await repo.create({
|
|
158
197
|
title,
|
|
159
|
-
|
|
160
|
-
|
|
198
|
+
details: description ?? '',
|
|
199
|
+
severity: severity ?? 'med',
|
|
161
200
|
priority: priority || 'medium',
|
|
162
201
|
tags: tags || [],
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
// Build YAML content
|
|
173
|
-
// Use a specific field order for cleaner output
|
|
174
|
-
const yamlObj = {
|
|
202
|
+
epicId,
|
|
203
|
+
project: projectId,
|
|
204
|
+
});
|
|
205
|
+
const issue = stored.issue;
|
|
206
|
+
log(`sentinelIssues: Created issue at ${stored.path}`);
|
|
207
|
+
// Rebuilt in this API's shape, not returned raw, so existing callers keep the
|
|
208
|
+
// response they were written against.
|
|
209
|
+
const out = {
|
|
175
210
|
id: issue.id,
|
|
176
211
|
title: issue.title,
|
|
177
|
-
project: issue.project,
|
|
212
|
+
project: issue.project ?? projectId,
|
|
178
213
|
status: issue.status,
|
|
179
214
|
priority: issue.priority,
|
|
215
|
+
tags: issue.tags,
|
|
216
|
+
created_at: issue.created_at,
|
|
217
|
+
// The canonical record omits updated_at until something updates it, but
|
|
218
|
+
// this API has always returned both on create. Echoing created_at keeps
|
|
219
|
+
// that contract without writing a redundant field to disk.
|
|
220
|
+
updated_at: issue.updated_at ?? issue.created_at,
|
|
221
|
+
filePath: stored.path,
|
|
180
222
|
};
|
|
181
|
-
if (epicId)
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
};
|
|
223
|
+
if (issue.epicId)
|
|
224
|
+
out.epicId = issue.epicId;
|
|
225
|
+
if (issue.details)
|
|
226
|
+
out.description = issue.details;
|
|
227
|
+
return out;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Build the refusal for an id that names more than one record. Callers get the
|
|
231
|
+
* candidate filenames because each one is itself a valid, unambiguous id —
|
|
232
|
+
* without them the error would be a dead end rather than a next step.
|
|
233
|
+
*/
|
|
234
|
+
function ambiguousIssueId(issueId, projectId, candidates) {
|
|
235
|
+
const names = candidates.map((c) => typeof c.filename === 'string' ? c.filename : String(c.title ?? '?'));
|
|
236
|
+
const err = new Error(`AMBIGUOUS_ISSUE_ID: "${issueId}" matches ${names.length} records in project "${projectId}", ` +
|
|
237
|
+
`so the target is undefined and nothing was changed. ` +
|
|
238
|
+
`Re-run with one of these filenames as issue_id: ${names.join(', ')}`);
|
|
239
|
+
err.name = 'AmbiguousIssueIdError';
|
|
240
|
+
return err;
|
|
200
241
|
}
|
|
201
242
|
/**
|
|
202
243
|
* Get a single issue by ID (e.g., "ISS-0005") with full content
|
|
203
244
|
*/
|
|
204
245
|
export async function getIssueById(projectId, issueId) {
|
|
246
|
+
// Accept every ID form other tools emit: frontmatter id (ISS-NNNN),
|
|
247
|
+
// filename with or without extension (what list_issues/close_issue use).
|
|
248
|
+
const norm = (s) => s.toUpperCase().replace(/\.(MD|YA?ML)$/, '');
|
|
205
249
|
const issues = await listIssuesForProject(projectId);
|
|
206
|
-
const normalizedId = issueId
|
|
207
|
-
|
|
250
|
+
const normalizedId = norm(issueId);
|
|
251
|
+
// Filename is the more specific form and can only match one record, so it
|
|
252
|
+
// wins outright — that keeps "retry with the filename" a working escape
|
|
253
|
+
// hatch out of an ambiguous id.
|
|
254
|
+
const byFilename = issues.filter((i) => typeof i.filename === 'string' && norm(i.filename) === normalizedId);
|
|
255
|
+
if (byFilename.length === 1)
|
|
256
|
+
return byFilename[0];
|
|
257
|
+
const byId = issues.filter((i) => norm(i.id) === normalizedId);
|
|
258
|
+
if (byId.length === 0)
|
|
259
|
+
return null;
|
|
260
|
+
if (byId.length > 1)
|
|
261
|
+
throw ambiguousIssueId(issueId, projectId, byId);
|
|
262
|
+
return byId[0];
|
|
208
263
|
}
|
|
209
264
|
/**
|
|
210
265
|
* Update an existing issue — status, priority, tags, and/or append a note.
|
|
@@ -215,25 +270,51 @@ export async function updateIssue(input) {
|
|
|
215
270
|
// Find the issue file
|
|
216
271
|
const files = await readFilesFromBothPaths(projectId, ISSUES_SUBPATH);
|
|
217
272
|
const normalizedId = issueId.toUpperCase();
|
|
218
|
-
|
|
219
|
-
|
|
273
|
+
// Exact filename beats a prefix, so naming the file disambiguates a
|
|
274
|
+
// duplicate id. Checked first and returned outright.
|
|
275
|
+
const exact = files.filter((f) => path.basename(f.filePath).toUpperCase() === normalizedId);
|
|
276
|
+
// A bare `startsWith` had no boundary: "ISS-011" swallowed ISS-0110,
|
|
277
|
+
// ISS-0112 and ISS-0119, and `break` then wrote to whichever readdir
|
|
278
|
+
// happened to yield first. Require the id to end at a separator or the
|
|
279
|
+
// extension, and collect every hit rather than stopping at the first.
|
|
280
|
+
const prefixed = files.filter((f) => {
|
|
220
281
|
const basename = path.basename(f.filePath).toUpperCase();
|
|
221
|
-
if (basename.startsWith(normalizedId))
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
|
|
282
|
+
if (!basename.startsWith(normalizedId))
|
|
283
|
+
return false;
|
|
284
|
+
const rest = basename.slice(normalizedId.length);
|
|
285
|
+
return rest === '' || rest.startsWith('-') || /^\.(MD|YA?ML)$/.test(rest);
|
|
286
|
+
});
|
|
287
|
+
const matches = exact.length > 0 ? exact : prefixed;
|
|
288
|
+
if (matches.length === 0) {
|
|
227
289
|
throw new Error(`Issue ${issueId} not found in project ${projectId}`);
|
|
228
290
|
}
|
|
229
|
-
|
|
291
|
+
if (matches.length > 1) {
|
|
292
|
+
throw ambiguousIssueId(issueId, projectId, matches.map((f) => ({ filename: path.basename(f.filePath) })));
|
|
293
|
+
}
|
|
294
|
+
const matchedFile = matches[0];
|
|
295
|
+
// Read and parse. Two on-disk formats exist:
|
|
296
|
+
// 1. Markdown with `---` frontmatter delimiters + body (tools/sentinel.ts createIssue)
|
|
297
|
+
// 2. Pure YAML (this module's createIssue)
|
|
298
|
+
// The writer MUST preserve the source format — flattening a markdown file to
|
|
299
|
+
// bare YAML drops the delimiters, the `# Title` heading, and the body, which
|
|
300
|
+
// makes the issue invisible to frontmatter-based readers (silent data loss).
|
|
230
301
|
const content = await fs.readFile(matchedFile.filePath, 'utf-8');
|
|
231
|
-
const
|
|
302
|
+
const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
303
|
+
const parsed = fmMatch ? safeParseYaml(fmMatch[1]) : safeParseYaml(content);
|
|
304
|
+
let body = fmMatch ? fmMatch[2] : undefined;
|
|
232
305
|
const changes = [];
|
|
233
306
|
// Apply changes
|
|
234
307
|
if (status && status !== parsed.status) {
|
|
235
308
|
changes.push(`status: ${parsed.status} → ${status}`);
|
|
236
309
|
parsed.status = status;
|
|
310
|
+
// Markdown records mirror the status into the body as `**Status:** x` for
|
|
311
|
+
// human readers. close_issue rewrites that line; this path did not, so a
|
|
312
|
+
// record moved to in_progress or closed here still read `open` to anyone
|
|
313
|
+
// opening the file. Frontmatter stayed correct, which is why the tools
|
|
314
|
+
// never noticed — the drift was only ever visible to people.
|
|
315
|
+
if (body !== undefined) {
|
|
316
|
+
body = body.replace(/^\*\*Status:\*\* .*$/m, `**Status:** ${status}`);
|
|
317
|
+
}
|
|
237
318
|
}
|
|
238
319
|
if (priority && priority !== parsed.priority) {
|
|
239
320
|
changes.push(`priority: ${parsed.priority ?? 'unset'} → ${priority}`);
|
|
@@ -248,10 +329,15 @@ export async function updateIssue(input) {
|
|
|
248
329
|
}
|
|
249
330
|
}
|
|
250
331
|
if (note) {
|
|
251
|
-
const existing = parsed.description || '';
|
|
252
332
|
const timestamp = new Date().toISOString().slice(0, 10);
|
|
253
|
-
|
|
254
|
-
|
|
333
|
+
if (body !== undefined) {
|
|
334
|
+
// Markdown format: append to the body, keeping the heading/prose intact
|
|
335
|
+
body = `${body.replace(/\s+$/, '')}\n\n[${timestamp}] ${note}\n`;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
const existing = parsed.description || '';
|
|
339
|
+
parsed.description = `${existing}\n\n[${timestamp}] ${note}`;
|
|
340
|
+
}
|
|
255
341
|
changes.push(`note appended`);
|
|
256
342
|
}
|
|
257
343
|
if (changes.length === 0) {
|
|
@@ -259,13 +345,14 @@ export async function updateIssue(input) {
|
|
|
259
345
|
}
|
|
260
346
|
// Update timestamp
|
|
261
347
|
parsed.updated_at = new Date().toISOString();
|
|
262
|
-
// Write back
|
|
263
|
-
const
|
|
348
|
+
// Write back in the same format the file came in
|
|
349
|
+
const yaml = stringifyYaml(parsed, { lineWidth: 0 });
|
|
350
|
+
const yamlContent = body !== undefined ? `---\n${yaml}---\n${body}` : yaml;
|
|
264
351
|
// Write to the primary (.decibel) path
|
|
265
352
|
const writeDir = await getWritePath(projectId, ISSUES_SUBPATH);
|
|
266
353
|
await ensureDir(writeDir);
|
|
267
354
|
const writePath = path.join(writeDir, path.basename(matchedFile.filePath));
|
|
268
|
-
await
|
|
355
|
+
await writeFileAtomic(writePath, yamlContent);
|
|
269
356
|
log(`sentinelIssues: Updated issue ${issueId} at ${writePath} — ${changes.join(', ')}`);
|
|
270
357
|
// Build return object
|
|
271
358
|
const issue = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelIssues.js","sourceRoot":"","sources":["../src/sentinelIssues.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sentinelIssues.js","sourceRoot":"","sources":["../src/sentinelIssues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACzF,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAMhE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA6CvD,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEzC,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,EAAU;IACpC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,OAAe;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,6CAA6C;IAC7C,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,OAAO,CAA4B,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6CAA6C;QAC7C,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,sDAAsD;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,QAAmC,CAAC;AAC7C,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB;IAEjB,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,8CAA8C;IAC9C,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAEtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE5E,kEAAkE;YAClE,uEAAuE;YACvE,sEAAsE;YACtE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,EAAE,GAAI,MAAM,CAAC,EAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5D,MAAM,KAAK,GACR,MAAM,CAAC,KAAgB;gBACxB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAEvD,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,GAAG,CAAC,4BAA4B,QAAQ,wBAAwB,CAAC,CAAC;gBAClE,SAAS;YACX,CAAC;YAED,wEAAwE;YACxE,sEAAsE;YACtE,sEAAsE;YACtE,iEAAiE;YACjE,wEAAwE;YACxE,iBAAiB;YACjB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,gCAAgC,EAAE,SAAS,MAAM,yCAAyC,CAAC,CAAC;YAClG,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,KAAK,GAAkB;gBAC3B,EAAE;gBACF,KAAK;gBACL,OAAO,EAAG,MAAM,CAAC,OAAkB,IAAI,SAAS;gBAChD,MAAM,EAAG,MAAM,CAAC,MAAsB,IAAI,MAAM;gBAChD,QAAQ,EAAE,MAAM,CAAC,QAAqC;gBACtD,MAAM,EAAG,MAAM,CAAC,OAAkB,IAAK,MAAM,CAAC,MAAiB;gBAC/D,IAAI,EAAE,MAAM,CAAC,IAA4B;gBACzC,UAAU,EAAE,MAAM,CAAC,UAAgC;gBACnD,UAAU,EAAE,MAAM,CAAC,UAAgC;gBACnD,WAAW,EACR,MAAM,CAAC,WAAkC;oBAC1C,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;aACzD,CAAC;YAEF,wBAAwB;YACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpB,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,8DAA8D;YAC9D,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,CAAC,mCAAmC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,6DAA6D;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,KAAK;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QACvD,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAElF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChE,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IAE3B,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QAC/B,KAAK;QACL,OAAO,EAAE,WAAW,IAAI,EAAE;QAC1B,QAAQ,EAAE,QAAQ,IAAI,KAAK;QAC3B,QAAQ,EAAE,QAAQ,IAAI,QAAQ;QAC9B,IAAI,EAAE,IAAI,IAAI,EAAE;QAChB,MAAM;QACN,OAAO,EAAE,SAAS;KACnB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,GAAG,CAAC,oCAAoC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvD,8EAA8E;IAC9E,sCAAsC;IACtC,MAAM,GAAG,GAAsB;QAC7B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,wEAAwE;QACxE,wEAAwE;QACxE,2DAA2D;QAC3D,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU;QAChD,QAAQ,EAAE,MAAM,CAAC,IAAI;KACtB,CAAC;IACF,IAAI,KAAK,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO;QAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,OAAe,EACf,SAAiB,EACjB,UAAyD;IAEzD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CACrE,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,wBAAwB,OAAO,aAAa,KAAK,CAAC,MAAM,wBAAwB,SAAS,KAAK;QAC5F,sDAAsD;QACtD,mDAAmD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;IACF,GAAG,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,OAAe;IAEf,oEAAoE;IACpE,yEAAyE;IACzE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnC,0EAA0E;IAC1E,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,YAAY,CAC3E,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAoBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEnE,sBAAsB;IACtB,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAE3C,oEAAoE;IACpE,qDAAqD;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,CAChE,CAAC;IAEF,qEAAqE;IACrE,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,yBAAyB,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,CACpB,OAAO,EACP,SAAS,EACT,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAC9D,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE/B,6CAA6C;IAC7C,yFAAyF;IACzF,6CAA6C;IAC7C,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,gBAAgB;IAChB,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,0EAA0E;QAC1E,yEAAyE;QACzE,yEAAyE;QACzE,uEAAuE;QACvE,6DAA6D;QAC7D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,eAAe,MAAM,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,QAAQ,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAI,MAAM,CAAC,IAAiB,IAAI,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,wEAAwE;YACxE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,SAAS,KAAK,IAAI,IAAI,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAI,MAAM,CAAC,WAAsB,IAAI,EAAE,CAAC;YACtD,MAAM,CAAC,WAAW,GAAG,GAAG,QAAQ,QAAQ,SAAS,KAAK,IAAI,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,iDAAiD;IACjD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3E,MAAM,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9C,GAAG,CAAC,iCAAiC,OAAO,OAAO,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAExF,sBAAsB;IACtB,MAAM,KAAK,GAAkB;QAC3B,EAAE,EAAE,MAAM,CAAC,EAAY;QACvB,KAAK,EAAE,MAAM,CAAC,KAAe;QAC7B,OAAO,EAAG,MAAM,CAAC,OAAkB,IAAI,SAAS;QAChD,MAAM,EAAE,MAAM,CAAC,MAAqB;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAqC;QACtD,MAAM,EAAG,MAAM,CAAC,OAAkB,IAAK,MAAM,CAAC,MAAiB;QAC/D,IAAI,EAAE,MAAM,CAAC,IAA4B;QACzC,UAAU,EAAE,MAAM,CAAC,UAAgC;QACnD,UAAU,EAAE,MAAM,CAAC,UAAgC;QACnD,WAAW,EAAE,MAAM,CAAC,WAAiC;KACtD,CAAC;IAEF,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAuB,EACvB,MAAmB;IAEnB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAuB,EACvB,MAAc;IAEd,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -12,20 +12,29 @@
|
|
|
12
12
|
// node dist/server.js --daemon install → install macOS launchd plist
|
|
13
13
|
// node dist/server.js --daemon uninstall
|
|
14
14
|
// node dist/server.js --daemon status
|
|
15
|
+
// node dist/server.js setup → multi-client install wizard
|
|
15
16
|
// ============================================================================
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Static imports are deliberately confined to modules that pull in nothing
|
|
19
|
+
// heavy: node builtins, argv parsing, config files, daemon lifecycle.
|
|
20
|
+
//
|
|
21
|
+
// Everything that reaches the tool graph — the kernel, the HTTP server, the
|
|
22
|
+
// Supabase clients, the transports that embed them — is imported dynamically
|
|
23
|
+
// inside the branch that needs it. This is not stylistic. An ESM static import
|
|
24
|
+
// is evaluated at module load, before main() picks a mode, so a plain
|
|
25
|
+
// `import { createKernel } from './kernel.js'` loaded all 220 tool modules for
|
|
26
|
+
// every client including the ones that only proxy. Skipping the createKernel()
|
|
27
|
+
// CALL freed the registry and nothing else; the memory was in the import graph,
|
|
28
|
+
// which is why --thin measured WORSE than full stdio (113 MB vs 97 MB) when it
|
|
29
|
+
// first landed. Adding a static import of any tool-reaching module here
|
|
30
|
+
// silently undoes that. See scripts/measure-memory.mjs.
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
16
32
|
import fs from 'fs';
|
|
17
33
|
import path from 'path';
|
|
18
34
|
import { getConfig, log } from './config.js';
|
|
19
|
-
import {
|
|
20
|
-
import { StdioAdapter, HttpAdapter, BridgeAdapter } from './transports/index.js';
|
|
21
|
-
import { parseHttpArgs } from './httpServer.js';
|
|
35
|
+
import { parseHttpArgs } from './httpArgs.js';
|
|
22
36
|
import { checkRunning, writePid, removePid, installShutdownHandlers, handleDaemonSubcommand, getLogPath, rotateLog, checkCrashLoop, scheduleHealthReset, resetCrashes, AgentRegistry, } from './daemon.js';
|
|
23
37
|
import { loadConfig } from './daemonConfig.js';
|
|
24
|
-
import { getLicenseValidator } from './license.js';
|
|
25
|
-
import { coordGarbageCollect } from './tools/coordinator/index.js';
|
|
26
|
-
import { listProjects } from './projectRegistry.js';
|
|
27
|
-
import { startPresenceWriter } from './agentPresence.js';
|
|
28
|
-
import { startCommandDispatcher } from './agentCommands.js';
|
|
29
38
|
const config = getConfig();
|
|
30
39
|
log(`Starting Decibel MCP Server`);
|
|
31
40
|
log(`Environment: ${config.env}`);
|
|
@@ -33,10 +42,16 @@ log(`Organization: ${config.org}`);
|
|
|
33
42
|
log(`Root Directory: ${config.rootDir}`);
|
|
34
43
|
if (process.env.DECIBEL_PRO === '1')
|
|
35
44
|
log('Pro features: ENABLED');
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
// Apps tier is no longer an env flag — private facades come from the extension
|
|
46
|
+
// allowlist in ~/.decibel/config.yaml and the kernel logs what it loaded and
|
|
47
|
+
// what it refused. See runtime/extensions.ts.
|
|
38
48
|
async function main() {
|
|
39
49
|
const args = process.argv;
|
|
50
|
+
// Setup wizard — must run before any transport starts (EPIC-0035 Phase 1)
|
|
51
|
+
if (args[2] === 'setup') {
|
|
52
|
+
const { runSetup } = await import('./setup.js');
|
|
53
|
+
process.exit(await runSetup(args.slice(3)));
|
|
54
|
+
}
|
|
40
55
|
const daemonMode = args.includes('--daemon');
|
|
41
56
|
// Handle daemon subcommands (install, uninstall, status) — exits process
|
|
42
57
|
if (daemonMode && handleDaemonSubcommand(args))
|
|
@@ -84,14 +99,30 @@ async function main() {
|
|
|
84
99
|
log(`Daemon: log file at ${getLogPath()}`);
|
|
85
100
|
// Pre-validate license key from config (fire and forget)
|
|
86
101
|
if (daemonConfig.license?.key) {
|
|
102
|
+
const { getLicenseValidator } = await import('./license.js');
|
|
87
103
|
getLicenseValidator().prevalidate(daemonConfig.license.key);
|
|
88
104
|
}
|
|
89
105
|
}
|
|
90
|
-
//
|
|
91
|
-
|
|
106
|
+
// THIN MODE: this process owns no runtime and proxies to the shared daemon.
|
|
107
|
+
//
|
|
108
|
+
// The kernel must not be built here. `--bridge` already proxies tool CALLS,
|
|
109
|
+
// but building the kernel first means a bridge client still loads all 195
|
|
110
|
+
// tool modules, its own registry and its own caches — the memory is spent
|
|
111
|
+
// before the transport choice is made. Six clients at ~110 MB each, five of
|
|
112
|
+
// them paying for a runtime they immediately forward past. That single
|
|
113
|
+
// unconditional line is the whole of the 663 MB measured on 2026-08-30.
|
|
114
|
+
const thinMode = args.includes('--thin');
|
|
115
|
+
// Dynamic on purpose — see the import-block note above. The `await import`
|
|
116
|
+
// is what keeps kernel.js and its 220 tool modules out of a thin client's
|
|
117
|
+
// heap, not the null assignment.
|
|
118
|
+
const kernel = thinMode ? null : await (await import('./kernel.js')).createKernel();
|
|
92
119
|
const adapters = [];
|
|
93
120
|
// In daemon mode, log all dispatches to dispatch.jsonl (async buffered writes + rotation)
|
|
94
121
|
if (daemonMode) {
|
|
122
|
+
// Structural, not defensive: --thin and --daemon are contradictory. The
|
|
123
|
+
// daemon IS the runtime everything else proxies to.
|
|
124
|
+
if (!kernel)
|
|
125
|
+
throw new Error('Daemon mode requires a local kernel — --thin and --daemon cannot be combined');
|
|
95
126
|
const logsDir = path.join(process.env.HOME || '~', '.decibel', 'logs');
|
|
96
127
|
fs.mkdirSync(logsDir, { recursive: true });
|
|
97
128
|
const dispatchLogPath = path.join(logsDir, 'dispatch.jsonl');
|
|
@@ -164,6 +195,8 @@ async function main() {
|
|
|
164
195
|
// Sweep stale agents from registry
|
|
165
196
|
agentRegistry.sweepStale();
|
|
166
197
|
// GC coordinator state across all registered projects
|
|
198
|
+
const { listProjects } = await import('./projectRegistry.js');
|
|
199
|
+
const { coordGarbageCollect } = await import('./tools/coordinator/index.js');
|
|
167
200
|
const projects = listProjects();
|
|
168
201
|
if (projects.length > 0) {
|
|
169
202
|
const projectIds = projects.map(p => p.id);
|
|
@@ -181,17 +214,21 @@ async function main() {
|
|
|
181
214
|
let stopPresence = () => { };
|
|
182
215
|
let stopCommands = () => { };
|
|
183
216
|
if (daemonMode) {
|
|
217
|
+
const { startPresenceWriter } = await import('./agentPresence.js');
|
|
218
|
+
const { startCommandDispatcher } = await import('./agentCommands.js');
|
|
184
219
|
stopPresence = startPresenceWriter();
|
|
185
220
|
stopCommands = startCommandDispatcher();
|
|
186
221
|
}
|
|
187
222
|
// Start transport(s)
|
|
188
223
|
if (daemonMode) {
|
|
189
224
|
// Daemon always starts HTTP
|
|
225
|
+
const { HttpAdapter } = await import('./transports/http.js');
|
|
190
226
|
const http = new HttpAdapter();
|
|
191
227
|
await http.start(kernel, transportConfig);
|
|
192
228
|
adapters.push(http);
|
|
193
229
|
// Optionally also start stdio (for dual-mode)
|
|
194
230
|
if (args.includes('--stdio')) {
|
|
231
|
+
const { StdioAdapter } = await import('./transports/stdio.js');
|
|
195
232
|
const stdio = new StdioAdapter();
|
|
196
233
|
await stdio.start(kernel, transportConfig);
|
|
197
234
|
adapters.push(stdio);
|
|
@@ -207,10 +244,24 @@ async function main() {
|
|
|
207
244
|
});
|
|
208
245
|
}
|
|
209
246
|
else if (httpMode) {
|
|
247
|
+
const { HttpAdapter } = await import('./transports/http.js');
|
|
210
248
|
const http = new HttpAdapter();
|
|
211
249
|
await http.start(kernel, transportConfig);
|
|
212
250
|
adapters.push(http);
|
|
213
251
|
}
|
|
252
|
+
else if (thinMode) {
|
|
253
|
+
// A thin client never executes a tool locally, so a missing runtime is a
|
|
254
|
+
// startup failure rather than something to paper over. ensureRuntime will
|
|
255
|
+
// start one if none is serving; if it cannot, the error says why and what
|
|
256
|
+
// to run.
|
|
257
|
+
const thinIdx = args.indexOf('--thin');
|
|
258
|
+
const nextThinArg = args[thinIdx + 1];
|
|
259
|
+
const explicitUrl = nextThinArg && nextThinArg.startsWith('http') ? nextThinArg : undefined;
|
|
260
|
+
const { ThinStdioAdapter } = await import('./transports/thinStdio.js');
|
|
261
|
+
const thin = new ThinStdioAdapter(explicitUrl);
|
|
262
|
+
await thin.start(null, transportConfig);
|
|
263
|
+
adapters.push(thin);
|
|
264
|
+
}
|
|
214
265
|
else if (args.includes('--bridge')) {
|
|
215
266
|
// Bridge mode: stdio with daemon proxy
|
|
216
267
|
const bridgeIdx = args.indexOf('--bridge');
|
|
@@ -218,11 +269,13 @@ async function main() {
|
|
|
218
269
|
// If next arg looks like a URL, use it; otherwise auto-detect
|
|
219
270
|
const explicitUrl = nextArg && nextArg.startsWith('http') ? nextArg : null;
|
|
220
271
|
const daemonUrl = explicitUrl || `http://127.0.0.1:${transportConfig.port || 4888}`;
|
|
272
|
+
const { BridgeAdapter } = await import('./transports/bridge.js');
|
|
221
273
|
const bridge = new BridgeAdapter(daemonUrl);
|
|
222
274
|
await bridge.start(kernel, transportConfig);
|
|
223
275
|
adapters.push(bridge);
|
|
224
276
|
}
|
|
225
277
|
else {
|
|
278
|
+
const { StdioAdapter } = await import('./transports/stdio.js');
|
|
226
279
|
const stdio = new StdioAdapter();
|
|
227
280
|
await stdio.start(kernel, transportConfig);
|
|
228
281
|
adapters.push(stdio);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAEA,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAC/E,SAAS;AACT,mEAAmE;AACnE,6EAA6E;AAC7E,0EAA0E;AAC1E,mEAAmE;AACnE,oFAAoF;AACpF,4EAA4E;AAC5E,wEAAwE;AACxE,2CAA2C;AAC3C,wCAAwC;AACxC,+EAA+E;AAE/E,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|