@pellux/goodvibes-sdk 0.18.17 → 0.18.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/_internal/platform/agents/orchestrator-runner.d.ts +5 -4
  2. package/dist/_internal/platform/agents/orchestrator-runner.d.ts.map +1 -1
  3. package/dist/_internal/platform/agents/orchestrator-runner.js +9 -8
  4. package/dist/_internal/platform/agents/orchestrator.d.ts.map +1 -1
  5. package/dist/_internal/platform/agents/orchestrator.js +1 -0
  6. package/dist/_internal/platform/agents/wrfc-controller.d.ts +2 -1
  7. package/dist/_internal/platform/agents/wrfc-controller.d.ts.map +1 -1
  8. package/dist/_internal/platform/agents/wrfc-controller.js +6 -6
  9. package/dist/_internal/platform/agents/wrfc-workmap.d.ts +4 -1
  10. package/dist/_internal/platform/agents/wrfc-workmap.d.ts.map +1 -1
  11. package/dist/_internal/platform/agents/wrfc-workmap.js +4 -2
  12. package/dist/_internal/platform/automation/schedules.js +1 -1
  13. package/dist/_internal/platform/bookmarks/manager.d.ts +1 -1
  14. package/dist/_internal/platform/bookmarks/manager.js +1 -1
  15. package/dist/_internal/platform/config/schema-domain-core.js +1 -1
  16. package/dist/_internal/platform/config/schema-domain-runtime.js +1 -1
  17. package/dist/_internal/platform/config/service-registry.d.ts +1 -1
  18. package/dist/_internal/platform/config/service-registry.js +1 -1
  19. package/dist/_internal/platform/config/subscription-providers.js +1 -1
  20. package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
  21. package/dist/_internal/platform/daemon/facade-composition.js +4 -0
  22. package/dist/_internal/platform/daemon/service-manager.d.ts +8 -0
  23. package/dist/_internal/platform/daemon/service-manager.d.ts.map +1 -1
  24. package/dist/_internal/platform/daemon/service-manager.js +41 -27
  25. package/dist/_internal/platform/input/keybindings.d.ts +2 -1
  26. package/dist/_internal/platform/input/keybindings.d.ts.map +1 -1
  27. package/dist/_internal/platform/input/keybindings.js +2 -1
  28. package/dist/_internal/platform/intelligence/config.d.ts +1 -1
  29. package/dist/_internal/platform/intelligence/config.d.ts.map +1 -1
  30. package/dist/_internal/platform/intelligence/config.js +8 -4
  31. package/dist/_internal/platform/intelligence/facade.d.ts +1 -1
  32. package/dist/_internal/platform/intelligence/facade.js +2 -2
  33. package/dist/_internal/platform/profiles/manager.d.ts +1 -1
  34. package/dist/_internal/platform/profiles/manager.js +1 -1
  35. package/dist/_internal/platform/providers/anthropic-compat.d.ts +1 -1
  36. package/dist/_internal/platform/providers/anthropic-compat.js +1 -1
  37. package/dist/_internal/platform/providers/custom-loader.d.ts +1 -1
  38. package/dist/_internal/platform/providers/registry.d.ts +2 -2
  39. package/dist/_internal/platform/providers/registry.js +2 -2
  40. package/dist/_internal/platform/runtime/ecosystem/catalog.js +6 -6
  41. package/dist/_internal/platform/runtime/services.d.ts.map +1 -1
  42. package/dist/_internal/platform/runtime/services.js +3 -2
  43. package/dist/_internal/platform/runtime/session-persistence.d.ts +1 -0
  44. package/dist/_internal/platform/runtime/session-persistence.d.ts.map +1 -1
  45. package/dist/_internal/platform/runtime/session-persistence.js +4 -4
  46. package/dist/_internal/platform/runtime/surface-root.d.ts +2 -0
  47. package/dist/_internal/platform/runtime/surface-root.d.ts.map +1 -1
  48. package/dist/_internal/platform/runtime/surface-root.js +8 -0
  49. package/dist/_internal/platform/runtime/worktree/registry.d.ts +5 -1
  50. package/dist/_internal/platform/runtime/worktree/registry.d.ts.map +1 -1
  51. package/dist/_internal/platform/runtime/worktree/registry.js +20 -17
  52. package/dist/_internal/platform/scheduler/scheduler.d.ts +1 -1
  53. package/dist/_internal/platform/scheduler/scheduler.js +1 -1
  54. package/dist/_internal/platform/sessions/manager.d.ts +5 -2
  55. package/dist/_internal/platform/sessions/manager.d.ts.map +1 -1
  56. package/dist/_internal/platform/sessions/manager.js +4 -3
  57. package/dist/_internal/platform/tools/fetch/schema.d.ts +1 -1
  58. package/dist/_internal/platform/tools/fetch/schema.js +1 -1
  59. package/dist/_internal/platform/tools/index.js +6 -6
  60. package/dist/_internal/platform/tools/packet/index.d.ts +4 -1
  61. package/dist/_internal/platform/tools/packet/index.d.ts.map +1 -1
  62. package/dist/_internal/platform/tools/packet/index.js +5 -2
  63. package/dist/_internal/platform/tools/query/index.d.ts +4 -1
  64. package/dist/_internal/platform/tools/query/index.d.ts.map +1 -1
  65. package/dist/_internal/platform/tools/query/index.js +5 -2
  66. package/dist/_internal/platform/tools/registry-tool/index.d.ts.map +1 -1
  67. package/dist/_internal/platform/tools/registry-tool/index.js +2 -4
  68. package/dist/_internal/platform/tools/registry-tool/skill-loader.d.ts.map +1 -1
  69. package/dist/_internal/platform/tools/registry-tool/skill-loader.js +1 -2
  70. package/dist/_internal/platform/tools/team/index.d.ts +3 -0
  71. package/dist/_internal/platform/tools/team/index.d.ts.map +1 -1
  72. package/dist/_internal/platform/tools/team/index.js +124 -119
  73. package/dist/_internal/platform/tools/worklist/index.d.ts +3 -0
  74. package/dist/_internal/platform/tools/worklist/index.d.ts.map +1 -1
  75. package/dist/_internal/platform/tools/worklist/index.js +108 -103
  76. package/dist/_internal/platform/watchers/store.d.ts.map +1 -1
  77. package/dist/_internal/platform/watchers/store.js +3 -2
  78. package/package.json +1 -1
@@ -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/goodvibes/languages/{langId}.json (project-level)
6
- * 2. ~/.goodvibes/goodvibes/languages/{langId}.json (user-level)
5
+ * 1. configured project languages/{langId}.json path
6
+ * 2. configured user languages/{langId}.json path
7
7
  * 3. Built-in defaults (this file)
8
8
  */
9
9
  import { existsSync, readFileSync } from 'fs';
@@ -88,8 +88,12 @@ function readConfigFile(filePath) {
88
88
  */
89
89
  export function loadLanguageConfigs(roots) {
90
90
  const result = getDefaultConfigs();
91
- const userDir = join(roots.homeDirectory, '.goodvibes', 'goodvibes', 'languages');
92
- const projectDir = join(roots.workingDirectory, '.goodvibes', 'goodvibes', 'languages');
91
+ const userDir = roots.resolveUserPath
92
+ ? roots.resolveUserPath('languages')
93
+ : join(roots.homeDirectory, '.goodvibes', 'languages');
94
+ const projectDir = roots.resolveProjectPath
95
+ ? roots.resolveProjectPath('languages')
96
+ : join(roots.workingDirectory, '.goodvibes', 'languages');
93
97
  // Collect all known language IDs (from defaults + scan would go here).
94
98
  // For now we apply overrides only for IDs we already know about.
95
99
  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/goodvibes/languages/ are respected.
35
+ * so that user/project overrides in the configured languages directory 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/goodvibes/languages/*.json take effect.
9
+ * so user/project overrides in the configured languages directory 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/goodvibes/languages/ are respected.
55
+ * so that user/project overrides in the configured languages directory 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/goodvibes/profiles/<name>.json.
22
+ * Profiles are stored as JSON files in the configured profile directory.
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/goodvibes/profiles/<name>.json.
8
+ * Profiles are stored as JSON files in the configured profile directory.
9
9
  * Only host-surface settings (display, provider, behavior categories) are saved;
10
10
  * permissions and API keys are never included.
11
11
  */
@@ -36,7 +36,7 @@ export interface AnthropicCompatOptions {
36
36
  * Anthropic Messages API spec.
37
37
  *
38
38
  * Configured via a custom provider JSON file with `"type": "anthropic-compat"`
39
- * in ~/.goodvibes/goodvibes/providers/.
39
+ * in the configured providers directory.
40
40
  */
41
41
  export declare class AnthropicCompatProvider implements LLMProvider {
42
42
  readonly name: string;
@@ -12,7 +12,7 @@ const ANTHROPIC_API_VERSION = '2023-06-01';
12
12
  * Anthropic Messages API spec.
13
13
  *
14
14
  * Configured via a custom provider JSON file with `"type": "anthropic-compat"`
15
- * in ~/.goodvibes/goodvibes/providers/.
15
+ * in the configured providers directory.
16
16
  */
17
17
  export class AnthropicCompatProvider {
18
18
  name;
@@ -4,7 +4,7 @@ import type { ModelDefinition } from './registry.js';
4
4
  import { LocalContextIngestionService } from '@pellux/goodvibes-sdk/platform/providers/local-context-ingestion';
5
5
  /**
6
6
  * JSON schema for a custom provider configuration file.
7
- * Place a *.json file in ~/.goodvibes/goodvibes/providers/ to define a custom provider.
7
+ * Place a *.json file in the configured providers directory to define a custom provider.
8
8
  */
9
9
  export interface CustomProviderConfig {
10
10
  /** Unique provider identifier, e.g. 'ollama' */
@@ -112,7 +112,7 @@ export declare class ProviderRegistry {
112
112
  /** Switch to a different model. Accepts registryKey or plain modelId. Throws if not selectable. */
113
113
  setCurrentModel(modelId: string): void;
114
114
  /**
115
- * Load custom providers from ~/.goodvibes/goodvibes/providers/ and merge them
115
+ * Load custom providers from the configured providers directory and merge them
116
116
  * into the live model registry. Returns any warnings collected during loading.
117
117
  * Call this after construction to populate custom providers.
118
118
  */
@@ -123,7 +123,7 @@ export declare class ProviderRegistry {
123
123
  updated: string[];
124
124
  }>;
125
125
  /**
126
- * Start watching ~/.goodvibes/goodvibes/providers/ for file changes.
126
+ * Start watching the configured providers directory for file changes.
127
127
  * On change, reloads custom providers and emits typed provider runtime events.
128
128
  * Safe to call multiple times — stops the previous watcher first.
129
129
  */
@@ -403,7 +403,7 @@ export class ProviderRegistry {
403
403
  this.currentModelId = def.registryKey ?? modelId;
404
404
  }
405
405
  /**
406
- * Load custom providers from ~/.goodvibes/goodvibes/providers/ and merge them
406
+ * Load custom providers from the configured providers directory and merge them
407
407
  * into the live model registry. Returns any warnings collected during loading.
408
408
  * Call this after construction to populate custom providers.
409
409
  */
@@ -453,7 +453,7 @@ export class ProviderRegistry {
453
453
  return { warnings: result.warnings, added, removed, updated };
454
454
  }
455
455
  /**
456
- * Start watching ~/.goodvibes/goodvibes/providers/ for file changes.
456
+ * Start watching the configured providers directory for file changes.
457
457
  * On change, reloads custom providers and emits typed provider runtime events.
458
458
  * Safe to call multiple times — stops the previous watcher first.
459
459
  */
@@ -4,13 +4,13 @@ import { dirname, join, resolve } from 'node:path';
4
4
  import { VERSION } from '../../version.js';
5
5
  function catalogPath(kind, cwd, homeDir, scope) {
6
6
  return scope === 'project'
7
- ? join(cwd, '.goodvibes', 'goodvibes', 'ecosystem', `${kind}s.json`)
8
- : join(homeDir, '.goodvibes', 'goodvibes', 'ecosystem', `${kind}s.json`);
7
+ ? join(cwd, '.goodvibes', 'ecosystem', `${kind}s.json`)
8
+ : join(homeDir, '.goodvibes', 'ecosystem', `${kind}s.json`);
9
9
  }
10
10
  function catalogPaths(kind, cwd, homeDir) {
11
11
  return [
12
- join(cwd, '.goodvibes', 'goodvibes', 'ecosystem', `${kind}s.json`),
13
- join(homeDir, '.goodvibes', 'goodvibes', 'ecosystem', `${kind}s.json`),
12
+ join(cwd, '.goodvibes', 'ecosystem', `${kind}s.json`),
13
+ join(homeDir, '.goodvibes', 'ecosystem', `${kind}s.json`),
14
14
  ];
15
15
  }
16
16
  function installedRoot(kind, cwd, homeDir, scope) {
@@ -30,8 +30,8 @@ function installedRoot(kind, cwd, homeDir, scope) {
30
30
  }
31
31
  function installedReceiptsRoot(cwd, homeDir, scope) {
32
32
  return scope === 'project'
33
- ? join(cwd, '.goodvibes', 'goodvibes', 'ecosystem', 'installed')
34
- : join(homeDir, '.goodvibes', 'goodvibes', 'ecosystem', 'installed');
33
+ ? join(cwd, '.goodvibes', 'ecosystem', 'installed')
34
+ : join(homeDir, '.goodvibes', 'ecosystem', 'installed');
35
35
  }
36
36
  function receiptPath(kind, entryId, cwd, homeDir, scope) {
37
37
  const base = installedReceiptsRoot(cwd, homeDir, scope);
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/services.ts"],"names":[],"mappings":"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"}
@@ -134,7 +134,7 @@ export function createRuntimeServices(options) {
134
134
  });
135
135
  const profileManager = new ProfileManager(shellPaths.resolveUserPath(surfaceRoot, 'profiles'));
136
136
  const bookmarkManager = new BookmarkManager(shellPaths.resolveUserPath(surfaceRoot, 'bookmarks'));
137
- const sessionManager = new SessionManager(workingDirectory);
137
+ const sessionManager = new SessionManager(workingDirectory, { surfaceRoot });
138
138
  const sessionOrchestration = new CrossSessionTaskRegistry(shellPaths.resolveProjectPath(surfaceRoot, 'sessions', 'task-graph.json'));
139
139
  const hookActivityTracker = new HookActivityTracker();
140
140
  const watcherRegistry = new WatcherRegistry({
@@ -162,6 +162,7 @@ export function createRuntimeServices(options) {
162
162
  agentManager,
163
163
  configManager,
164
164
  projectRoot: workingDirectory,
165
+ surfaceRoot,
165
166
  });
166
167
  agentManager.setWrfcController(wrfcController);
167
168
  const hookDispatcher = new HookDispatcher({ agentManager, toolLLM, projectRoot: workingDirectory }, hookActivityTracker);
@@ -289,7 +290,7 @@ export function createRuntimeServices(options) {
289
290
  mcpRegistry.setSandboxRuntime(configManager, sandboxSessionRegistry);
290
291
  const tokenAuditor = new ApiTokenAuditor({ managed: false });
291
292
  const panelHealthMonitor = new PanelHealthMonitor();
292
- const worktreeRegistry = new WorktreeRegistry(workingDirectory);
293
+ const worktreeRegistry = new WorktreeRegistry(workingDirectory, { surfaceRoot });
293
294
  const webhookNotifier = new WebhookNotifier();
294
295
  const replayEngine = new DeterministicReplayEngine(workingDirectory);
295
296
  const providerOptimizer = new ProviderOptimizer(providerRegistry, providerCapabilityRegistry, false);
@@ -18,6 +18,7 @@ export type SessionPersistenceOptions = {
18
18
  workingDirectory?: string;
19
19
  homeDirectory?: string;
20
20
  sessionManager?: SessionManager;
21
+ surfaceRoot?: string;
21
22
  };
22
23
  export type SessionPersistencePaths = {
23
24
  readonly workingDirectory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session-persistence.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/session-persistence.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAoB,MAAM,wBAAwB,CAAC;AAE1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKvE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAgCF,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAeN;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAGN;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAapG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,IAAI,CAWzF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,eAAe,GAAG,IAAI,CAYhG;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAK,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CA2BN;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAO5E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,gBAAgB,GAAG,IAAI,CAmC9F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,eAAe,GAAG,IAAI,CA6CpG"}
1
+ {"version":3,"file":"session-persistence.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/session-persistence.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAoB,MAAM,wBAAwB,CAAC;AAE1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAgCF,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAeN;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CAGN;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAapG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,IAAI,CAWzF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,eAAe,GAAG,IAAI,CAYhG;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAK,EACV,OAAO,CAAC,EAAE,yBAAyB,GAClC,IAAI,CA2BN;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAO5E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,gBAAgB,GAAG,IAAI,CAmC9F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,eAAe,GAAG,IAAI,CA6CpG"}
@@ -4,7 +4,7 @@ import { dirname, join } from 'path';
4
4
  import { SessionManager } from '../sessions/manager.js';
5
5
  import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
6
6
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
7
- const SESSION_ROOT = 'goodvibes';
7
+ import { resolveScopedDirectory } from './surface-root.js';
8
8
  function requireWorkingDirectory(options) {
9
9
  const workingDirectory = options?.workingDirectory;
10
10
  if (!workingDirectory) {
@@ -29,16 +29,16 @@ function resolveSessionManager(options) {
29
29
  if (options?.sessionManager) {
30
30
  return options.sessionManager;
31
31
  }
32
- return new SessionManager(requireWorkingDirectory(options));
32
+ return new SessionManager(requireWorkingDirectory(options), { surfaceRoot: options?.surfaceRoot });
33
33
  }
34
34
  export function getUserSessionsDir(workingDirectory) {
35
- return join(workingDirectory, '.goodvibes', SESSION_ROOT, 'sessions');
35
+ return resolveScopedDirectory(workingDirectory, undefined, 'sessions');
36
36
  }
37
37
  export function getLastSessionPointerPath(workingDirectory) {
38
38
  return join(getUserSessionsDir(workingDirectory), 'last-session.json');
39
39
  }
40
40
  export function getRecoveryFilePath(homeDirectory) {
41
- return join(homeDirectory, '.goodvibes', SESSION_ROOT, 'recovery.jsonl');
41
+ return resolveScopedDirectory(homeDirectory, undefined, 'recovery.jsonl');
42
42
  }
43
43
  export function generateUserSessionId() {
44
44
  return randomBytes(4).toString('hex');
@@ -1,4 +1,6 @@
1
1
  export declare function requireSurfaceRoot(surfaceRoot: string, source?: string): string;
2
2
  export declare function resolveSurfaceDirectory(baseDirectory: string, surfaceRoot: string, ...segments: string[]): string;
3
3
  export declare function resolveSurfaceSharedFile(baseDirectory: string, surfaceRoot: string, extension?: string): string;
4
+ export declare function resolveSharedDirectory(baseDirectory: string, ...segments: string[]): string;
5
+ export declare function resolveScopedDirectory(baseDirectory: string, surfaceRoot: string | undefined, ...segments: string[]): string;
4
6
  //# sourceMappingURL=surface-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"surface-root.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/surface-root.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,SAAgB,GAAG,MAAM,CAMtF;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEjH;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,MAAM,CAE/G"}
1
+ {"version":3,"file":"surface-root.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/runtime/surface-root.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,SAAgB,GAAG,MAAM,CAMtF;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEjH;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,MAAM,CAE/G;AAED,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAE3F;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,QAAQ,EAAE,MAAM,EAAE,GACpB,MAAM,CAIR"}
@@ -12,3 +12,11 @@ export function resolveSurfaceDirectory(baseDirectory, surfaceRoot, ...segments)
12
12
  export function resolveSurfaceSharedFile(baseDirectory, surfaceRoot, extension = 'json') {
13
13
  return join(baseDirectory, '.goodvibes', `${requireSurfaceRoot(surfaceRoot)}.${extension}`);
14
14
  }
15
+ export function resolveSharedDirectory(baseDirectory, ...segments) {
16
+ return join(baseDirectory, '.goodvibes', ...segments);
17
+ }
18
+ export function resolveScopedDirectory(baseDirectory, surfaceRoot, ...segments) {
19
+ return surfaceRoot && surfaceRoot.trim().length > 0
20
+ ? resolveSurfaceDirectory(baseDirectory, surfaceRoot, ...segments)
21
+ : resolveSharedDirectory(baseDirectory, ...segments);
22
+ }
@@ -39,6 +39,7 @@ export interface WorktreeAttachmentReview {
39
39
  }
40
40
  export interface WorktreeRegistryPaths {
41
41
  readonly workingDirectory: string;
42
+ readonly surfaceRoot?: string;
42
43
  }
43
44
  export declare function listPersistedWorktreeMeta(options: WorktreeRegistryPaths): ManagedWorktreeMeta[];
44
45
  export declare function getPersistedWorktreeMeta(path: string, options: WorktreeRegistryPaths): ManagedWorktreeMeta | null;
@@ -47,7 +48,10 @@ export declare function summarizeWorktreeOwnership(records: readonly ManagedWork
47
48
  export declare class WorktreeRegistry {
48
49
  private readonly git;
49
50
  private readonly workingDirectory;
50
- constructor(workingDirectory: string);
51
+ private readonly surfaceRoot?;
52
+ constructor(workingDirectory: string, options?: {
53
+ readonly surfaceRoot?: string;
54
+ });
51
55
  list(): Promise<WorktreeStatusRecord[]>;
52
56
  attach(path: string, target: {
53
57
  sessionId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/worktree/registry.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAChG,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAOD,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAsBD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,qBAAqB,GAAG,mBAAmB,EAAE,CAE/F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,mBAAmB,GAAG,IAAI,CAGjH;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,SAAS,GAAG,MAAM,EAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,qBAAqB,GAC7B,wBAAwB,CAwB1B;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,GAAG,wBAAwB,CA0B5G;AAoBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAEvB,gBAAgB,EAAE,MAAM;IAK9B,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAuC7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiB3E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAiBnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOlD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/runtime/worktree/registry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { dirname, isAbsolute, join, resolve } from 'node:path';
3
3
  import { GitService } from '../../git/service.js';
4
- function getStorePath(workingDirectory) {
5
- return join(workingDirectory, '.goodvibes', 'goodvibes', 'worktrees.json');
4
+ import { resolveScopedDirectory } from '../surface-root.js';
5
+ function getStorePath(workingDirectory, surfaceRoot) {
6
+ return resolveScopedDirectory(workingDirectory, surfaceRoot, 'worktrees.json');
6
7
  }
7
8
  function defaultStore() {
8
9
  return { version: 1, records: {} };
@@ -10,20 +11,21 @@ function defaultStore() {
10
11
  function normalizePath(path, workingDirectory) {
11
12
  return resolve(workingDirectory, path);
12
13
  }
13
- function readStore(workingDirectory) {
14
+ function readStore(storePath) {
14
15
  try {
15
- return JSON.parse(readFileSync(getStorePath(workingDirectory), 'utf-8'));
16
+ return JSON.parse(readFileSync(storePath, 'utf-8'));
16
17
  }
17
18
  catch {
18
19
  return defaultStore();
19
20
  }
20
21
  }
21
22
  export function listPersistedWorktreeMeta(options) {
22
- return Object.values(readStore(options.workingDirectory).records).sort((a, b) => a.path.localeCompare(b.path));
23
+ return Object.values(readStore(getStorePath(options.workingDirectory, options.surfaceRoot)).records)
24
+ .sort((a, b) => a.path.localeCompare(b.path));
23
25
  }
24
26
  export function getPersistedWorktreeMeta(path, options) {
25
27
  const normalized = normalizePath(path, options.workingDirectory);
26
- return readStore(options.workingDirectory).records[normalized] ?? null;
28
+ return readStore(getStorePath(options.workingDirectory, options.surfaceRoot)).records[normalized] ?? null;
27
29
  }
28
30
  export function reviewWorktreeAttachments(targetKind, targetId, options) {
29
31
  const records = listPersistedWorktreeMeta(options).filter((record) => (targetKind === 'session' ? record.sessionId === targetId : record.taskId === targetId));
@@ -75,8 +77,7 @@ export function summarizeWorktreeOwnership(records) {
75
77
  manualOwned: 0,
76
78
  });
77
79
  }
78
- function writeStore(store, workingDirectory) {
79
- const storePath = getStorePath(workingDirectory);
80
+ function writeStore(store, storePath) {
80
81
  mkdirSync(dirname(storePath), { recursive: true });
81
82
  writeFileSync(storePath, `${JSON.stringify(store, null, 2)}\n`, 'utf-8');
82
83
  }
@@ -94,12 +95,14 @@ function classifyWorktreePath(path, workingDirectory) {
94
95
  export class WorktreeRegistry {
95
96
  git;
96
97
  workingDirectory;
97
- constructor(workingDirectory) {
98
+ surfaceRoot;
99
+ constructor(workingDirectory, options) {
98
100
  this.workingDirectory = workingDirectory;
101
+ this.surfaceRoot = options?.surfaceRoot;
99
102
  this.git = new GitService(workingDirectory);
100
103
  }
101
104
  async list() {
102
- const store = readStore(this.workingDirectory);
105
+ const store = readStore(getStorePath(this.workingDirectory, this.surfaceRoot));
103
106
  const listed = await this.git.worktreeList();
104
107
  const present = new Set(listed.map((entry) => normalizePath(entry.path, this.workingDirectory)));
105
108
  const records = listed.map((entry) => {
@@ -134,11 +137,11 @@ export class WorktreeRegistry {
134
137
  if (!present.has(path) && meta.state === 'kept')
135
138
  nextRecords[path] = meta;
136
139
  }
137
- writeStore({ version: 1, records: nextRecords }, this.workingDirectory);
140
+ writeStore({ version: 1, records: nextRecords }, getStorePath(this.workingDirectory, this.surfaceRoot));
138
141
  return records.sort((a, b) => a.path.localeCompare(b.path));
139
142
  }
140
143
  attach(path, target) {
141
- const store = readStore(this.workingDirectory);
144
+ const store = readStore(getStorePath(this.workingDirectory, this.surfaceRoot));
142
145
  const normalized = normalizePath(path, this.workingDirectory);
143
146
  const existing = store.records[normalized];
144
147
  const classified = classifyWorktreePath(normalized, this.workingDirectory);
@@ -151,10 +154,10 @@ export class WorktreeRegistry {
151
154
  ...(target.taskId ? { taskId: target.taskId } : {}),
152
155
  updatedAt: Date.now(),
153
156
  };
154
- writeStore(store, this.workingDirectory);
157
+ writeStore(store, getStorePath(this.workingDirectory, this.surfaceRoot));
155
158
  }
156
159
  setState(path, state) {
157
- const store = readStore(this.workingDirectory);
160
+ const store = readStore(getStorePath(this.workingDirectory, this.surfaceRoot));
158
161
  const normalized = normalizePath(path, this.workingDirectory);
159
162
  const existing = store.records[normalized];
160
163
  const classified = classifyWorktreePath(normalized, this.workingDirectory);
@@ -167,13 +170,13 @@ export class WorktreeRegistry {
167
170
  ...(existing?.taskId ? { taskId: existing.taskId } : {}),
168
171
  updatedAt: Date.now(),
169
172
  };
170
- writeStore(store, this.workingDirectory);
173
+ writeStore(store, getStorePath(this.workingDirectory, this.surfaceRoot));
171
174
  }
172
175
  async cleanup(path) {
173
176
  const normalized = isAbsolute(path) ? path : normalizePath(path, this.workingDirectory);
174
177
  await this.git.worktreeRemove(normalized);
175
- const store = readStore(this.workingDirectory);
178
+ const store = readStore(getStorePath(this.workingDirectory, this.surfaceRoot));
176
179
  delete store.records[normalized];
177
- writeStore(store, this.workingDirectory);
180
+ writeStore(store, getStorePath(this.workingDirectory, this.surfaceRoot));
178
181
  }
179
182
  }
@@ -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/goodvibes/schedules.json`) and survive restarts.
34
+ * Tasks persist to disk through the configured scheduler store path 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/goodvibes/schedules.json`) and survive restarts.
319
+ * Tasks persist to disk through the configured scheduler store path 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 {
@@ -28,7 +28,7 @@ export interface SessionInfo {
28
28
  }
29
29
  /**
30
30
  * SessionManager - Handles saving and loading named conversation sessions
31
- * as JSONL files under .goodvibes/goodvibes/sessions/.
31
+ * as JSONL files under the configured surface session directory.
32
32
  *
33
33
  * Format: each line is a JSON object.
34
34
  * Line 0: { type: 'meta', ...SessionMeta }
@@ -36,7 +36,10 @@ export interface SessionInfo {
36
36
  */
37
37
  export declare class SessionManager {
38
38
  private sessionsDir;
39
- constructor(baseDir: string);
39
+ constructor(baseDir: string, options?: {
40
+ readonly surfaceRoot?: string;
41
+ readonly sessionsDir?: string;
42
+ });
40
43
  /**
41
44
  * Save conversation messages to a JSONL session file.
42
45
  * Overwrites if file already exists.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/sessions/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGvE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,MAAM;IAI3B;;;;OAIG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,WAAW,EACjB,YAAY,CAAC,EAAE,WAAW,EAAE,GAC3B;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAuC9C;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE;IAwD1F;;OAEG;IACH,IAAI,IAAI,WAAW,EAAE;IAoFrB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA4BzC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAoB5C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY1B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiD9F;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CASnC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/sessions/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,aAAa,CAAC,EAAE,2BAA2B,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAIvG;;;;OAIG;IACH,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,WAAW,EACjB,YAAY,CAAC,EAAE,WAAW,EAAE,GAC3B;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAuC9C;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE;IAwD1F;;OAEG;IACH,IAAI,IAAI,WAAW,EAAE;IAoFrB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA4BzC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAoB5C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY1B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiD9F;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CASnC"}
@@ -2,9 +2,10 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, unlink
2
2
  import { join } from 'path';
3
3
  import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
4
4
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
5
+ import { resolveScopedDirectory } from '../runtime/surface-root.js';
5
6
  /**
6
7
  * SessionManager - Handles saving and loading named conversation sessions
7
- * as JSONL files under .goodvibes/goodvibes/sessions/.
8
+ * as JSONL files under the configured surface session directory.
8
9
  *
9
10
  * Format: each line is a JSON object.
10
11
  * Line 0: { type: 'meta', ...SessionMeta }
@@ -12,8 +13,8 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-displ
12
13
  */
13
14
  export class SessionManager {
14
15
  sessionsDir;
15
- constructor(baseDir) {
16
- this.sessionsDir = join(baseDir, '.goodvibes', 'goodvibes', 'sessions');
16
+ constructor(baseDir, options) {
17
+ this.sessionsDir = options?.sessionsDir ?? resolveScopedDirectory(baseDir, options?.surfaceRoot, 'sessions');
17
18
  }
18
19
  /**
19
20
  * Save conversation messages to a JSONL session file.
@@ -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/goodvibes/services.json. Use the registry tool or check .goodvibes/goodvibes/services.json to discover available service names.";
87
+ readonly description: "Named service for automatic credential lookup from the service registry. Services are configured in the host services.json file. Use the registry tool or inspect that registry 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/goodvibes/services.json. Use the registry tool or check .goodvibes/goodvibes/services.json to discover available service names.',
93
+ description: 'Named service for automatic credential lookup from the service registry. Services are configured in the host services.json file. Use the registry tool or inspect that registry to discover available service names.',
94
94
  },
95
95
  auth: {
96
96
  type: 'object',
@@ -19,8 +19,8 @@ import { createWorkflowServices, createWorkflowTool } from '@pellux/goodvibes-sd
19
19
  import { createRegistryTool } from '@pellux/goodvibes-sdk/platform/tools/registry-tool/index';
20
20
  import { KVState } from '@pellux/goodvibes-sdk/platform/state/kv-state';
21
21
  import { createTaskTool } from '@pellux/goodvibes-sdk/platform/tools/task/index';
22
- import { teamTool } from '@pellux/goodvibes-sdk/platform/tools/team/index';
23
- import { worklistTool } from '@pellux/goodvibes-sdk/platform/tools/worklist/index';
22
+ import { createTeamTool } from '@pellux/goodvibes-sdk/platform/tools/team/index';
23
+ import { createWorklistTool } from '@pellux/goodvibes-sdk/platform/tools/worklist/index';
24
24
  import { createMcpTool } from './mcp/index.js';
25
25
  import { createPacketTool } from '@pellux/goodvibes-sdk/platform/tools/packet/index';
26
26
  import { createQueryTool } from '@pellux/goodvibes-sdk/platform/tools/query/index';
@@ -129,13 +129,13 @@ export function registerAllTools(registry, deps) {
129
129
  homeDirectory: deps.configManager.getHomeDirectory() ?? undefined,
130
130
  }));
131
131
  registry.register(createTaskTool(sessionOrchestration));
132
- registry.register(teamTool);
133
- registry.register(worklistTool);
132
+ registry.register(createTeamTool({ surfaceRoot: deps.surfaceRoot }));
133
+ registry.register(createWorklistTool({ surfaceRoot: deps.surfaceRoot }));
134
134
  if (mcpRegistry) {
135
135
  registry.register(createMcpTool(mcpRegistry));
136
136
  }
137
- registry.register(createPacketTool(workingDirectory));
138
- registry.register(createQueryTool(workingDirectory));
137
+ registry.register(createPacketTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
138
+ registry.register(createQueryTool({ workingDirectory, surfaceRoot: deps.surfaceRoot }));
139
139
  if (remoteRunnerRegistry) {
140
140
  registry.register(createRemoteTool(remoteRunnerRegistry));
141
141
  }
@@ -1,3 +1,6 @@
1
1
  import type { Tool } from '../../types/tools.js';
2
- export declare function createPacketTool(workingDirectory: string): Tool;
2
+ export declare function createPacketTool(options: string | {
3
+ readonly workingDirectory: string;
4
+ readonly surfaceRoot?: string;
5
+ }): Tool;
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/tools/packet/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAiCjD,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAuG/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/tools/packet/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAkCjD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,IAAI,CAyGN"}