@google/gemini-cli-core 0.0.8999999999999 → 0.0.8999999999999999

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 (86) hide show
  1. package/README.md +10 -4
  2. package/dist/index.d.ts +3 -2
  3. package/dist/index.js +3 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/config/config.d.ts +7 -0
  6. package/dist/src/config/config.js +29 -1
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/core/client.js +1 -2
  9. package/dist/src/core/client.js.map +1 -1
  10. package/dist/src/core/client.test.js +0 -39
  11. package/dist/src/core/client.test.js.map +1 -1
  12. package/dist/src/core/geminiChat.d.ts +4 -3
  13. package/dist/src/core/geminiChat.js +44 -52
  14. package/dist/src/core/geminiChat.js.map +1 -1
  15. package/dist/src/core/geminiChat.test.js +115 -26
  16. package/dist/src/core/geminiChat.test.js.map +1 -1
  17. package/dist/src/generated/git-commit.d.ts +2 -2
  18. package/dist/src/generated/git-commit.js +2 -2
  19. package/dist/src/generated/git-commit.js.map +1 -1
  20. package/dist/src/ide/detect-ide.d.ts +4 -2
  21. package/dist/src/ide/detect-ide.js +7 -1
  22. package/dist/src/ide/detect-ide.js.map +1 -1
  23. package/dist/src/ide/detect-ide.test.js +23 -0
  24. package/dist/src/ide/detect-ide.test.js.map +1 -1
  25. package/dist/src/ide/ide-client.d.ts +2 -1
  26. package/dist/src/ide/ide-client.js +22 -17
  27. package/dist/src/ide/ide-client.js.map +1 -1
  28. package/dist/src/ide/ide-client.test.js +2 -2
  29. package/dist/src/ide/ide-client.test.js.map +1 -1
  30. package/dist/src/index.d.ts +1 -0
  31. package/dist/src/index.js +1 -0
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/routing/strategies/compositeStrategy.js +4 -3
  34. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
  35. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +6 -2
  36. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +34 -0
  37. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  38. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
  39. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -0
  40. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  41. package/dist/src/telemetry/config.d.ts +31 -0
  42. package/dist/src/telemetry/config.js +76 -0
  43. package/dist/src/telemetry/config.js.map +1 -0
  44. package/dist/src/telemetry/config.test.d.ts +6 -0
  45. package/dist/src/telemetry/config.test.js +124 -0
  46. package/dist/src/telemetry/config.test.js.map +1 -0
  47. package/dist/src/telemetry/constants.d.ts +3 -0
  48. package/dist/src/telemetry/constants.js +3 -0
  49. package/dist/src/telemetry/constants.js.map +1 -1
  50. package/dist/src/telemetry/index.d.ts +2 -1
  51. package/dist/src/telemetry/index.js +2 -1
  52. package/dist/src/telemetry/index.js.map +1 -1
  53. package/dist/src/telemetry/loggers.d.ts +3 -1
  54. package/dist/src/telemetry/loggers.js +36 -2
  55. package/dist/src/telemetry/loggers.js.map +1 -1
  56. package/dist/src/telemetry/loggers.test.js +31 -3
  57. package/dist/src/telemetry/loggers.test.js.map +1 -1
  58. package/dist/src/telemetry/metrics.d.ts +2 -1
  59. package/dist/src/telemetry/metrics.js +14 -1
  60. package/dist/src/telemetry/metrics.js.map +1 -1
  61. package/dist/src/telemetry/sdk.js +4 -1
  62. package/dist/src/telemetry/sdk.js.map +1 -1
  63. package/dist/src/telemetry/sdk.test.js +13 -0
  64. package/dist/src/telemetry/sdk.test.js.map +1 -1
  65. package/dist/src/telemetry/types.d.ts +18 -3
  66. package/dist/src/telemetry/types.js +28 -2
  67. package/dist/src/telemetry/types.js.map +1 -1
  68. package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
  69. package/dist/src/tools/message-bus-integration.test.js +183 -0
  70. package/dist/src/tools/message-bus-integration.test.js.map +1 -0
  71. package/dist/src/tools/tools.d.ts +11 -3
  72. package/dist/src/tools/tools.js +94 -3
  73. package/dist/src/tools/tools.js.map +1 -1
  74. package/dist/src/tools/write-todos.d.ts +25 -0
  75. package/dist/src/tools/write-todos.js +150 -0
  76. package/dist/src/tools/write-todos.js.map +1 -0
  77. package/dist/src/tools/write-todos.test.d.ts +6 -0
  78. package/dist/src/tools/write-todos.test.js +89 -0
  79. package/dist/src/tools/write-todos.test.js.map +1 -0
  80. package/dist/src/utils/schemaValidator.js +11 -1
  81. package/dist/src/utils/schemaValidator.js.map +1 -1
  82. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  83. package/dist/src/utils/schemaValidator.test.js +113 -0
  84. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it } from 'vitest';
7
+ import { WriteTodosTool } from './write-todos.js';
8
+ describe('WriteTodosTool', () => {
9
+ const tool = new WriteTodosTool();
10
+ const signal = new AbortController().signal;
11
+ describe('validation', () => {
12
+ it('should not throw for valid parameters', async () => {
13
+ const params = {
14
+ todos: [
15
+ { description: 'Task 1', status: 'pending' },
16
+ { description: 'Task 2', status: 'in_progress' },
17
+ { description: 'Task 3', status: 'completed' },
18
+ ],
19
+ };
20
+ await expect(tool.buildAndExecute(params, signal)).resolves.toBeDefined();
21
+ });
22
+ it('should not throw for an empty list', async () => {
23
+ const params = {
24
+ todos: [],
25
+ };
26
+ await expect(tool.buildAndExecute(params, signal)).resolves.toBeDefined();
27
+ });
28
+ it('should throw an error if todos is not an array', async () => {
29
+ const params = {
30
+ todos: 'not-an-array',
31
+ };
32
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('params/todos must be array');
33
+ });
34
+ it('should throw an error if a todo item is not an object', async () => {
35
+ const params = {
36
+ todos: ['not-an-object'],
37
+ };
38
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('params/todos/0 must be object');
39
+ });
40
+ it('should throw an error if a todo description is missing or empty', async () => {
41
+ const params = {
42
+ todos: [{ description: ' ', status: 'pending' }],
43
+ };
44
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('Each todo must have a non-empty description string');
45
+ });
46
+ it('should throw an error if a todo status is invalid', async () => {
47
+ const params = {
48
+ todos: [{ description: 'Task 1', status: 'invalid-status' }],
49
+ };
50
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('params/todos/0/status must be equal to one of the allowed values');
51
+ });
52
+ it('should throw an error if more than one task is in_progress', async () => {
53
+ const params = {
54
+ todos: [
55
+ { description: 'Task 1', status: 'in_progress' },
56
+ { description: 'Task 2', status: 'in_progress' },
57
+ ],
58
+ };
59
+ await expect(tool.buildAndExecute(params, signal)).rejects.toThrow('Invalid parameters: Only one task can be "in_progress" at a time.');
60
+ });
61
+ });
62
+ describe('execute', () => {
63
+ it('should return a success message for clearing the list', async () => {
64
+ const params = {
65
+ todos: [],
66
+ };
67
+ const result = await tool.buildAndExecute(params, signal);
68
+ expect(result.llmContent).toBe('Successfully cleared the todo list.');
69
+ expect(result.returnDisplay).toBe('Successfully cleared the todo list.');
70
+ });
71
+ it('should return a formatted todo list on success', async () => {
72
+ const params = {
73
+ todos: [
74
+ { description: 'First task', status: 'completed' },
75
+ { description: 'Second task', status: 'in_progress' },
76
+ { description: 'Third task', status: 'pending' },
77
+ ],
78
+ };
79
+ const result = await tool.buildAndExecute(params, signal);
80
+ const expectedOutput = `Successfully updated the todo list. The current list is now:
81
+ 1. [completed] First task
82
+ 2. [in_progress] Second task
83
+ 3. [pending] Third task`;
84
+ expect(result.llmContent).toBe(expectedOutput);
85
+ expect(result.returnDisplay).toBe(expectedOutput);
86
+ });
87
+ });
88
+ });
89
+ //# sourceMappingURL=write-todos.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-todos.test.js","sourceRoot":"","sources":["../../../src/tools/write-todos.test.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,17 @@ import * as addFormats from 'ajv-formats';
8
8
  // Ajv's ESM/CJS interop: use 'any' for compatibility as recommended by Ajv docs
9
9
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
10
  const AjvClass = AjvPkg.default || AjvPkg;
11
- const ajValidator = new AjvClass();
11
+ const ajValidator = new AjvClass(
12
+ // See: https://ajv.js.org/options.html#strict-mode-options
13
+ {
14
+ // strictSchema defaults to true and prevents use of JSON schemas that
15
+ // include unrecognized keywords. The JSON schema spec specifically allows
16
+ // for the use of non-standard keywords and the spec-compliant behavior
17
+ // is to ignore those keywords. Note that setting this to false also
18
+ // allows use of non-standard or custom formats (the unknown format value
19
+ // will be logged but the schema will still be considered valid).
20
+ strictSchema: false,
21
+ });
12
22
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
23
  const addFormatsFunc = addFormats.default || addFormats;
14
24
  addFormatsFunc(ajValidator);
@@ -1 +1 @@
1
- {"version":3,"file":"schemaValidator.js","sourceRoot":"","sources":["../../../src/utils/schemaValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,gFAAgF;AAChF,8DAA8D;AAC9D,MAAM,QAAQ,GAAI,MAAc,CAAC,OAAO,IAAI,MAAM,CAAC;AACnD,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE,CAAC;AACnC,8DAA8D;AAC9D,MAAM,cAAc,GAAI,UAAkB,CAAC,OAAO,IAAI,UAAU,CAAC;AACjE,cAAc,CAAC,WAAW,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,MAA2B,EAAE,IAAa;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,mCAAmC,CAAC;QAC7C,CAAC;QACD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"schemaValidator.js","sourceRoot":"","sources":["../../../src/utils/schemaValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,gFAAgF;AAChF,8DAA8D;AAC9D,MAAM,QAAQ,GAAI,MAAc,CAAC,OAAO,IAAI,MAAM,CAAC;AACnD,MAAM,WAAW,GAAG,IAAI,QAAQ;AAC9B,2DAA2D;AAC3D;IACE,sEAAsE;IACtE,0EAA0E;IAC1E,uEAAuE;IACvE,oEAAoE;IACpE,yEAAyE;IACzE,iEAAiE;IACjE,YAAY,EAAE,KAAK;CACpB,CACF,CAAC;AACF,8DAA8D;AAC9D,MAAM,cAAc,GAAI,UAAkB,CAAC,OAAO,IAAI,UAAU,CAAC;AACjE,cAAc,CAAC,WAAW,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,MAA2B,EAAE,IAAa;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,mCAAmC,CAAC;QAC7C,CAAC;QACD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, expect, it } from 'vitest';
7
+ import { SchemaValidator } from './schemaValidator.js';
8
+ describe('SchemaValidator', () => {
9
+ it('should allow any params if schema is undefined', () => {
10
+ const params = {
11
+ foo: 'bar',
12
+ };
13
+ expect(SchemaValidator.validate(undefined, params)).toBeNull();
14
+ });
15
+ it('rejects null params', () => {
16
+ const schema = {
17
+ type: 'object',
18
+ properties: {
19
+ foo: {
20
+ type: 'string',
21
+ },
22
+ },
23
+ };
24
+ expect(SchemaValidator.validate(schema, null)).toBe('Value of params must be an object');
25
+ });
26
+ it('rejects params that are not objects', () => {
27
+ const schema = {
28
+ type: 'object',
29
+ properties: {
30
+ foo: {
31
+ type: 'string',
32
+ },
33
+ },
34
+ };
35
+ expect(SchemaValidator.validate(schema, 'not an object')).toBe('Value of params must be an object');
36
+ });
37
+ it('allows schema with extra properties', () => {
38
+ const schema = {
39
+ type: 'object',
40
+ properties: {
41
+ example_enum: {
42
+ type: 'string',
43
+ enum: ['FOO', 'BAR'],
44
+ // enum-descriptions is not part of the JSON schema spec.
45
+ // This test verifies that the SchemaValidator allows the
46
+ // use of extra keywords, like this one, in the schema.
47
+ 'enum-descriptions': ['a foo', 'a bar'],
48
+ },
49
+ },
50
+ };
51
+ const params = {
52
+ example_enum: 'BAR',
53
+ };
54
+ expect(SchemaValidator.validate(schema, params)).toBeNull();
55
+ });
56
+ it('allows custom format values', () => {
57
+ const schema = {
58
+ type: 'object',
59
+ properties: {
60
+ duration: {
61
+ type: 'string',
62
+ // See: https://cloud.google.com/docs/discovery/type-format
63
+ format: 'google-duration',
64
+ },
65
+ mask: {
66
+ type: 'string',
67
+ format: 'google-fieldmask',
68
+ },
69
+ foo: {
70
+ type: 'string',
71
+ format: 'something-totally-custom',
72
+ },
73
+ },
74
+ };
75
+ const params = {
76
+ duration: '10s',
77
+ mask: 'foo.bar,biz.baz',
78
+ foo: 'some value',
79
+ };
80
+ expect(SchemaValidator.validate(schema, params)).toBeNull();
81
+ });
82
+ it('allows valid values for known formats', () => {
83
+ const schema = {
84
+ type: 'object',
85
+ properties: {
86
+ today: {
87
+ type: 'string',
88
+ format: 'date',
89
+ },
90
+ },
91
+ };
92
+ const params = {
93
+ today: '2025-04-08',
94
+ };
95
+ expect(SchemaValidator.validate(schema, params)).toBeNull();
96
+ });
97
+ it('rejects invalid values for known formats', () => {
98
+ const schema = {
99
+ type: 'object',
100
+ properties: {
101
+ today: {
102
+ type: 'string',
103
+ format: 'date',
104
+ },
105
+ },
106
+ };
107
+ const params = {
108
+ today: 'this is not a date',
109
+ };
110
+ expect(SchemaValidator.validate(schema, params)).not.toBeNull();
111
+ });
112
+ });
113
+ //# sourceMappingURL=schemaValidator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaValidator.test.js","sourceRoot":"","sources":["../../../src/utils/schemaValidator.test.ts"],"names":[],"mappings":"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"}