@pellux/goodvibes-sdk 0.18.12 → 0.18.14
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/dist/_internal/platform/agents/wrfc-workmap.js +1 -1
- package/dist/_internal/platform/automation/schedules.js +1 -1
- package/dist/_internal/platform/bookmarks/manager.d.ts +1 -1
- package/dist/_internal/platform/bookmarks/manager.js +1 -1
- package/dist/_internal/platform/config/schema-domain-core.js +1 -1
- package/dist/_internal/platform/config/schema-domain-runtime.js +1 -1
- package/dist/_internal/platform/discovery/mcp-scanner.js +5 -5
- package/dist/_internal/platform/discovery/scanner.js +1 -1
- package/dist/_internal/platform/intelligence/config.js +4 -4
- package/dist/_internal/platform/intelligence/facade.d.ts +1 -1
- package/dist/_internal/platform/intelligence/facade.js +2 -2
- package/dist/_internal/platform/profiles/manager.d.ts +1 -1
- package/dist/_internal/platform/profiles/manager.js +1 -1
- package/dist/_internal/platform/runtime/inspection/state-inspector.d.ts +2 -0
- package/dist/_internal/platform/runtime/inspection/state-inspector.d.ts.map +1 -0
- package/dist/_internal/platform/runtime/inspection/state-inspector.js +1 -0
- package/dist/_internal/platform/runtime/remote/distributed-runtime-manager.js +1 -1
- package/dist/_internal/platform/runtime/shell-paths.d.ts +0 -4
- package/dist/_internal/platform/runtime/shell-paths.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/shell-paths.js +0 -6
- package/dist/_internal/platform/scheduler/scheduler.d.ts +1 -1
- package/dist/_internal/platform/scheduler/scheduler.js +1 -1
- package/dist/_internal/platform/sessions/orchestration/registry.d.ts +2 -2
- package/dist/_internal/platform/sessions/orchestration/registry.js +3 -3
- package/dist/_internal/platform/tools/fetch/schema.d.ts +1 -1
- package/dist/_internal/platform/tools/fetch/schema.js +1 -1
- package/dist/_internal/platform/tools/packet/index.js +1 -1
- package/dist/_internal/platform/tools/query/index.js +1 -1
- package/dist/_internal/platform/tools/registry-tool/index.js +4 -4
- package/dist/_internal/platform/tools/registry-tool/skill-loader.js +2 -2
- package/dist/_internal/platform/tools/team/index.js +1 -1
- package/dist/_internal/platform/tools/worklist/index.js +1 -1
- package/dist/_internal/platform/watchers/store.js +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ import { summarizeError } from '../utils/error-display.js';
|
|
|
5
5
|
export class WrfcWorkmap {
|
|
6
6
|
filePath;
|
|
7
7
|
constructor(projectRoot, sessionId) {
|
|
8
|
-
this.filePath = join(projectRoot, '.goodvibes', '
|
|
8
|
+
this.filePath = join(projectRoot, '.goodvibes', 'tui', 'sessions', `${sessionId}_workmap.jsonl`);
|
|
9
9
|
}
|
|
10
10
|
dirCreated = false;
|
|
11
11
|
append(entry) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { TaskScheduler } from '../scheduler/scheduler.js';
|
|
3
3
|
const EVERY_PATTERN = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)$/;
|
|
4
|
-
const CRON_HELPER_STATE_PATH = '.goodvibes/
|
|
4
|
+
const CRON_HELPER_STATE_PATH = '.goodvibes/tui/.automation-cron-helper.json';
|
|
5
5
|
export const DEFAULT_TOP_OF_HOUR_STAGGER_MS = 5 * 60 * 1_000;
|
|
6
6
|
function createCronHelper() {
|
|
7
7
|
return new TaskScheduler(CRON_HELPER_STATE_PATH);
|
|
@@ -13,7 +13,7 @@ export interface BookmarkEntry {
|
|
|
13
13
|
* BookmarkManager - Tracks bookmarked blocks and saves block content to disk.
|
|
14
14
|
*
|
|
15
15
|
* Bookmarks are stored in memory for the session. Saved block content is
|
|
16
|
-
* written to ~/.goodvibes/
|
|
16
|
+
* written to ~/.goodvibes/tui/bookmarks/<timestamp>-<label>.txt.
|
|
17
17
|
*/
|
|
18
18
|
export declare class BookmarkManager {
|
|
19
19
|
private bookmarks;
|
|
@@ -5,7 +5,7 @@ import { logger } from '../utils/logger.js';
|
|
|
5
5
|
* BookmarkManager - Tracks bookmarked blocks and saves block content to disk.
|
|
6
6
|
*
|
|
7
7
|
* Bookmarks are stored in memory for the session. Saved block content is
|
|
8
|
-
* written to ~/.goodvibes/
|
|
8
|
+
* written to ~/.goodvibes/tui/bookmarks/<timestamp>-<label>.txt.
|
|
9
9
|
*/
|
|
10
10
|
export class BookmarkManager {
|
|
11
11
|
bookmarks = new Map();
|
|
@@ -528,7 +528,7 @@ export const coreTailConfigSettings = [
|
|
|
528
528
|
key: 'tools.hooksFile',
|
|
529
529
|
type: 'string',
|
|
530
530
|
default: 'hooks.json',
|
|
531
|
-
description: 'Hook configuration file name (relative to .goodvibes/
|
|
531
|
+
description: 'Hook configuration file name (relative to .goodvibes/tui/)',
|
|
532
532
|
},
|
|
533
533
|
{
|
|
534
534
|
key: 'wrfc.scoreThreshold',
|
|
@@ -309,7 +309,7 @@ export const runtimeSecondaryConfigSettings = [
|
|
|
309
309
|
key: 'service.logPath',
|
|
310
310
|
type: 'string',
|
|
311
311
|
default: '',
|
|
312
|
-
description: 'File path for daemon/service logs (empty = platform default under .goodvibes/
|
|
312
|
+
description: 'File path for daemon/service logs (empty = platform default under .goodvibes/tui/service/)',
|
|
313
313
|
},
|
|
314
314
|
{
|
|
315
315
|
key: 'network.outboundTls.mode',
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Scan locations (in order):
|
|
8
8
|
* 1. Project .mcp/ directory — looks for mcp.json or index.js/index.ts scripts
|
|
9
|
-
* 2. ~/.goodvibes/
|
|
9
|
+
* 2. ~/.goodvibes/tui/mcp/ — user-global MCP server definitions
|
|
10
10
|
* 3. Locally installed npx MCP packages (node_modules/.bin/@modelcontextprotocol/*)
|
|
11
11
|
*
|
|
12
12
|
* Returns suggested McpServerConfig[] for servers not already in the registry.
|
|
@@ -111,13 +111,13 @@ function scanProjectMcpDir(roots, knownNames) {
|
|
|
111
111
|
return suggestions;
|
|
112
112
|
}
|
|
113
113
|
/**
|
|
114
|
-
* Scan ~/.goodvibes/
|
|
114
|
+
* Scan ~/.goodvibes/tui/mcp/ for user-global server scripts.
|
|
115
115
|
* Looks for:
|
|
116
116
|
* - <name>/index.js, <name>/server.js, etc.
|
|
117
117
|
* - <name>.js, <name>.ts standalone scripts
|
|
118
118
|
*/
|
|
119
119
|
function scanGoodvibesMcpDir(roots, knownNames) {
|
|
120
|
-
const mcpDir = join(roots.homeDirectory, '.goodvibes', '
|
|
120
|
+
const mcpDir = join(roots.homeDirectory, '.goodvibes', 'tui', 'mcp');
|
|
121
121
|
if (!existsSync(mcpDir))
|
|
122
122
|
return [];
|
|
123
123
|
const suggestions = [];
|
|
@@ -157,7 +157,7 @@ function scanGoodvibesMcpDir(roots, knownNames) {
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
catch (err) {
|
|
160
|
-
logger.debug('[mcp-scanner] Failed to read ~/.goodvibes/
|
|
160
|
+
logger.debug('[mcp-scanner] Failed to read ~/.goodvibes/tui/mcp/', { error: summarizeError(err) });
|
|
161
161
|
}
|
|
162
162
|
return suggestions;
|
|
163
163
|
}
|
|
@@ -204,7 +204,7 @@ export async function scanMcpServers(roots, registeredNames = new Set()) {
|
|
|
204
204
|
// 1. Project .mcp/ directory
|
|
205
205
|
locationsScanned++;
|
|
206
206
|
addSuggestions(scanProjectMcpDir(roots, registeredNames));
|
|
207
|
-
// 2. ~/.goodvibes/
|
|
207
|
+
// 2. ~/.goodvibes/tui/mcp/ user-global directory
|
|
208
208
|
locationsScanned++;
|
|
209
209
|
addSuggestions(scanGoodvibesMcpDir(roots, registeredNames));
|
|
210
210
|
// 3. Locally installed npx MCP packages
|
|
@@ -4,7 +4,7 @@ import { join, dirname } from 'node:path';
|
|
|
4
4
|
import { logger } from '../utils/logger.js';
|
|
5
5
|
import { discoverContextWindows } from '../providers/context-discovery.js';
|
|
6
6
|
function getPersistedPath(roots) {
|
|
7
|
-
return join(roots.homeDirectory, '.goodvibes', '
|
|
7
|
+
return join(roots.homeDirectory, '.goodvibes', 'tui', 'discovered-providers.json');
|
|
8
8
|
}
|
|
9
9
|
/** Load previously discovered providers from disk. Returns empty array if file doesn't exist. */
|
|
10
10
|
export function loadPersistedProviders(roots) {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Per-language configuration for CodeIntelligence.
|
|
3
3
|
*
|
|
4
4
|
* Config is loaded from (in priority order, higher overrides lower):
|
|
5
|
-
* 1. .goodvibes/
|
|
6
|
-
* 2. ~/.goodvibes/
|
|
5
|
+
* 1. .goodvibes/tui/languages/{langId}.json (project-level)
|
|
6
|
+
* 2. ~/.goodvibes/tui/languages/{langId}.json (user-level)
|
|
7
7
|
* 3. Built-in defaults (this file)
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, readFileSync } from 'fs';
|
|
@@ -88,8 +88,8 @@ function readConfigFile(filePath) {
|
|
|
88
88
|
*/
|
|
89
89
|
export function loadLanguageConfigs(roots) {
|
|
90
90
|
const result = getDefaultConfigs();
|
|
91
|
-
const userDir = join(roots.homeDirectory, '.goodvibes', '
|
|
92
|
-
const projectDir = join(roots.workingDirectory, '.goodvibes', '
|
|
91
|
+
const userDir = join(roots.homeDirectory, '.goodvibes', 'tui', 'languages');
|
|
92
|
+
const projectDir = join(roots.workingDirectory, '.goodvibes', 'tui', 'languages');
|
|
93
93
|
// Collect all known language IDs (from defaults + scan would go here).
|
|
94
94
|
// For now we apply overrides only for IDs we already know about.
|
|
95
95
|
for (const [langId, defaultCfg] of result.entries()) {
|
|
@@ -32,7 +32,7 @@ export declare class CodeIntelligence {
|
|
|
32
32
|
/**
|
|
33
33
|
* Initialize all services. Call once at startup.
|
|
34
34
|
* Loads language configs and registers LSP server commands with LspService
|
|
35
|
-
* so that user/project overrides in .goodvibes/
|
|
35
|
+
* so that user/project overrides in .goodvibes/tui/languages/ are respected.
|
|
36
36
|
*/
|
|
37
37
|
initialize(): Promise<void>;
|
|
38
38
|
/** Shutdown all owned services for this facade instance. */
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - LSP is optional; falls back to tree-sitter where possible.
|
|
7
7
|
* - Tree-sitter is optional; falls back to empty arrays/null.
|
|
8
8
|
* - On initialization, language configs are read and registered with LspService
|
|
9
|
-
* so user/project overrides in .goodvibes/
|
|
9
|
+
* so user/project overrides in .goodvibes/tui/languages/*.json take effect.
|
|
10
10
|
*/
|
|
11
11
|
import { resolve } from 'path';
|
|
12
12
|
import { pathToFileURL, fileURLToPath } from 'url';
|
|
@@ -52,7 +52,7 @@ export class CodeIntelligence {
|
|
|
52
52
|
/**
|
|
53
53
|
* Initialize all services. Call once at startup.
|
|
54
54
|
* Loads language configs and registers LSP server commands with LspService
|
|
55
|
-
* so that user/project overrides in .goodvibes/
|
|
55
|
+
* so that user/project overrides in .goodvibes/tui/languages/ are respected.
|
|
56
56
|
*/
|
|
57
57
|
async initialize() {
|
|
58
58
|
if (!this.shellPaths) {
|
|
@@ -19,7 +19,7 @@ export interface ProfileInfo {
|
|
|
19
19
|
/**
|
|
20
20
|
* ProfileManager - Save and load named SDK host config profiles.
|
|
21
21
|
*
|
|
22
|
-
* Profiles are stored as JSON files in ~/.goodvibes/
|
|
22
|
+
* Profiles are stored as JSON files in ~/.goodvibes/tui/profiles/<name>.json.
|
|
23
23
|
* Only host-surface settings (display, provider, behavior categories) are saved;
|
|
24
24
|
* permissions and API keys are never included.
|
|
25
25
|
*/
|
|
@@ -5,7 +5,7 @@ import { summarizeError } from '../utils/error-display.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* ProfileManager - Save and load named SDK host config profiles.
|
|
7
7
|
*
|
|
8
|
-
* Profiles are stored as JSON files in ~/.goodvibes/
|
|
8
|
+
* Profiles are stored as JSON files in ~/.goodvibes/tui/profiles/<name>.json.
|
|
9
9
|
* Only host-surface settings (display, provider, behavior categories) are saved;
|
|
10
10
|
* permissions and API keys are never included.
|
|
11
11
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-inspector.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/inspection/state-inspector.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './state-inspector/index.js';
|
|
@@ -3,7 +3,7 @@ import { getDistributedNodeHostContract } from './distributed-runtime-contract.j
|
|
|
3
3
|
import { attachDistributedRuntime, getDistributedRuntimeSnapshot, listDistributedRuntimeAudit, listDistributedRuntimePairRequests, listDistributedRuntimePeers, listDistributedRuntimeWork, startDistributedRuntime, } from './distributed-runtime-store.js';
|
|
4
4
|
import { approveDistributedPairRequest, authenticateDistributedPeerToken, disconnectDistributedPeer, rejectDistributedPairRequest, requestDistributedPairing, revokeDistributedPeerToken, rotateDistributedPeerToken, verifyDistributedPairRequest, heartbeatDistributedPeer, } from './distributed-runtime-pairing.js';
|
|
5
5
|
import { cancelDistributedWork, claimDistributedWork, completeDistributedWork, enqueueDistributedWork, invokeDistributedPeer, } from './distributed-runtime-work.js';
|
|
6
|
-
const STORE_PATH = '.goodvibes/
|
|
6
|
+
const STORE_PATH = '.goodvibes/tui/remote/distributed-runtime.json';
|
|
7
7
|
export class DistributedRuntimeManager {
|
|
8
8
|
store;
|
|
9
9
|
pairRequests = new Map();
|
|
@@ -2,15 +2,11 @@ export interface ShellPathService {
|
|
|
2
2
|
readonly workingDirectory: string;
|
|
3
3
|
readonly homeDirectory: string;
|
|
4
4
|
readonly projectGoodVibesRoot: string;
|
|
5
|
-
readonly projectSdkRoot: string;
|
|
6
5
|
readonly userGoodVibesRoot: string;
|
|
7
|
-
readonly userSdkRoot: string;
|
|
8
6
|
expandHomePath(path: string): string;
|
|
9
7
|
resolveWorkspacePath(path: string): string;
|
|
10
8
|
resolveProjectPath(...segments: string[]): string;
|
|
11
|
-
resolveProjectSdkPath(...segments: string[]): string;
|
|
12
9
|
resolveUserPath(...segments: string[]): string;
|
|
13
|
-
resolveUserSdkPath(...segments: string[]): string;
|
|
14
10
|
isWithinWorkingDirectory(path: string): boolean;
|
|
15
11
|
}
|
|
16
12
|
export interface CreateShellPathServiceOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-paths.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/shell-paths.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"shell-paths.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/shell-paths.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,kBAAkB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClD,eAAe,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC/C,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAaD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,gBAAgB,CAoClB"}
|
|
@@ -13,9 +13,7 @@ export function createShellPathService(options) {
|
|
|
13
13
|
const workingDirectory = requireAbsoluteOwnedRoot(options.workingDirectory, 'workingDirectory');
|
|
14
14
|
const homeDirectory = requireAbsoluteOwnedRoot(options.homeDirectory, 'homeDirectory');
|
|
15
15
|
const projectGoodVibesRoot = join(workingDirectory, '.goodvibes');
|
|
16
|
-
const projectSdkRoot = join(projectGoodVibesRoot, 'sdk');
|
|
17
16
|
const userGoodVibesRoot = join(homeDirectory, '.goodvibes');
|
|
18
|
-
const userSdkRoot = join(userGoodVibesRoot, 'sdk');
|
|
19
17
|
const expandHomePath = (path) => {
|
|
20
18
|
if (path === '~')
|
|
21
19
|
return homeDirectory;
|
|
@@ -37,15 +35,11 @@ export function createShellPathService(options) {
|
|
|
37
35
|
workingDirectory,
|
|
38
36
|
homeDirectory,
|
|
39
37
|
projectGoodVibesRoot,
|
|
40
|
-
projectSdkRoot,
|
|
41
38
|
userGoodVibesRoot,
|
|
42
|
-
userSdkRoot,
|
|
43
39
|
expandHomePath,
|
|
44
40
|
resolveWorkspacePath,
|
|
45
41
|
resolveProjectPath: (...segments) => join(projectGoodVibesRoot, ...segments),
|
|
46
|
-
resolveProjectSdkPath: (...segments) => join(projectSdkRoot, ...segments),
|
|
47
42
|
resolveUserPath: (...segments) => join(userGoodVibesRoot, ...segments),
|
|
48
|
-
resolveUserSdkPath: (...segments) => join(userSdkRoot, ...segments),
|
|
49
43
|
isWithinWorkingDirectory,
|
|
50
44
|
};
|
|
51
45
|
}
|
|
@@ -31,7 +31,7 @@ interface TaskSchedulerConfig {
|
|
|
31
31
|
/**
|
|
32
32
|
* TaskScheduler — cron-like task scheduler that runs inside the daemon.
|
|
33
33
|
*
|
|
34
|
-
* Tasks persist to disk (`.goodvibes/
|
|
34
|
+
* Tasks persist to disk (`.goodvibes/tui/schedules.json`) and survive restarts.
|
|
35
35
|
* Task execution requires an explicit spawnTask callback so runs stay owned by the caller.
|
|
36
36
|
*/
|
|
37
37
|
export declare class TaskScheduler {
|
|
@@ -316,7 +316,7 @@ function countMissedRuns(expr, fromMs, toMs, timezone) {
|
|
|
316
316
|
/**
|
|
317
317
|
* TaskScheduler — cron-like task scheduler that runs inside the daemon.
|
|
318
318
|
*
|
|
319
|
-
* Tasks persist to disk (`.goodvibes/
|
|
319
|
+
* Tasks persist to disk (`.goodvibes/tui/schedules.json`) and survive restarts.
|
|
320
320
|
* Task execution requires an explicit spawnTask callback so runs stay owned by the caller.
|
|
321
321
|
*/
|
|
322
322
|
export class TaskScheduler {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Multi-session Orchestration — Cross-Session Task Registry
|
|
3
3
|
*
|
|
4
4
|
* Wraps SessionTaskGraph with persistence to
|
|
5
|
-
* `.goodvibes/
|
|
5
|
+
* `.goodvibes/tui/sessions/task-graph.json` and reconnect/resume hydration.
|
|
6
6
|
*
|
|
7
7
|
* The registry is the single authoritative source for the cross-session task
|
|
8
8
|
* graph within a process. Command handlers and sync integrations receive an
|
|
@@ -28,7 +28,7 @@ export declare class CrossSessionTaskRegistry {
|
|
|
28
28
|
_exitHandler: (() => void) | null;
|
|
29
29
|
/**
|
|
30
30
|
* @param baseDir - Project base directory.
|
|
31
|
-
* The graph is persisted at `<baseDir>/.goodvibes/
|
|
31
|
+
* The graph is persisted at `<baseDir>/.goodvibes/tui/sessions/task-graph.json`.
|
|
32
32
|
*/
|
|
33
33
|
constructor(baseDir: string);
|
|
34
34
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Multi-session Orchestration — Cross-Session Task Registry
|
|
3
3
|
*
|
|
4
4
|
* Wraps SessionTaskGraph with persistence to
|
|
5
|
-
* `.goodvibes/
|
|
5
|
+
* `.goodvibes/tui/sessions/task-graph.json` and reconnect/resume hydration.
|
|
6
6
|
*
|
|
7
7
|
* The registry is the single authoritative source for the cross-session task
|
|
8
8
|
* graph within a process. Command handlers and sync integrations receive an
|
|
@@ -36,10 +36,10 @@ export class CrossSessionTaskRegistry {
|
|
|
36
36
|
_exitHandler = null;
|
|
37
37
|
/**
|
|
38
38
|
* @param baseDir - Project base directory.
|
|
39
|
-
* The graph is persisted at `<baseDir>/.goodvibes/
|
|
39
|
+
* The graph is persisted at `<baseDir>/.goodvibes/tui/sessions/task-graph.json`.
|
|
40
40
|
*/
|
|
41
41
|
constructor(baseDir) {
|
|
42
|
-
this._dir = join(baseDir, '.goodvibes', '
|
|
42
|
+
this._dir = join(baseDir, '.goodvibes', 'tui', 'sessions');
|
|
43
43
|
this._graphPath = join(this._dir, 'task-graph.json');
|
|
44
44
|
this._graph = new SessionTaskGraph();
|
|
45
45
|
this._load();
|
|
@@ -84,7 +84,7 @@ export declare const FETCH_TOOL_SCHEMA: {
|
|
|
84
84
|
};
|
|
85
85
|
readonly service: {
|
|
86
86
|
readonly type: "string";
|
|
87
|
-
readonly description: "Named service for automatic credential lookup from the service registry. Services are configured in .goodvibes/
|
|
87
|
+
readonly description: "Named service for automatic credential lookup from the service registry. Services are configured in .goodvibes/tui/services.json. Use the registry tool or check .goodvibes/tui/services.json to discover available service names.";
|
|
88
88
|
};
|
|
89
89
|
readonly auth: {
|
|
90
90
|
readonly type: "object";
|
|
@@ -90,7 +90,7 @@ export const FETCH_TOOL_SCHEMA = {
|
|
|
90
90
|
},
|
|
91
91
|
service: {
|
|
92
92
|
type: 'string',
|
|
93
|
-
description: 'Named service for automatic credential lookup from the service registry. Services are configured in .goodvibes/
|
|
93
|
+
description: 'Named service for automatic credential lookup from the service registry. Services are configured in .goodvibes/tui/services.json. Use the registry tool or check .goodvibes/tui/services.json to discover available service names.',
|
|
94
94
|
},
|
|
95
95
|
auth: {
|
|
96
96
|
type: 'object',
|
|
@@ -18,7 +18,7 @@ function summarizePacket(record) {
|
|
|
18
18
|
}
|
|
19
19
|
export function createPacketTool(workingDirectory) {
|
|
20
20
|
const workspaceRoot = resolve(workingDirectory);
|
|
21
|
-
const packetsDir = join(workspaceRoot, '.goodvibes', '
|
|
21
|
+
const packetsDir = join(workspaceRoot, '.goodvibes', 'tui');
|
|
22
22
|
const packetsPath = join(packetsDir, 'packets.json');
|
|
23
23
|
function loadPackets() {
|
|
24
24
|
try {
|
|
@@ -16,7 +16,7 @@ function summarizeQuery(record) {
|
|
|
16
16
|
}
|
|
17
17
|
export function createQueryTool(workingDirectory) {
|
|
18
18
|
const workspaceRoot = resolve(workingDirectory);
|
|
19
|
-
const queriesDir = join(workspaceRoot, '.goodvibes', '
|
|
19
|
+
const queriesDir = join(workspaceRoot, '.goodvibes', 'tui');
|
|
20
20
|
const queriesPath = join(queriesDir, 'queries.json');
|
|
21
21
|
function loadQueries() {
|
|
22
22
|
try {
|
|
@@ -114,20 +114,20 @@ function fuzzyFilter(items, query) {
|
|
|
114
114
|
function getSkillDirs(roots) {
|
|
115
115
|
const dirs = [
|
|
116
116
|
join(roots.workingDirectory, '.goodvibes', 'skills'),
|
|
117
|
-
join(roots.workingDirectory, '.goodvibes', '
|
|
117
|
+
join(roots.workingDirectory, '.goodvibes', 'tui', 'skills'),
|
|
118
118
|
];
|
|
119
119
|
if (roots.homeDirectory) {
|
|
120
|
-
dirs.push(join(roots.homeDirectory, '.goodvibes', 'skills'), join(roots.homeDirectory, '.goodvibes', '
|
|
120
|
+
dirs.push(join(roots.homeDirectory, '.goodvibes', 'skills'), join(roots.homeDirectory, '.goodvibes', 'tui', 'skills'));
|
|
121
121
|
}
|
|
122
122
|
return dirs;
|
|
123
123
|
}
|
|
124
124
|
function getAgentDirs(roots) {
|
|
125
125
|
const dirs = [
|
|
126
126
|
join(roots.workingDirectory, '.goodvibes', 'agents'),
|
|
127
|
-
join(roots.workingDirectory, '.goodvibes', '
|
|
127
|
+
join(roots.workingDirectory, '.goodvibes', 'tui', 'agents'),
|
|
128
128
|
];
|
|
129
129
|
if (roots.homeDirectory) {
|
|
130
|
-
dirs.push(join(roots.homeDirectory, '.goodvibes', 'agents'), join(roots.homeDirectory, '.goodvibes', '
|
|
130
|
+
dirs.push(join(roots.homeDirectory, '.goodvibes', 'agents'), join(roots.homeDirectory, '.goodvibes', 'tui', 'agents'));
|
|
131
131
|
}
|
|
132
132
|
return dirs;
|
|
133
133
|
}
|
|
@@ -10,10 +10,10 @@ import { materializeMarkdownBody, parseMarkdownFrontmatter, normalizeFrontmatter
|
|
|
10
10
|
function getSkillDirs(roots) {
|
|
11
11
|
const dirs = [
|
|
12
12
|
join(roots.workingDirectory, '.goodvibes', 'skills'),
|
|
13
|
-
join(roots.workingDirectory, '.goodvibes', '
|
|
13
|
+
join(roots.workingDirectory, '.goodvibes', 'tui', 'skills'),
|
|
14
14
|
];
|
|
15
15
|
if (roots.homeDirectory) {
|
|
16
|
-
dirs.push(join(roots.homeDirectory, '.goodvibes', 'skills'), join(roots.homeDirectory, '.goodvibes', '
|
|
16
|
+
dirs.push(join(roots.homeDirectory, '.goodvibes', 'skills'), join(roots.homeDirectory, '.goodvibes', 'tui', 'skills'));
|
|
17
17
|
}
|
|
18
18
|
return dirs;
|
|
19
19
|
}
|
|
@@ -13,7 +13,7 @@ function summarizeTeam(team) {
|
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
15
|
function teamsPath(storageRoot) {
|
|
16
|
-
return join(storageRoot, '.goodvibes', '
|
|
16
|
+
return join(storageRoot, '.goodvibes', 'tui', 'teams.json');
|
|
17
17
|
}
|
|
18
18
|
function loadTeams(storageRoot) {
|
|
19
19
|
const path = teamsPath(storageRoot);
|
|
@@ -15,7 +15,7 @@ function summarizeWorklist(record) {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
function worklistsPath(storageRoot) {
|
|
18
|
-
return join(storageRoot, '.goodvibes', '
|
|
18
|
+
return join(storageRoot, '.goodvibes', 'tui', 'worklists.json');
|
|
19
19
|
}
|
|
20
20
|
function loadWorklists(storageRoot) {
|
|
21
21
|
const path = worklistsPath(storageRoot);
|
|
@@ -4,7 +4,7 @@ function sortWatchers(watchers) {
|
|
|
4
4
|
return [...watchers].sort((a, b) => a.label.localeCompare(b.label) || a.id.localeCompare(b.id));
|
|
5
5
|
}
|
|
6
6
|
export function getWatcherStorePath(rootPath) {
|
|
7
|
-
return join(rootPath, '.goodvibes', '
|
|
7
|
+
return join(rootPath, '.goodvibes', 'tui', 'watchers.json');
|
|
8
8
|
}
|
|
9
9
|
export function resolveWatcherStorePath(storePath) {
|
|
10
10
|
if (!storePath) {
|
package/package.json
CHANGED