@delfos-ai/cli 1.0.3
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/README.md +93 -0
- package/dist/api/delfos-api.client.d.ts +32 -0
- package/dist/api/delfos-api.client.d.ts.map +1 -0
- package/dist/api/delfos-api.client.js +43 -0
- package/dist/api/delfos-api.client.js.map +1 -0
- package/dist/commands/login.command.d.ts +15 -0
- package/dist/commands/login.command.d.ts.map +1 -0
- package/dist/commands/login.command.js +164 -0
- package/dist/commands/login.command.js.map +1 -0
- package/dist/commands/logout.command.d.ts +8 -0
- package/dist/commands/logout.command.d.ts.map +1 -0
- package/dist/commands/logout.command.js +46 -0
- package/dist/commands/logout.command.js.map +1 -0
- package/dist/commands/mcp/mcp-memory.command.d.ts +11 -0
- package/dist/commands/mcp/mcp-memory.command.d.ts.map +1 -0
- package/dist/commands/mcp/mcp-memory.command.js +22 -0
- package/dist/commands/mcp/mcp-memory.command.js.map +1 -0
- package/dist/commands/memory/index.d.ts +3 -0
- package/dist/commands/memory/index.d.ts.map +1 -0
- package/dist/commands/memory/index.js +14 -0
- package/dist/commands/memory/index.js.map +1 -0
- package/dist/commands/memory/memory-index.command.d.ts +3 -0
- package/dist/commands/memory/memory-index.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-index.command.js +57 -0
- package/dist/commands/memory/memory-index.command.js.map +1 -0
- package/dist/commands/memory/memory-init.command.d.ts +3 -0
- package/dist/commands/memory/memory-init.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-init.command.js +72 -0
- package/dist/commands/memory/memory-init.command.js.map +1 -0
- package/dist/commands/memory/memory-read.command.d.ts +3 -0
- package/dist/commands/memory/memory-read.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-read.command.js +52 -0
- package/dist/commands/memory/memory-read.command.js.map +1 -0
- package/dist/commands/memory/memory-status.command.d.ts +7 -0
- package/dist/commands/memory/memory-status.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-status.command.js +43 -0
- package/dist/commands/memory/memory-status.command.js.map +1 -0
- package/dist/commands/memory/memory-write.command.d.ts +3 -0
- package/dist/commands/memory/memory-write.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-write.command.js +66 -0
- package/dist/commands/memory/memory-write.command.js.map +1 -0
- package/dist/config/cli-config.d.ts +13 -0
- package/dist/config/cli-config.d.ts.map +1 -0
- package/dist/config/cli-config.js +31 -0
- package/dist/config/cli-config.js.map +1 -0
- package/dist/config/memory.config.d.ts +61 -0
- package/dist/config/memory.config.d.ts.map +1 -0
- package/dist/config/memory.config.js +22 -0
- package/dist/config/memory.config.js.map +1 -0
- package/dist/features/memory-index/index.d.ts +5 -0
- package/dist/features/memory-index/index.d.ts.map +1 -0
- package/dist/features/memory-index/index.js +3 -0
- package/dist/features/memory-index/index.js.map +1 -0
- package/dist/features/memory-index/memory-index.schema.d.ts +96 -0
- package/dist/features/memory-index/memory-index.schema.d.ts.map +1 -0
- package/dist/features/memory-index/memory-index.schema.js +14 -0
- package/dist/features/memory-index/memory-index.schema.js.map +1 -0
- package/dist/features/memory-index/vault-indexer.d.ts +17 -0
- package/dist/features/memory-index/vault-indexer.d.ts.map +1 -0
- package/dist/features/memory-index/vault-indexer.js +140 -0
- package/dist/features/memory-index/vault-indexer.js.map +1 -0
- package/dist/features/memory-init/vault-scaffolder.d.ts +20 -0
- package/dist/features/memory-init/vault-scaffolder.d.ts.map +1 -0
- package/dist/features/memory-init/vault-scaffolder.js +109 -0
- package/dist/features/memory-init/vault-scaffolder.js.map +1 -0
- package/dist/features/memory-read/index.d.ts +4 -0
- package/dist/features/memory-read/index.d.ts.map +1 -0
- package/dist/features/memory-read/index.js +3 -0
- package/dist/features/memory-read/index.js.map +1 -0
- package/dist/features/memory-read/memory-read.schema.d.ts +79 -0
- package/dist/features/memory-read/memory-read.schema.d.ts.map +1 -0
- package/dist/features/memory-read/memory-read.schema.js +25 -0
- package/dist/features/memory-read/memory-read.schema.js.map +1 -0
- package/dist/features/memory-read/rag-reader.d.ts +8 -0
- package/dist/features/memory-read/rag-reader.d.ts.map +1 -0
- package/dist/features/memory-read/rag-reader.js +79 -0
- package/dist/features/memory-read/rag-reader.js.map +1 -0
- package/dist/features/memory-server/config-loader.d.ts +6 -0
- package/dist/features/memory-server/config-loader.d.ts.map +1 -0
- package/dist/features/memory-server/config-loader.js +39 -0
- package/dist/features/memory-server/config-loader.js.map +1 -0
- package/dist/features/memory-server/index.d.ts +5 -0
- package/dist/features/memory-server/index.d.ts.map +1 -0
- package/dist/features/memory-server/index.js +4 -0
- package/dist/features/memory-server/index.js.map +1 -0
- package/dist/features/memory-server/memory-server.d.ts +6 -0
- package/dist/features/memory-server/memory-server.d.ts.map +1 -0
- package/dist/features/memory-server/memory-server.js +197 -0
- package/dist/features/memory-server/memory-server.js.map +1 -0
- package/dist/features/memory-server/memory-server.schema.d.ts +194 -0
- package/dist/features/memory-server/memory-server.schema.d.ts.map +1 -0
- package/dist/features/memory-server/memory-server.schema.js +58 -0
- package/dist/features/memory-server/memory-server.schema.js.map +1 -0
- package/dist/features/memory-server/tools/memory-index.handler.d.ts +10 -0
- package/dist/features/memory-server/tools/memory-index.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-index.handler.js +27 -0
- package/dist/features/memory-server/tools/memory-index.handler.js.map +1 -0
- package/dist/features/memory-server/tools/memory-read.handler.d.ts +10 -0
- package/dist/features/memory-server/tools/memory-read.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-read.handler.js +33 -0
- package/dist/features/memory-server/tools/memory-read.handler.js.map +1 -0
- package/dist/features/memory-server/tools/memory-status.handler.d.ts +9 -0
- package/dist/features/memory-server/tools/memory-status.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-status.handler.js +35 -0
- package/dist/features/memory-server/tools/memory-status.handler.js.map +1 -0
- package/dist/features/memory-server/tools/memory-write.handler.d.ts +8 -0
- package/dist/features/memory-server/tools/memory-write.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-write.handler.js +42 -0
- package/dist/features/memory-server/tools/memory-write.handler.js.map +1 -0
- package/dist/features/memory-shared/chunker.d.ts +16 -0
- package/dist/features/memory-shared/chunker.d.ts.map +1 -0
- package/dist/features/memory-shared/chunker.js +93 -0
- package/dist/features/memory-shared/chunker.js.map +1 -0
- package/dist/features/memory-shared/markdown-parser.d.ts +7 -0
- package/dist/features/memory-shared/markdown-parser.d.ts.map +1 -0
- package/dist/features/memory-shared/markdown-parser.js +24 -0
- package/dist/features/memory-shared/markdown-parser.js.map +1 -0
- package/dist/features/memory-shared/vault-path-validator.d.ts +14 -0
- package/dist/features/memory-shared/vault-path-validator.d.ts.map +1 -0
- package/dist/features/memory-shared/vault-path-validator.js +56 -0
- package/dist/features/memory-shared/vault-path-validator.js.map +1 -0
- package/dist/features/memory-shared/vault-scanner.d.ts +8 -0
- package/dist/features/memory-shared/vault-scanner.d.ts.map +1 -0
- package/dist/features/memory-shared/vault-scanner.js +35 -0
- package/dist/features/memory-shared/vault-scanner.js.map +1 -0
- package/dist/features/memory-shared/vault-slug.d.ts +9 -0
- package/dist/features/memory-shared/vault-slug.d.ts.map +1 -0
- package/dist/features/memory-shared/vault-slug.js +17 -0
- package/dist/features/memory-shared/vault-slug.js.map +1 -0
- package/dist/features/memory-write/index.d.ts +6 -0
- package/dist/features/memory-write/index.d.ts.map +1 -0
- package/dist/features/memory-write/index.js +4 -0
- package/dist/features/memory-write/index.js.map +1 -0
- package/dist/features/memory-write/memory-write.schema.d.ts +36 -0
- package/dist/features/memory-write/memory-write.schema.d.ts.map +1 -0
- package/dist/features/memory-write/memory-write.schema.js +14 -0
- package/dist/features/memory-write/memory-write.schema.js.map +1 -0
- package/dist/features/memory-write/note-formatter.d.ts +11 -0
- package/dist/features/memory-write/note-formatter.d.ts.map +1 -0
- package/dist/features/memory-write/note-formatter.js +38 -0
- package/dist/features/memory-write/note-formatter.js.map +1 -0
- package/dist/features/memory-write/vault-writer.d.ts +6 -0
- package/dist/features/memory-write/vault-writer.d.ts.map +1 -0
- package/dist/features/memory-write/vault-writer.js +61 -0
- package/dist/features/memory-write/vault-writer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/embeddings/embedding-provider.d.ts +9 -0
- package/dist/infrastructure/embeddings/embedding-provider.d.ts.map +1 -0
- package/dist/infrastructure/embeddings/embedding-provider.js +5 -0
- package/dist/infrastructure/embeddings/embedding-provider.js.map +1 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.d.ts +18 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.d.ts.map +1 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.js +38 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.js.map +1 -0
- package/dist/infrastructure/logger/index.d.ts +21 -0
- package/dist/infrastructure/logger/index.d.ts.map +1 -0
- package/dist/infrastructure/logger/index.js +116 -0
- package/dist/infrastructure/logger/index.js.map +1 -0
- package/dist/infrastructure/vector-db/chroma.adapter.d.ts +76 -0
- package/dist/infrastructure/vector-db/chroma.adapter.d.ts.map +1 -0
- package/dist/infrastructure/vector-db/chroma.adapter.js +137 -0
- package/dist/infrastructure/vector-db/chroma.adapter.js.map +1 -0
- package/dist/utils/config.d.ts +13 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +13 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/pkce.d.ts +17 -0
- package/dist/utils/pkce.d.ts.map +1 -0
- package/dist/utils/pkce.js +28 -0
- package/dist/utils/pkce.js.map +1 -0
- package/dist/utils/port.d.ts +7 -0
- package/dist/utils/port.d.ts.map +1 -0
- package/dist/utils/port.js +33 -0
- package/dist/utils/port.js.map +1 -0
- package/package.json +59 -0
- package/templates/.gitkeep +0 -0
- package/templates/obsidian-vault/AI-Context/global-rules.md +129 -0
- package/templates/obsidian-vault/AI-Context/tool-preferences.md +128 -0
- package/templates/obsidian-vault/Patterns/architecture-patterns.md +147 -0
- package/templates/obsidian-vault/Patterns/coding-standards.md +90 -0
- package/templates/obsidian-vault/Projects/example-project/Decisions/example-decision.md +51 -0
- package/templates/obsidian-vault/Projects/example-project/Migrations/example-migration.md +85 -0
- package/templates/obsidian-vault/Projects/example-project/Overview.md +43 -0
- package/templates/obsidian-vault/Projects/example-project/Sessions/session-1.md +66 -0
- package/templates/obsidian-vault/Templates/decision.md +57 -0
- package/templates/obsidian-vault/Templates/migration.md +86 -0
- package/templates/obsidian-vault/Templates/session.md +87 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { loginCommand } from './commands/login.command.js';
|
|
4
|
+
import { logoutCommand } from './commands/logout.command.js';
|
|
5
|
+
import { memoryCommand } from './commands/memory/index.js';
|
|
6
|
+
import { mcpMemoryCommand } from './commands/mcp/mcp-memory.command.js';
|
|
7
|
+
import { registerFatalHandlers } from './infrastructure/logger/index.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('delfos')
|
|
11
|
+
.description('Delfos CLI — AI Layer tools for the terminal')
|
|
12
|
+
.version('0.1.0');
|
|
13
|
+
// Auth commands
|
|
14
|
+
program.addCommand(loginCommand);
|
|
15
|
+
program.addCommand(logoutCommand);
|
|
16
|
+
// Memory commands
|
|
17
|
+
program.addCommand(memoryCommand);
|
|
18
|
+
// MCP commands
|
|
19
|
+
const mcpCommand = new Command('mcp').description('MCP server operations');
|
|
20
|
+
mcpCommand.addCommand(mcpMemoryCommand);
|
|
21
|
+
program.addCommand(mcpCommand);
|
|
22
|
+
registerFatalHandlers();
|
|
23
|
+
await program.parseAsync(process.argv);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,kBAAkB;AAClB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,eAAe;AACf,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAC3E,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAE/B,qBAAqB,EAAE,CAAC;AACxB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/embeddings/embedding-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/infrastructure/embeddings/embedding-provider.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local embedding provider using a local model.
|
|
3
|
+
*/
|
|
4
|
+
import type { EmbeddingProvider } from './embedding-provider.js';
|
|
5
|
+
/**
|
|
6
|
+
* Local embedding provider implementation class with lazy loading.
|
|
7
|
+
*/
|
|
8
|
+
export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
9
|
+
readonly modelName = "Xenova/all-MiniLM-L6-v2";
|
|
10
|
+
readonly dimension = 384;
|
|
11
|
+
private pipeline;
|
|
12
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Stub instance for backward compatibility.
|
|
16
|
+
*/
|
|
17
|
+
export declare const localEmbeddingProvider: EmbeddingProvider;
|
|
18
|
+
//# sourceMappingURL=local-embedding.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-embedding.provider.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/embeddings/local-embedding.provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;GAEG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,QAAQ,CAAC,SAAS,6BAA6B;IAC/C,QAAQ,CAAC,SAAS,OAAO;IAEzB,OAAO,CAAC,QAAQ,CAAwB;IAElC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAsBlD;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,iBAQpC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local embedding provider using a local model.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Local embedding provider implementation class with lazy loading.
|
|
6
|
+
*/
|
|
7
|
+
export class LocalEmbeddingProvider {
|
|
8
|
+
modelName = 'Xenova/all-MiniLM-L6-v2';
|
|
9
|
+
dimension = 384;
|
|
10
|
+
pipeline = null;
|
|
11
|
+
async embed(texts) {
|
|
12
|
+
// Lazy load pipeline on first call
|
|
13
|
+
if (this.pipeline === null) {
|
|
14
|
+
const { pipeline } = await import('@huggingface/transformers');
|
|
15
|
+
this.pipeline = await pipeline('feature-extraction', this.modelName);
|
|
16
|
+
}
|
|
17
|
+
// Call the pipeline
|
|
18
|
+
const results = await this.pipeline(texts, { pooling: 'mean', normalize: true });
|
|
19
|
+
// Convert results to number[][]
|
|
20
|
+
return results.map((r) => {
|
|
21
|
+
const embedding = r.data;
|
|
22
|
+
// Convert Float32Array to number[]
|
|
23
|
+
return Array.from(embedding);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stub instance for backward compatibility.
|
|
29
|
+
*/
|
|
30
|
+
export const localEmbeddingProvider = {
|
|
31
|
+
modelName: 'local-model',
|
|
32
|
+
dimension: 384,
|
|
33
|
+
embed: async (texts) => {
|
|
34
|
+
const provider = new LocalEmbeddingProvider();
|
|
35
|
+
return provider.embed(texts);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=local-embedding.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-embedding.provider.js","sourceRoot":"","sources":["../../../src/infrastructure/embeddings/local-embedding.provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACxB,SAAS,GAAG,yBAAyB,CAAC;IACtC,SAAS,GAAG,GAAG,CAAC;IAEjB,QAAQ,GAAmB,IAAI,CAAC;IAExC,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,mCAAmC;QACnC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;QAED,oBAAoB;QACpB,MAAM,OAAO,GAAG,MACd,IAAI,CAAC,QAIN,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,gCAAgC;QAChC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;YAChC,MAAM,SAAS,GAAI,CAA4B,CAAC,IAAI,CAAC;YACrD,mCAAmC;YACnC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,GAAG;IAEd,KAAK,EAAE,KAAK,EAAE,KAAe,EAAuB,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Logger } from 'pino';
|
|
2
|
+
export declare const logger: Logger;
|
|
3
|
+
export declare function createSliceLogger(slice: string, extra?: Record<string, unknown>): Logger;
|
|
4
|
+
interface JobContext {
|
|
5
|
+
id?: string | null;
|
|
6
|
+
name?: string;
|
|
7
|
+
data?: {
|
|
8
|
+
userId?: string;
|
|
9
|
+
flowJobId?: string;
|
|
10
|
+
operationId?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
};
|
|
13
|
+
attemptsMade?: number;
|
|
14
|
+
opts?: {
|
|
15
|
+
attempts?: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function createJobLogger(job: JobContext, sliceLogger?: Logger): Logger;
|
|
19
|
+
export declare function registerFatalHandlers(): void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/logger/index.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AA4EzC,eAAO,MAAM,MAAM,EAAE,MAcpB,CAAC;AAUF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAER;AAUD,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAY7E;AASD,wBAAgB,qBAAqB,IAAI,IAAI,CAa5C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
const _require = createRequire(import.meta.url);
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// Regra 1 — Data Redaction: chaves sensíveis mascaradas em TODOS os ambientes
|
|
6
|
+
// =============================================================================
|
|
7
|
+
const REDACTED_PATHS = [
|
|
8
|
+
// Chaves BYOK e credenciais de IA
|
|
9
|
+
'api_key',
|
|
10
|
+
'apiKey',
|
|
11
|
+
'key_encrypted',
|
|
12
|
+
'byokKey',
|
|
13
|
+
// Headers HTTP de autenticação (passados como objeto em logs de request)
|
|
14
|
+
'req.headers.authorization',
|
|
15
|
+
'req.headers["authorization"]',
|
|
16
|
+
'req.headers["anthropic-api-key"]',
|
|
17
|
+
'req.headers["x-api-key"]',
|
|
18
|
+
'req.headers["openai-api-key"]',
|
|
19
|
+
// Corpo de request/response com prompts ou dados sensíveis
|
|
20
|
+
'req.body.password',
|
|
21
|
+
'req.body.api_key',
|
|
22
|
+
'req.body.prompt',
|
|
23
|
+
'req.body.messages',
|
|
24
|
+
'res.body.choices',
|
|
25
|
+
// Contexto de jobs (o dado bruto de um job pode carregar a chave)
|
|
26
|
+
'jobData.byokKey',
|
|
27
|
+
'jobData.key_encrypted',
|
|
28
|
+
// Campos genéricos que poderiam aparecer em qualquer nível
|
|
29
|
+
'password',
|
|
30
|
+
'token',
|
|
31
|
+
'secret',
|
|
32
|
+
'authorization',
|
|
33
|
+
];
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// Regra 4 — Separação de Ambientes: JSON em produção, pretty em dev
|
|
36
|
+
// =============================================================================
|
|
37
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
38
|
+
// Verifica se pino-pretty está disponível antes de tentar usá-lo
|
|
39
|
+
// Isso evita erros em containers Docker onde devDependencies não estão instaladas
|
|
40
|
+
const canUsePretty = isDev &&
|
|
41
|
+
(() => {
|
|
42
|
+
try {
|
|
43
|
+
_require.resolve('pino-pretty');
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
})();
|
|
50
|
+
const transport = canUsePretty
|
|
51
|
+
? {
|
|
52
|
+
target: 'pino-pretty',
|
|
53
|
+
options: {
|
|
54
|
+
colorize: true,
|
|
55
|
+
translateTime: 'SYS:yyyy-mm-dd HH:MM:ss',
|
|
56
|
+
ignore: 'pid,hostname',
|
|
57
|
+
messageFormat: '[{slice}] {msg}',
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
: undefined; // produção ou pino-pretty não disponível: JSON puro via process.stdout
|
|
61
|
+
// =============================================================================
|
|
62
|
+
// Logger base — único por processo, compartilhado via import
|
|
63
|
+
// =============================================================================
|
|
64
|
+
export const logger = pino({
|
|
65
|
+
level: process.env.LOG_LEVEL ?? (isDev ? 'debug' : 'info'),
|
|
66
|
+
redact: {
|
|
67
|
+
paths: REDACTED_PATHS,
|
|
68
|
+
censor: '[REDACTED]',
|
|
69
|
+
},
|
|
70
|
+
base: {
|
|
71
|
+
pid: process.pid,
|
|
72
|
+
env: process.env.NODE_ENV ?? 'development',
|
|
73
|
+
},
|
|
74
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
75
|
+
}, transport ? pino.transport(transport) : process.stdout);
|
|
76
|
+
// =============================================================================
|
|
77
|
+
// Regra 2 — VSA Child Logger: cada slice declara o seu contexto de origem
|
|
78
|
+
//
|
|
79
|
+
// Uso em qualquer slice:
|
|
80
|
+
// import { createSliceLogger } from '../../infrastructure/logger/index.js';
|
|
81
|
+
// const logger = createSliceLogger('convert-instructions');
|
|
82
|
+
// =============================================================================
|
|
83
|
+
export function createSliceLogger(slice, extra) {
|
|
84
|
+
return logger.child({ slice, ...extra });
|
|
85
|
+
}
|
|
86
|
+
export function createJobLogger(job, sliceLogger) {
|
|
87
|
+
const base = sliceLogger ?? logger;
|
|
88
|
+
return base.child({
|
|
89
|
+
jobId: job.id,
|
|
90
|
+
jobName: job.name,
|
|
91
|
+
flowJobId: job.data?.flowJobId ?? null,
|
|
92
|
+
userId: job.data?.userId,
|
|
93
|
+
operationId: job.data?.operationId,
|
|
94
|
+
attempt: (job.attemptsMade ?? 0) + 1,
|
|
95
|
+
maxAttempts: job.opts?.attempts,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// =============================================================================
|
|
99
|
+
// Regra 5 — Erros Fatais: uncaughtException + unhandledRejection
|
|
100
|
+
// Deve ser chamado UMA VEZ em main.ts antes de qualquer outro setup
|
|
101
|
+
// =============================================================================
|
|
102
|
+
let fatalHandlersRegistered = false;
|
|
103
|
+
export function registerFatalHandlers() {
|
|
104
|
+
if (fatalHandlersRegistered)
|
|
105
|
+
return;
|
|
106
|
+
fatalHandlersRegistered = true;
|
|
107
|
+
process.on('uncaughtException', (err) => {
|
|
108
|
+
logger.fatal({ err }, 'uncaughtException — processo encerrando');
|
|
109
|
+
process.exit(1);
|
|
110
|
+
});
|
|
111
|
+
process.on('unhandledRejection', (reason) => {
|
|
112
|
+
logger.fatal({ reason }, 'unhandledRejection — promise sem handler');
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/logger/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export declare class EmbeddingDimensionMismatchError extends Error {
|
|
2
|
+
readonly expected: number;
|
|
3
|
+
readonly received: number;
|
|
4
|
+
constructor(expected: number, received: number);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* ChromaDB adapter implementation class.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ChromaDBAdapterImpl implements ChromaDBAdapter {
|
|
10
|
+
private readonly host;
|
|
11
|
+
private readonly port;
|
|
12
|
+
private client;
|
|
13
|
+
constructor(host: string, port: number);
|
|
14
|
+
collectionExists(collectionName: string): Promise<boolean>;
|
|
15
|
+
queryChunks(_collectionName: string, _embedding: number[], _limit: number, _filters?: QueryFilters): Promise<QueryResult[]>;
|
|
16
|
+
getOrCreateCollection(collectionName: string, dimension: number): Promise<void>;
|
|
17
|
+
dropCollection(collectionName: string): Promise<void>;
|
|
18
|
+
getCollectionMeta(collectionName: string): Promise<CollectionMeta>;
|
|
19
|
+
upsertChunks(collectionName: string, chunks: ChunkToUpsert[]): Promise<void>;
|
|
20
|
+
deleteByPaths(_collectionName: string, _paths: string[]): Promise<void>;
|
|
21
|
+
updateLastIndexAt(collectionName: string, timestamp?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export interface QueryFilters {
|
|
24
|
+
folder?: string;
|
|
25
|
+
tags?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ChunkToUpsert {
|
|
28
|
+
id: string;
|
|
29
|
+
content: string;
|
|
30
|
+
embedding: number[];
|
|
31
|
+
metadata: {
|
|
32
|
+
path: string;
|
|
33
|
+
title: string;
|
|
34
|
+
folder: string;
|
|
35
|
+
tags: string;
|
|
36
|
+
modified_at: string;
|
|
37
|
+
type: string;
|
|
38
|
+
chunk_index: number;
|
|
39
|
+
heading: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface QueryResult {
|
|
43
|
+
id: string;
|
|
44
|
+
content: string;
|
|
45
|
+
score: number;
|
|
46
|
+
metadata: {
|
|
47
|
+
path: string;
|
|
48
|
+
title: string;
|
|
49
|
+
folder: string;
|
|
50
|
+
tags: string | string[];
|
|
51
|
+
modified_at: string;
|
|
52
|
+
type: string;
|
|
53
|
+
chunk_index: number;
|
|
54
|
+
heading: string;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export interface CollectionMeta {
|
|
58
|
+
count: number;
|
|
59
|
+
dimension: number;
|
|
60
|
+
lastIndexAt: string | null;
|
|
61
|
+
}
|
|
62
|
+
export interface ChromaDBAdapter {
|
|
63
|
+
collectionExists(collectionName: string): Promise<boolean>;
|
|
64
|
+
queryChunks(collectionName: string, embedding: number[], limit: number, filters?: QueryFilters): Promise<QueryResult[]>;
|
|
65
|
+
getOrCreateCollection(collectionName: string, dimension: number): Promise<void>;
|
|
66
|
+
dropCollection(collectionName: string): Promise<void>;
|
|
67
|
+
getCollectionMeta(collectionName: string): Promise<CollectionMeta>;
|
|
68
|
+
upsertChunks(collectionName: string, chunks: ChunkToUpsert[]): Promise<void>;
|
|
69
|
+
deleteByPaths(collectionName: string, paths: string[]): Promise<void>;
|
|
70
|
+
updateLastIndexAt(collectionName: string): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Stub implementation - replace with actual ChromaDB client.
|
|
74
|
+
*/
|
|
75
|
+
export declare const chromaDBAdapter: ChromaDBAdapter;
|
|
76
|
+
//# sourceMappingURL=chroma.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chroma.adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/vector-db/chroma.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChromaDB adapter for vector storage and retrieval.
|
|
3
|
+
*/
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
const _cjsRequire = createRequire(import.meta.url);
|
|
6
|
+
export class EmbeddingDimensionMismatchError extends Error {
|
|
7
|
+
expected;
|
|
8
|
+
received;
|
|
9
|
+
constructor(expected, received) {
|
|
10
|
+
super(`Embedding dimension mismatch: received ${received}, expected ${expected}. Memory index is full, please rebuild.`);
|
|
11
|
+
this.expected = expected;
|
|
12
|
+
this.received = received;
|
|
13
|
+
this.name = 'EmbeddingDimensionMismatchError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* ChromaDB adapter implementation class.
|
|
18
|
+
*/
|
|
19
|
+
export class ChromaDBAdapterImpl {
|
|
20
|
+
host;
|
|
21
|
+
port;
|
|
22
|
+
client;
|
|
23
|
+
constructor(host, port) {
|
|
24
|
+
this.host = host;
|
|
25
|
+
this.port = port;
|
|
26
|
+
const { ChromaClient } = _cjsRequire('chromadb');
|
|
27
|
+
this.client = new ChromaClient({ path: `http://${host}:${port}` });
|
|
28
|
+
}
|
|
29
|
+
async collectionExists(collectionName) {
|
|
30
|
+
try {
|
|
31
|
+
await this.client.getCollection({ name: collectionName });
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err.name === 'ChromaNotFoundError')
|
|
36
|
+
return false;
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async queryChunks(_collectionName, _embedding, _limit, _filters) {
|
|
41
|
+
// TODO: Implement actual ChromaDB query
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
async getOrCreateCollection(collectionName, dimension) {
|
|
45
|
+
try {
|
|
46
|
+
const collection = await this.client.getCollection({ name: collectionName });
|
|
47
|
+
const colDimension = collection.metadata?.embeddingDimension;
|
|
48
|
+
if (colDimension && colDimension !== dimension) {
|
|
49
|
+
throw new EmbeddingDimensionMismatchError(dimension, colDimension);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
const errorName = err.name;
|
|
54
|
+
if (errorName === 'ChromaNotFoundError' ||
|
|
55
|
+
err instanceof EmbeddingDimensionMismatchError) {
|
|
56
|
+
if (err instanceof EmbeddingDimensionMismatchError)
|
|
57
|
+
throw err;
|
|
58
|
+
await this.client.createCollection({
|
|
59
|
+
name: collectionName,
|
|
60
|
+
metadata: { embeddingDimension: dimension },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async dropCollection(collectionName) {
|
|
69
|
+
await this.client.deleteCollection({ name: collectionName });
|
|
70
|
+
}
|
|
71
|
+
async getCollectionMeta(collectionName) {
|
|
72
|
+
const collection = await this.client.getCollection({ name: collectionName });
|
|
73
|
+
const count = await collection.count();
|
|
74
|
+
return {
|
|
75
|
+
count,
|
|
76
|
+
dimension: collection.metadata?.embeddingDimension || 384,
|
|
77
|
+
lastIndexAt: collection.metadata?.lastIndexAt || null,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async upsertChunks(collectionName, chunks) {
|
|
81
|
+
if (chunks.length === 0)
|
|
82
|
+
return;
|
|
83
|
+
const collection = await this.client.getCollection({ name: collectionName });
|
|
84
|
+
await collection.upsert({
|
|
85
|
+
ids: chunks.map((c) => c.id),
|
|
86
|
+
embeddings: chunks.map((c) => c.embedding),
|
|
87
|
+
documents: chunks.map((c) => c.content),
|
|
88
|
+
metadatas: chunks.map((c) => c.metadata),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async deleteByPaths(_collectionName, _paths) {
|
|
92
|
+
// TODO: Implement actual ChromaDB delete by paths
|
|
93
|
+
}
|
|
94
|
+
async updateLastIndexAt(collectionName, timestamp) {
|
|
95
|
+
const collection = await this.client.getCollection({ name: collectionName });
|
|
96
|
+
const existingMeta = (collection.metadata || {});
|
|
97
|
+
await collection.modify({
|
|
98
|
+
metadata: {
|
|
99
|
+
...existingMeta,
|
|
100
|
+
lastIndexAt: timestamp || new Date().toISOString(),
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Stub implementation - replace with actual ChromaDB client.
|
|
107
|
+
*/
|
|
108
|
+
export const chromaDBAdapter = {
|
|
109
|
+
collectionExists: async (_collectionName) => {
|
|
110
|
+
// TODO: Implement actual ChromaDB collection check
|
|
111
|
+
return false;
|
|
112
|
+
},
|
|
113
|
+
queryChunks: async (_collectionName, _embedding, _limit, _filters) => {
|
|
114
|
+
// TODO: Implement actual ChromaDB query
|
|
115
|
+
return [];
|
|
116
|
+
},
|
|
117
|
+
getOrCreateCollection: async (_collectionName, _dimension) => {
|
|
118
|
+
// TODO: Implement actual ChromaDB collection creation
|
|
119
|
+
},
|
|
120
|
+
dropCollection: async (_collectionName) => {
|
|
121
|
+
// TODO: Implement actual ChromaDB collection deletion
|
|
122
|
+
},
|
|
123
|
+
getCollectionMeta: async (_collectionName) => {
|
|
124
|
+
// TODO: Implement actual ChromaDB collection metadata
|
|
125
|
+
return { count: 0, dimension: 384, lastIndexAt: null };
|
|
126
|
+
},
|
|
127
|
+
upsertChunks: async (_collectionName, _chunks) => {
|
|
128
|
+
// TODO: Implement actual ChromaDB upsert
|
|
129
|
+
},
|
|
130
|
+
deleteByPaths: async (_collectionName, _paths) => {
|
|
131
|
+
// TODO: Implement actual ChromaDB delete by paths
|
|
132
|
+
},
|
|
133
|
+
updateLastIndexAt: async (_collectionName) => {
|
|
134
|
+
// TODO: Implement actual ChromaDB last index timestamp update
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=chroma.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chroma.adapter.js","sourceRoot":"","sources":["../../../src/infrastructure/vector-db/chroma.adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAEtC;IACA;IAFlB,YACkB,QAAgB,EAChB,QAAgB;QAEhC,KAAK,CACH,0CAA0C,QAAQ,cAAc,QAAQ,yCAAyC,CAClH,CAAC;QALc,aAAQ,GAAR,QAAQ,CAAQ;QAChB,aAAQ,GAAR,QAAQ,CAAQ;QAKhC,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAChD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACb,IAAI,CAAS;IACb,IAAI,CAAS;IACtB,MAAM,CAAU;IAExB,YAAY,IAAY,EAAE,IAAY;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,cAAsB;QAC3C,IAAI,CAAC;YACH,MACE,IAAI,CAAC,MAGN,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAAyB,CAAC,IAAI,KAAK,qBAAqB;gBAC3D,OAAO,KAAK,CAAC;YACf,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,eAAuB,EACvB,UAAoB,EACpB,MAAc,EACd,QAAuB;QAEvB,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,cAAsB,EACtB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MACjB,IAAI,CAAC,MAKN,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC;YAC7D,IAAI,YAAY,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,IAAI,+BAA+B,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,SAAS,GAAI,GAAyB,CAAC,IAAI,CAAC;YAClD,IACE,SAAS,KAAK,qBAAqB;gBACnC,GAAG,YAAY,+BAA+B,EAC9C,CAAC;gBACD,IAAI,GAAG,YAAY,+BAA+B;oBAAE,MAAM,GAAG,CAAC;gBAC9D,MACE,IAAI,CAAC,MAMN,CAAC,gBAAgB,CAAC;oBACjB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE;iBAC5C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,cAAsB;QACzC,MACE,IAAI,CAAC,MAGN,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,cAAsB;QAC5C,MAAM,UAAU,GAAG,MACjB,IAAI,CAAC,MAMN,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO;YACL,KAAK;YACL,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,kBAAkB,IAAI,GAAG;YACzD,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,WAAW,IAAI,IAAI;SACtD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,cAAsB,EACtB,MAAuB;QAEvB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,MACjB,IAAI,CAAC,MAUN,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1C,MAAM,UAAU,CAAC,MAAM,CAAC;YACtB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1C,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACvC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,eAAuB,EACvB,MAAgB;QAEhB,kDAAkD;IACpD,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,cAAsB,EACtB,SAAkB;QAElB,MAAM,UAAU,GAAG,MACjB,IAAI,CAAC,MAQN,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;QAC5E,MAAM,UAAU,CAAC,MAAM,CAAC;YACtB,QAAQ,EAAE;gBACR,GAAG,YAAY;gBACf,WAAW,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACnD;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAgED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,gBAAgB,EAAE,KAAK,EAAE,eAAuB,EAAoB,EAAE;QACpE,mDAAmD;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,EAAE,KAAK,EAChB,eAAuB,EACvB,UAAoB,EACpB,MAAc,EACd,QAAuB,EACC,EAAE;QAC1B,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAqB,EAAE,KAAK,EAC1B,eAAuB,EACvB,UAAkB,EACH,EAAE;QACjB,sDAAsD;IACxD,CAAC;IAED,cAAc,EAAE,KAAK,EAAE,eAAuB,EAAiB,EAAE;QAC/D,sDAAsD;IACxD,CAAC;IAED,iBAAiB,EAAE,KAAK,EACtB,eAAuB,EACE,EAAE;QAC3B,sDAAsD;QACtD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IAED,YAAY,EAAE,KAAK,EACjB,eAAuB,EACvB,OAAwB,EACT,EAAE;QACjB,yCAAyC;IAC3C,CAAC;IAED,aAAa,EAAE,KAAK,EAClB,eAAuB,EACvB,MAAgB,EACD,EAAE;QACjB,kDAAkD;IACpD,CAAC;IAED,iBAAiB,EAAE,KAAK,EAAE,eAAuB,EAAiB,EAAE;QAClE,8DAA8D;IAChE,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface TokenData {
|
|
2
|
+
token: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
email: string;
|
|
5
|
+
}
|
|
6
|
+
/** Absolute path to the CLI config file — exported for use in test assertions and success messages. */
|
|
7
|
+
export declare const CONFIG_PATH: string;
|
|
8
|
+
/**
|
|
9
|
+
* Persists token, userId, and email to ~/.delfos/config.json.
|
|
10
|
+
* Delegates to writeConfig which handles mkdirSync and writeFileSync.
|
|
11
|
+
*/
|
|
12
|
+
export declare function storeToken(data: TokenData): void;
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uGAAuG;AACvG,eAAO,MAAM,WAAW,QAAoD,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAEhD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { writeConfig } from '../config/cli-config.js';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
/** Absolute path to the CLI config file — exported for use in test assertions and success messages. */
|
|
5
|
+
export const CONFIG_PATH = path.join(os.homedir(), '.delfos', 'config.json');
|
|
6
|
+
/**
|
|
7
|
+
* Persists token, userId, and email to ~/.delfos/config.json.
|
|
8
|
+
* Delegates to writeConfig which handles mkdirSync and writeFileSync.
|
|
9
|
+
*/
|
|
10
|
+
export function storeToken(data) {
|
|
11
|
+
writeConfig({ token: data.token, userId: data.userId, email: data.email });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,uGAAuG;AACvG,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAE7E;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a PKCE code verifier: 32 random bytes encoded as URL-safe Base64.
|
|
3
|
+
* Output is 43 characters, within RFC 7636 range of 43–128 chars.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateCodeVerifier(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Derives the PKCE code challenge from a verifier using SHA-256.
|
|
8
|
+
* Returns URL-safe Base64 without '=' padding (RFC 4648 §5).
|
|
9
|
+
* This is synchronous — crypto.createHash is not async in Node.js.
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateCodeChallenge(verifier: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generates a random state token for CSRF protection.
|
|
14
|
+
* Returns 32 hex characters (16 random bytes encoded as hex).
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateState(): string;
|
|
17
|
+
//# sourceMappingURL=pkce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/utils/pkce.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as crypto from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a PKCE code verifier: 32 random bytes encoded as URL-safe Base64.
|
|
4
|
+
* Output is 43 characters, within RFC 7636 range of 43–128 chars.
|
|
5
|
+
*/
|
|
6
|
+
export function generateCodeVerifier() {
|
|
7
|
+
return crypto.randomBytes(32).toString('base64url');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Derives the PKCE code challenge from a verifier using SHA-256.
|
|
11
|
+
* Returns URL-safe Base64 without '=' padding (RFC 4648 §5).
|
|
12
|
+
* This is synchronous — crypto.createHash is not async in Node.js.
|
|
13
|
+
*/
|
|
14
|
+
export function generateCodeChallenge(verifier) {
|
|
15
|
+
return crypto
|
|
16
|
+
.createHash('sha256')
|
|
17
|
+
.update(verifier)
|
|
18
|
+
.digest()
|
|
19
|
+
.toString('base64url');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generates a random state token for CSRF protection.
|
|
23
|
+
* Returns 32 hex characters (16 random bytes encoded as hex).
|
|
24
|
+
*/
|
|
25
|
+
export function generateState() {
|
|
26
|
+
return crypto.randomBytes(16).toString('hex');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=pkce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/utils/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,MAAM;SACV,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the first available TCP port starting at `startPort`.
|
|
3
|
+
* Probes up to 100 consecutive ports. Binds to 127.0.0.1 only (not 0.0.0.0).
|
|
4
|
+
* Rejects with an Error if no port is available in the range.
|
|
5
|
+
*/
|
|
6
|
+
export declare function findAvailablePort(startPort: number): Promise<number>;
|
|
7
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as net from 'node:net';
|
|
2
|
+
/**
|
|
3
|
+
* Finds the first available TCP port starting at `startPort`.
|
|
4
|
+
* Probes up to 100 consecutive ports. Binds to 127.0.0.1 only (not 0.0.0.0).
|
|
5
|
+
* Rejects with an Error if no port is available in the range.
|
|
6
|
+
*/
|
|
7
|
+
export function findAvailablePort(startPort) {
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
let attempt = 0;
|
|
10
|
+
function tryPort(port) {
|
|
11
|
+
if (attempt >= 100) {
|
|
12
|
+
reject(new Error(`No available port found in range ${startPort}–${startPort + 99}`));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
attempt++;
|
|
16
|
+
const server = net.createServer();
|
|
17
|
+
server.once('error', (err) => {
|
|
18
|
+
server.close();
|
|
19
|
+
if (err.code === 'EADDRINUSE') {
|
|
20
|
+
tryPort(port + 1);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
reject(err);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
server.listen(port, '127.0.0.1', () => {
|
|
27
|
+
server.close(() => resolve(port));
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
tryPort(startPort);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,SAAS,OAAO,CAAC,IAAY;YAC3B,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;gBACnB,MAAM,CACJ,IAAI,KAAK,CACP,oCAAoC,SAAS,IAAI,SAAS,GAAG,EAAE,EAAE,CAClE,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;YAEV,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAElC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;gBAClD,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC"}
|