iosm-cli 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +37 -3
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +4 -2
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/agent-profiles.d.ts.map +1 -1
  7. package/dist/core/agent-profiles.js +1 -0
  8. package/dist/core/agent-profiles.js.map +1 -1
  9. package/dist/core/agent-session.d.ts.map +1 -1
  10. package/dist/core/agent-session.js +3 -0
  11. package/dist/core/agent-session.js.map +1 -1
  12. package/dist/core/blast.d.ts +62 -0
  13. package/dist/core/blast.d.ts.map +1 -0
  14. package/dist/core/blast.js +448 -0
  15. package/dist/core/blast.js.map +1 -0
  16. package/dist/core/contract.d.ts +54 -0
  17. package/dist/core/contract.d.ts.map +1 -0
  18. package/dist/core/contract.js +300 -0
  19. package/dist/core/contract.js.map +1 -0
  20. package/dist/core/sdk.d.ts +3 -3
  21. package/dist/core/sdk.d.ts.map +1 -1
  22. package/dist/core/sdk.js +11 -19
  23. package/dist/core/sdk.js.map +1 -1
  24. package/dist/core/semantic/chunking.d.ts +10 -0
  25. package/dist/core/semantic/chunking.d.ts.map +1 -0
  26. package/dist/core/semantic/chunking.js +82 -0
  27. package/dist/core/semantic/chunking.js.map +1 -0
  28. package/dist/core/semantic/cli.d.ts +23 -0
  29. package/dist/core/semantic/cli.d.ts.map +1 -0
  30. package/dist/core/semantic/cli.js +86 -0
  31. package/dist/core/semantic/cli.js.map +1 -0
  32. package/dist/core/semantic/config.d.ts +8 -0
  33. package/dist/core/semantic/config.d.ts.map +1 -0
  34. package/dist/core/semantic/config.js +266 -0
  35. package/dist/core/semantic/config.js.map +1 -0
  36. package/dist/core/semantic/index-store.d.ts +21 -0
  37. package/dist/core/semantic/index-store.d.ts.map +1 -0
  38. package/dist/core/semantic/index-store.js +73 -0
  39. package/dist/core/semantic/index-store.js.map +1 -0
  40. package/dist/core/semantic/index.d.ts +8 -0
  41. package/dist/core/semantic/index.d.ts.map +1 -0
  42. package/dist/core/semantic/index.js +7 -0
  43. package/dist/core/semantic/index.js.map +1 -0
  44. package/dist/core/semantic/providers.d.ts +22 -0
  45. package/dist/core/semantic/providers.d.ts.map +1 -0
  46. package/dist/core/semantic/providers.js +317 -0
  47. package/dist/core/semantic/providers.js.map +1 -0
  48. package/dist/core/semantic/runtime.d.ts +32 -0
  49. package/dist/core/semantic/runtime.d.ts.map +1 -0
  50. package/dist/core/semantic/runtime.js +510 -0
  51. package/dist/core/semantic/runtime.js.map +1 -0
  52. package/dist/core/semantic/types.d.ts +157 -0
  53. package/dist/core/semantic/types.d.ts.map +1 -0
  54. package/dist/core/semantic/types.js +23 -0
  55. package/dist/core/semantic/types.js.map +1 -0
  56. package/dist/core/shadow-guard.d.ts +30 -0
  57. package/dist/core/shadow-guard.d.ts.map +1 -0
  58. package/dist/core/shadow-guard.js +81 -0
  59. package/dist/core/shadow-guard.js.map +1 -0
  60. package/dist/core/singular.d.ts +73 -0
  61. package/dist/core/singular.d.ts.map +1 -0
  62. package/dist/core/singular.js +413 -0
  63. package/dist/core/singular.js.map +1 -0
  64. package/dist/core/slash-commands.d.ts.map +1 -1
  65. package/dist/core/slash-commands.js +12 -0
  66. package/dist/core/slash-commands.js.map +1 -1
  67. package/dist/core/system-prompt.d.ts.map +1 -1
  68. package/dist/core/system-prompt.js +21 -3
  69. package/dist/core/system-prompt.js.map +1 -1
  70. package/dist/core/tools/ast-grep.js +1 -1
  71. package/dist/core/tools/ast-grep.js.map +1 -1
  72. package/dist/core/tools/comby.js +1 -1
  73. package/dist/core/tools/comby.js.map +1 -1
  74. package/dist/core/tools/index.d.ts +9 -0
  75. package/dist/core/tools/index.d.ts.map +1 -1
  76. package/dist/core/tools/index.js +6 -0
  77. package/dist/core/tools/index.js.map +1 -1
  78. package/dist/core/tools/rg.js +1 -1
  79. package/dist/core/tools/rg.js.map +1 -1
  80. package/dist/core/tools/semantic-search.d.ts +21 -0
  81. package/dist/core/tools/semantic-search.d.ts.map +1 -0
  82. package/dist/core/tools/semantic-search.js +123 -0
  83. package/dist/core/tools/semantic-search.js.map +1 -0
  84. package/dist/index.d.ts +4 -2
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +3 -2
  87. package/dist/index.js.map +1 -1
  88. package/dist/main.d.ts.map +1 -1
  89. package/dist/main.js +124 -0
  90. package/dist/main.js.map +1 -1
  91. package/dist/modes/interactive/components/custom-editor.d.ts +8 -0
  92. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/custom-editor.js +70 -1
  94. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  95. package/dist/modes/interactive/interactive-mode.d.ts +58 -0
  96. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  97. package/dist/modes/interactive/interactive-mode.js +2067 -104
  98. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  99. package/docs/cli-reference.md +36 -1
  100. package/docs/configuration.md +79 -2
  101. package/docs/getting-started.md +1 -0
  102. package/docs/interactive-mode.md +135 -1
  103. package/package.json +1 -1
@@ -0,0 +1,157 @@
1
+ export type SemanticScope = "user" | "project";
2
+ export type SemanticProviderType = "openrouter" | "ollama" | "custom_openai";
3
+ export type SemanticAction = "status" | "index" | "rebuild" | "query";
4
+ export type SemanticStaleReason = "missing_index" | "provider_changed" | "chunking_changed" | "index_filters_changed" | "files_changed" | "dimension_mismatch";
5
+ export interface SemanticProviderConfig {
6
+ type: SemanticProviderType;
7
+ model: string;
8
+ baseUrl?: string;
9
+ apiKeyEnv?: string;
10
+ headers?: Record<string, string>;
11
+ batchSize: number;
12
+ timeoutMs: number;
13
+ }
14
+ export interface SemanticIndexConfig {
15
+ includeGlobs: string[];
16
+ excludeGlobs: string[];
17
+ chunkMaxChars: number;
18
+ chunkOverlapChars: number;
19
+ maxFileBytes: number;
20
+ maxFiles: number;
21
+ }
22
+ export interface SemanticSearchConfig {
23
+ enabled: boolean;
24
+ autoIndex: boolean;
25
+ provider: SemanticProviderConfig;
26
+ index: SemanticIndexConfig;
27
+ }
28
+ export interface SemanticConfigFile {
29
+ semanticSearch?: Partial<{
30
+ enabled: boolean;
31
+ autoIndex: boolean;
32
+ provider: Partial<{
33
+ type: SemanticProviderType;
34
+ model: string;
35
+ baseUrl: string;
36
+ apiKeyEnv: string;
37
+ headers: Record<string, string>;
38
+ batchSize: number;
39
+ timeoutMs: number;
40
+ }>;
41
+ index: Partial<{
42
+ includeGlobs: string[];
43
+ excludeGlobs: string[];
44
+ chunkMaxChars: number;
45
+ chunkOverlapChars: number;
46
+ maxFileBytes: number;
47
+ maxFiles: number;
48
+ }>;
49
+ }>;
50
+ }
51
+ export interface SemanticScopedLoadResult {
52
+ scope: SemanticScope;
53
+ path: string;
54
+ file: SemanticConfigFile;
55
+ error?: Error;
56
+ }
57
+ export interface SemanticMergedConfig {
58
+ config?: SemanticSearchConfig;
59
+ errors: string[];
60
+ scoped: SemanticScopedLoadResult[];
61
+ }
62
+ export interface SemanticFileFingerprint {
63
+ path: string;
64
+ size: number;
65
+ mtimeMs: number;
66
+ hash: string;
67
+ chunks: string[];
68
+ }
69
+ export interface SemanticIndexMeta {
70
+ version: 1;
71
+ cwd: string;
72
+ projectHash: string;
73
+ providerFingerprint: string;
74
+ providerType: SemanticProviderType;
75
+ model: string;
76
+ dimension: number;
77
+ builtAt: string;
78
+ chunkConfigFingerprint: string;
79
+ indexFilterFingerprint: string;
80
+ fileMap: Record<string, SemanticFileFingerprint>;
81
+ }
82
+ export interface SemanticIndexedChunk {
83
+ id: string;
84
+ path: string;
85
+ lineStart: number;
86
+ lineEnd: number;
87
+ preview: string;
88
+ hash: string;
89
+ }
90
+ export interface SemanticIndexedVector {
91
+ id: string;
92
+ vector: number[];
93
+ norm: number;
94
+ }
95
+ export interface SemanticChunkForEmbedding extends SemanticIndexedChunk {
96
+ text: string;
97
+ }
98
+ export interface SemanticIndexOperationResult {
99
+ action: "index" | "rebuild";
100
+ indexPath: string;
101
+ durationMs: number;
102
+ processedFiles: number;
103
+ newFiles: number;
104
+ changedFiles: number;
105
+ removedFiles: number;
106
+ reusedFiles: number;
107
+ chunks: number;
108
+ dimension: number;
109
+ builtAt: string;
110
+ }
111
+ export interface SemanticStatusResult {
112
+ action: "status";
113
+ configured: boolean;
114
+ enabled: boolean;
115
+ autoIndex: boolean;
116
+ indexed: boolean;
117
+ stale: boolean;
118
+ staleReason?: SemanticStaleReason;
119
+ provider?: SemanticProviderType;
120
+ model?: string;
121
+ files: number;
122
+ chunks: number;
123
+ dimension?: number;
124
+ ageSeconds?: number;
125
+ indexPath: string;
126
+ configPathUser: string;
127
+ configPathProject: string;
128
+ }
129
+ export interface SemanticQueryHit {
130
+ score: number;
131
+ path: string;
132
+ lineStart: number;
133
+ lineEnd: number;
134
+ snippet: string;
135
+ }
136
+ export interface SemanticQueryResult {
137
+ action: "query";
138
+ query: string;
139
+ topK: number;
140
+ autoRefreshed: boolean;
141
+ hits: SemanticQueryHit[];
142
+ }
143
+ export type SemanticToolResult = SemanticStatusResult | SemanticIndexOperationResult | SemanticQueryResult;
144
+ export declare class SemanticConfigError extends Error {
145
+ }
146
+ export declare class SemanticConfigMissingError extends Error {
147
+ readonly userConfigPath: string;
148
+ readonly projectConfigPath: string;
149
+ constructor(userConfigPath: string, projectConfigPath: string);
150
+ }
151
+ export declare class SemanticRebuildRequiredError extends Error {
152
+ constructor(message: string);
153
+ }
154
+ export declare class SemanticIndexRequiredError extends Error {
155
+ constructor(message: string);
156
+ }
157
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export class SemanticConfigError extends Error {
2
+ }
3
+ export class SemanticConfigMissingError extends Error {
4
+ constructor(userConfigPath, projectConfigPath) {
5
+ super(`Semantic search config not found. Create one with /semantic setup or write ${userConfigPath} (user) or ${projectConfigPath} (project).`);
6
+ this.name = "SemanticConfigMissingError";
7
+ this.userConfigPath = userConfigPath;
8
+ this.projectConfigPath = projectConfigPath;
9
+ }
10
+ }
11
+ export class SemanticRebuildRequiredError extends Error {
12
+ constructor(message) {
13
+ super(message);
14
+ this.name = "SemanticRebuildRequiredError";
15
+ }
16
+ }
17
+ export class SemanticIndexRequiredError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = "SemanticIndexRequiredError";
21
+ }
22
+ }
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/semantic/types.ts"],"names":[],"mappings":"AAyKA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAIpD,YAAY,cAAsB,EAAE,iBAAyB;QAC5D,KAAK,CACJ,8EAA8E,cAAc,cAAc,iBAAiB,aAAa,CACxI,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC5C,CAAC;CACD;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACtD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC5C,CAAC;CACD;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACpD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC1C,CAAC;CACD","sourcesContent":["export type SemanticScope = \"user\" | \"project\";\nexport type SemanticProviderType = \"openrouter\" | \"ollama\" | \"custom_openai\";\nexport type SemanticAction = \"status\" | \"index\" | \"rebuild\" | \"query\";\nexport type SemanticStaleReason =\n\t| \"missing_index\"\n\t| \"provider_changed\"\n\t| \"chunking_changed\"\n\t| \"index_filters_changed\"\n\t| \"files_changed\"\n\t| \"dimension_mismatch\";\n\nexport interface SemanticProviderConfig {\n\ttype: SemanticProviderType;\n\tmodel: string;\n\tbaseUrl?: string;\n\tapiKeyEnv?: string;\n\theaders?: Record<string, string>;\n\tbatchSize: number;\n\ttimeoutMs: number;\n}\n\nexport interface SemanticIndexConfig {\n\tincludeGlobs: string[];\n\texcludeGlobs: string[];\n\tchunkMaxChars: number;\n\tchunkOverlapChars: number;\n\tmaxFileBytes: number;\n\tmaxFiles: number;\n}\n\nexport interface SemanticSearchConfig {\n\tenabled: boolean;\n\tautoIndex: boolean;\n\tprovider: SemanticProviderConfig;\n\tindex: SemanticIndexConfig;\n}\n\nexport interface SemanticConfigFile {\n\tsemanticSearch?: Partial<{\n\t\tenabled: boolean;\n\t\tautoIndex: boolean;\n\t\tprovider: Partial<{\n\t\t\ttype: SemanticProviderType;\n\t\t\tmodel: string;\n\t\t\tbaseUrl: string;\n\t\t\tapiKeyEnv: string;\n\t\t\theaders: Record<string, string>;\n\t\t\tbatchSize: number;\n\t\t\ttimeoutMs: number;\n\t\t}>;\n\t\tindex: Partial<{\n\t\t\tincludeGlobs: string[];\n\t\t\texcludeGlobs: string[];\n\t\t\tchunkMaxChars: number;\n\t\t\tchunkOverlapChars: number;\n\t\t\tmaxFileBytes: number;\n\t\t\tmaxFiles: number;\n\t\t}>;\n\t}>;\n}\n\nexport interface SemanticScopedLoadResult {\n\tscope: SemanticScope;\n\tpath: string;\n\tfile: SemanticConfigFile;\n\terror?: Error;\n}\n\nexport interface SemanticMergedConfig {\n\tconfig?: SemanticSearchConfig;\n\terrors: string[];\n\tscoped: SemanticScopedLoadResult[];\n}\n\nexport interface SemanticFileFingerprint {\n\tpath: string;\n\tsize: number;\n\tmtimeMs: number;\n\thash: string;\n\tchunks: string[];\n}\n\nexport interface SemanticIndexMeta {\n\tversion: 1;\n\tcwd: string;\n\tprojectHash: string;\n\tproviderFingerprint: string;\n\tproviderType: SemanticProviderType;\n\tmodel: string;\n\tdimension: number;\n\tbuiltAt: string;\n\tchunkConfigFingerprint: string;\n\tindexFilterFingerprint: string;\n\tfileMap: Record<string, SemanticFileFingerprint>;\n}\n\nexport interface SemanticIndexedChunk {\n\tid: string;\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tpreview: string;\n\thash: string;\n}\n\nexport interface SemanticIndexedVector {\n\tid: string;\n\tvector: number[];\n\tnorm: number;\n}\n\nexport interface SemanticChunkForEmbedding extends SemanticIndexedChunk {\n\ttext: string;\n}\n\nexport interface SemanticIndexOperationResult {\n\taction: \"index\" | \"rebuild\";\n\tindexPath: string;\n\tdurationMs: number;\n\tprocessedFiles: number;\n\tnewFiles: number;\n\tchangedFiles: number;\n\tremovedFiles: number;\n\treusedFiles: number;\n\tchunks: number;\n\tdimension: number;\n\tbuiltAt: string;\n}\n\nexport interface SemanticStatusResult {\n\taction: \"status\";\n\tconfigured: boolean;\n\tenabled: boolean;\n\tautoIndex: boolean;\n\tindexed: boolean;\n\tstale: boolean;\n\tstaleReason?: SemanticStaleReason;\n\tprovider?: SemanticProviderType;\n\tmodel?: string;\n\tfiles: number;\n\tchunks: number;\n\tdimension?: number;\n\tageSeconds?: number;\n\tindexPath: string;\n\tconfigPathUser: string;\n\tconfigPathProject: string;\n}\n\nexport interface SemanticQueryHit {\n\tscore: number;\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tsnippet: string;\n}\n\nexport interface SemanticQueryResult {\n\taction: \"query\";\n\tquery: string;\n\ttopK: number;\n\tautoRefreshed: boolean;\n\thits: SemanticQueryHit[];\n}\n\nexport type SemanticToolResult =\n\t| SemanticStatusResult\n\t| SemanticIndexOperationResult\n\t| SemanticQueryResult;\n\nexport class SemanticConfigError extends Error {}\n\nexport class SemanticConfigMissingError extends Error {\n\treadonly userConfigPath: string;\n\treadonly projectConfigPath: string;\n\n\tconstructor(userConfigPath: string, projectConfigPath: string) {\n\t\tsuper(\n\t\t\t`Semantic search config not found. Create one with /semantic setup or write ${userConfigPath} (user) or ${projectConfigPath} (project).`,\n\t\t);\n\t\tthis.name = \"SemanticConfigMissingError\";\n\t\tthis.userConfigPath = userConfigPath;\n\t\tthis.projectConfigPath = projectConfigPath;\n\t}\n}\n\nexport class SemanticRebuildRequiredError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SemanticRebuildRequiredError\";\n\t}\n}\n\nexport class SemanticIndexRequiredError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SemanticIndexRequiredError\";\n\t}\n}\n"]}
@@ -0,0 +1,30 @@
1
+ export interface ShadowGuardOptions {
2
+ getActiveTools: () => string[];
3
+ getAllTools: () => string[];
4
+ setActiveTools: (toolNames: string[]) => void;
5
+ }
6
+ export interface ShadowGuardState {
7
+ enabled: boolean;
8
+ strict: boolean;
9
+ blockedTools: string[];
10
+ }
11
+ export declare class ShadowGuard {
12
+ private readonly getActiveTools;
13
+ private readonly getAllTools;
14
+ private readonly setActiveTools;
15
+ private enabled;
16
+ private strict;
17
+ private restoreToolNames;
18
+ constructor(options: ShadowGuardOptions);
19
+ getState(): ShadowGuardState;
20
+ isEnabled(): boolean;
21
+ getRestoreToolNames(): string[];
22
+ setRestoreToolNames(toolNames: string[]): void;
23
+ enable(): ShadowGuardState;
24
+ disable(): ShadowGuardState;
25
+ reset(): void;
26
+ enforceReadOnlyToolsIfEnabled(): void;
27
+ shouldDenyTool(toolName: string): boolean;
28
+ private applyReadOnlyTools;
29
+ }
30
+ //# sourceMappingURL=shadow-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-guard.d.ts","sourceRoot":"","sources":["../../src/core/shadow-guard.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IAClC,cAAc,EAAE,MAAM,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAAgB;gBAE5B,OAAO,EAAE,kBAAkB;IAMvC,QAAQ,IAAI,gBAAgB;IAQ5B,SAAS,IAAI,OAAO;IAIpB,mBAAmB,IAAI,MAAM,EAAE;IAI/B,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAI9C,MAAM,IAAI,gBAAgB;IAS1B,OAAO,IAAI,gBAAgB;IAa3B,KAAK,IAAI,IAAI;IAKb,6BAA6B,IAAI,IAAI;IAKrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzC,OAAO,CAAC,kBAAkB;CAS1B"}
@@ -0,0 +1,81 @@
1
+ import { readOnlyTools } from "./tools/index.js";
2
+ const SHADOW_MUTATING_TOOLS = new Set(["edit", "write", "bash", "task"]);
3
+ const SHADOW_SAFE_ADDITIONAL_TOOLS = new Set(["todo_read", "ask_user"]);
4
+ function uniqueTools(names) {
5
+ const seen = new Set();
6
+ const result = [];
7
+ for (const name of names) {
8
+ if (!name || seen.has(name))
9
+ continue;
10
+ seen.add(name);
11
+ result.push(name);
12
+ }
13
+ return result;
14
+ }
15
+ export class ShadowGuard {
16
+ constructor(options) {
17
+ this.enabled = false;
18
+ this.strict = true;
19
+ this.restoreToolNames = [];
20
+ this.getActiveTools = options.getActiveTools;
21
+ this.getAllTools = options.getAllTools;
22
+ this.setActiveTools = options.setActiveTools;
23
+ }
24
+ getState() {
25
+ return {
26
+ enabled: this.enabled,
27
+ strict: this.strict,
28
+ blockedTools: [...SHADOW_MUTATING_TOOLS],
29
+ };
30
+ }
31
+ isEnabled() {
32
+ return this.enabled;
33
+ }
34
+ getRestoreToolNames() {
35
+ return [...this.restoreToolNames];
36
+ }
37
+ setRestoreToolNames(toolNames) {
38
+ this.restoreToolNames = uniqueTools(toolNames);
39
+ }
40
+ enable() {
41
+ if (!this.enabled) {
42
+ this.restoreToolNames = uniqueTools(this.getActiveTools());
43
+ this.enabled = true;
44
+ }
45
+ this.applyReadOnlyTools();
46
+ return this.getState();
47
+ }
48
+ disable() {
49
+ if (!this.enabled) {
50
+ return this.getState();
51
+ }
52
+ const restore = uniqueTools(this.restoreToolNames);
53
+ if (restore.length > 0) {
54
+ this.setActiveTools(restore);
55
+ }
56
+ this.enabled = false;
57
+ return this.getState();
58
+ }
59
+ reset() {
60
+ this.enabled = false;
61
+ this.restoreToolNames = [];
62
+ }
63
+ enforceReadOnlyToolsIfEnabled() {
64
+ if (!this.enabled)
65
+ return;
66
+ this.applyReadOnlyTools();
67
+ }
68
+ shouldDenyTool(toolName) {
69
+ return this.enabled && this.strict && SHADOW_MUTATING_TOOLS.has(toolName);
70
+ }
71
+ applyReadOnlyTools() {
72
+ const availableTools = new Set(this.getAllTools());
73
+ const whitelist = new Set([
74
+ ...readOnlyTools.map((tool) => tool.name),
75
+ ...SHADOW_SAFE_ADDITIONAL_TOOLS,
76
+ ]);
77
+ const nextActive = [...availableTools].filter((toolName) => whitelist.has(toolName));
78
+ this.setActiveTools(uniqueTools(nextActive));
79
+ }
80
+ }
81
+ //# sourceMappingURL=shadow-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-guard.js","sourceRoot":"","sources":["../../src/core/shadow-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import { readOnlyTools } from \"./tools/index.js\";\n\nconst SHADOW_MUTATING_TOOLS = new Set([\"edit\", \"write\", \"bash\", \"task\"]);\nconst SHADOW_SAFE_ADDITIONAL_TOOLS = new Set([\"todo_read\", \"ask_user\"]);\n\nexport interface ShadowGuardOptions {\n\tgetActiveTools: () => string[];\n\tgetAllTools: () => string[];\n\tsetActiveTools: (toolNames: string[]) => void;\n}\n\nexport interface ShadowGuardState {\n\tenabled: boolean;\n\tstrict: boolean;\n\tblockedTools: string[];\n}\n\nfunction uniqueTools(names: string[]): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const name of names) {\n\t\tif (!name || seen.has(name)) continue;\n\t\tseen.add(name);\n\t\tresult.push(name);\n\t}\n\treturn result;\n}\n\nexport class ShadowGuard {\n\tprivate readonly getActiveTools: () => string[];\n\tprivate readonly getAllTools: () => string[];\n\tprivate readonly setActiveTools: (toolNames: string[]) => void;\n\tprivate enabled = false;\n\tprivate strict = true;\n\tprivate restoreToolNames: string[] = [];\n\n\tconstructor(options: ShadowGuardOptions) {\n\t\tthis.getActiveTools = options.getActiveTools;\n\t\tthis.getAllTools = options.getAllTools;\n\t\tthis.setActiveTools = options.setActiveTools;\n\t}\n\n\tgetState(): ShadowGuardState {\n\t\treturn {\n\t\t\tenabled: this.enabled,\n\t\t\tstrict: this.strict,\n\t\t\tblockedTools: [...SHADOW_MUTATING_TOOLS],\n\t\t};\n\t}\n\n\tisEnabled(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tgetRestoreToolNames(): string[] {\n\t\treturn [...this.restoreToolNames];\n\t}\n\n\tsetRestoreToolNames(toolNames: string[]): void {\n\t\tthis.restoreToolNames = uniqueTools(toolNames);\n\t}\n\n\tenable(): ShadowGuardState {\n\t\tif (!this.enabled) {\n\t\t\tthis.restoreToolNames = uniqueTools(this.getActiveTools());\n\t\t\tthis.enabled = true;\n\t\t}\n\t\tthis.applyReadOnlyTools();\n\t\treturn this.getState();\n\t}\n\n\tdisable(): ShadowGuardState {\n\t\tif (!this.enabled) {\n\t\t\treturn this.getState();\n\t\t}\n\n\t\tconst restore = uniqueTools(this.restoreToolNames);\n\t\tif (restore.length > 0) {\n\t\t\tthis.setActiveTools(restore);\n\t\t}\n\t\tthis.enabled = false;\n\t\treturn this.getState();\n\t}\n\n\treset(): void {\n\t\tthis.enabled = false;\n\t\tthis.restoreToolNames = [];\n\t}\n\n\tenforceReadOnlyToolsIfEnabled(): void {\n\t\tif (!this.enabled) return;\n\t\tthis.applyReadOnlyTools();\n\t}\n\n\tshouldDenyTool(toolName: string): boolean {\n\t\treturn this.enabled && this.strict && SHADOW_MUTATING_TOOLS.has(toolName);\n\t}\n\n\tprivate applyReadOnlyTools(): void {\n\t\tconst availableTools = new Set(this.getAllTools());\n\t\tconst whitelist = new Set<string>([\n\t\t\t...readOnlyTools.map((tool) => tool.name),\n\t\t\t...SHADOW_SAFE_ADDITIONAL_TOOLS,\n\t\t]);\n\t\tconst nextActive = [...availableTools].filter((toolName) => whitelist.has(toolName));\n\t\tthis.setActiveTools(uniqueTools(nextActive));\n\t}\n}\n"]}
@@ -0,0 +1,73 @@
1
+ import type { EngineeringContract } from "./contract.js";
2
+ export type SingularComplexity = "low" | "medium" | "high";
3
+ export type SingularBlastRadius = "low" | "medium" | "high";
4
+ export type SingularRecommendation = "implement_now" | "implement_incrementally" | "defer";
5
+ export type SingularStageFit = "needed_now" | "optional_now" | "later";
6
+ export interface SingularImpactAnalysis {
7
+ codebase: string;
8
+ delivery: string;
9
+ risks: string;
10
+ operations: string;
11
+ }
12
+ export interface SingularOption {
13
+ id: string;
14
+ title: string;
15
+ summary: string;
16
+ complexity: SingularComplexity;
17
+ blast_radius: SingularBlastRadius;
18
+ suggested_files: string[];
19
+ plan: string[];
20
+ pros: string[];
21
+ cons: string[];
22
+ when_to_choose?: string;
23
+ }
24
+ export interface SingularAnalysisResult {
25
+ runId: string;
26
+ request: string;
27
+ generatedAt: string;
28
+ scannedFiles: number;
29
+ sourceFiles: number;
30
+ testFiles: number;
31
+ matchedFiles: string[];
32
+ baselineComplexity: SingularComplexity;
33
+ baselineBlastRadius: SingularBlastRadius;
34
+ recommendation: SingularRecommendation;
35
+ recommendationReason: string;
36
+ stageFit?: SingularStageFit;
37
+ stageFitReason?: string;
38
+ impactAnalysis?: SingularImpactAnalysis;
39
+ contractSignals: string[];
40
+ options: SingularOption[];
41
+ }
42
+ export interface SingularLastRun {
43
+ runId: string;
44
+ analysisPath: string;
45
+ metaPath?: string;
46
+ request?: string;
47
+ recommendation?: SingularRecommendation;
48
+ generatedAt?: string;
49
+ }
50
+ export interface SingularAnalyzeOptions {
51
+ request: string;
52
+ contract?: EngineeringContract;
53
+ autosave?: boolean;
54
+ }
55
+ export interface SingularServiceOptions {
56
+ cwd: string;
57
+ }
58
+ export declare class SingularService {
59
+ private readonly cwd;
60
+ constructor(options: SingularServiceOptions);
61
+ getAnalysesRoot(): string;
62
+ getLastRun(): SingularLastRun | undefined;
63
+ analyze(options: SingularAnalyzeOptions): Promise<SingularAnalysisResult>;
64
+ saveAnalysis(result: SingularAnalysisResult): void;
65
+ private saveRunArtifacts;
66
+ private scanRepository;
67
+ private walkFiles;
68
+ private collectContractSignals;
69
+ private estimateComplexityScore;
70
+ private buildRecommendation;
71
+ private buildOptions;
72
+ }
73
+ //# sourceMappingURL=singular.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singular.d.ts","sourceRoot":"","sources":["../../src/core/singular.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3D,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,yBAAyB,GAAG,OAAO,CAAC;AAC3F,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,YAAY,EAAE,mBAAmB,CAAC;IAClC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,cAAc,EAAE,sBAAsB,CAAC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,GAAG,EAAE,MAAM,CAAC;CACZ;AAoGD,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,OAAO,EAAE,sBAAsB;IAI3C,eAAe,IAAI,MAAM;IAIzB,UAAU,IAAI,eAAe,GAAG,SAAS;IA4CnC,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoD/E,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAIlD,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,SAAS;IAsCjB,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,uBAAuB;IA8B/B,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,YAAY;CAmEpB"}