From 9da5b6c9955d99ae63acb0a436113abe438eea77 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 03:35:41 +0000 Subject: [PATCH 01/20] =?UTF-8?q?=F0=9F=90=9B:=20Handle=20unknown=20refere?= =?UTF-8?q?nce=20types=20in=20state=20logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added logging for unknown reference types in activateChatParticipant. --- packages/vscode/src/chatparticipant.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/vscode/src/chatparticipant.ts b/packages/vscode/src/chatparticipant.ts index b89a9f5a70..69daf052d7 100644 --- a/packages/vscode/src/chatparticipant.ts +++ b/packages/vscode/src/chatparticipant.ts @@ -29,6 +29,10 @@ export async function activateChatParticipant(state: ExtensionState) { files.push(vscode.workspace.asRelativePath(value, false)) else if (value instanceof vscode.Location) files.push(vscode.workspace.asRelativePath(value.uri, false)) // TODO range + else + state.output.appendLine( + `unknown reference type: ${typeof value}` + ) } return { files, vars } } From 9cd2daa17184b34a3fabc6ba9c11becfcc23a2be Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 31 Mar 2025 20:45:33 -0700 Subject: [PATCH 02/20] note about dev (#1410) --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 57ef514fd3..3de0704d2a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,6 +21,7 @@ You can open this repo in GitHub CodeSpace/Docker to get the build environment n - Go to https://github.com/microsoft/genaiscript - Click on **Code** - Select Create new Codespace +- Selec the **dev** branch ### Manual setup From 5e6f2c05bf1f001b4b8c2df75b1cbeb27ffee46b Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 03:49:54 +0000 Subject: [PATCH 03/20] add support for dev branch --- .github/workflows/build.yml | 2 +- .github/workflows/licenses.yml | 8 +-- .github/workflows/playwright.yml | 1 + packages/sample/src/tla/PR.yml | 87 ++++++++++++++++---------------- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1615660e2f..dfa5797436 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,7 +2,7 @@ name: build on: push: - branches: [main] + branches: [main, dev] pull_request: workflow_dispatch: jobs: diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index 387ae58ec6..83c3330e79 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -3,7 +3,7 @@ name: refresh 3rd party licenses on: workflow_dispatch: push: - branches: [main] + branches: [main, dev] paths: - "yarn.lock" concurrency: @@ -13,9 +13,9 @@ jobs: build: runs-on: ubuntu-latest permissions: - actions: read - contents: write - pull-requests: write + actions: read + contents: write + pull-requests: write steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 3154168ac2..95408645ec 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -10,6 +10,7 @@ on: push: branches: - main + - dev paths: - yarn.lock - ".github/workflows/playwright.yml" diff --git a/packages/sample/src/tla/PR.yml b/packages/sample/src/tla/PR.yml index abffe10b12..d68ad9a739 100644 --- a/packages/sample/src/tla/PR.yml +++ b/packages/sample/src/tla/PR.yml @@ -1,48 +1,49 @@ name: tlAI-linter on: - pull_request: - branches: - - master + pull_request: + branches: + - main + - dev jobs: - linting: - name: tlAI-linter - - runs-on: ubuntu-latest - - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - OPENAI_API_BASE: ${{ secrets.OPENAI_API_BASE }} - OPENAI_API_TYPE: ${{ secrets.OPENAI_API_TYPE }} - - defaults: - run: - shell: bash - - steps: - - name: Clone repo - uses: actions/checkout@v4 - with: - ## All history for git diff below to succeed. - fetch-depth: 0 - - - name: Setup NodeJS - ## https://github.com/actions/setup-node - uses: actions/setup-node@v4 - with: - node-version: "20" - - - name: Run GenAIscript on the TLA+ specs that are added in this pull request. - ## Identify git diff: $(git diff --name-only HEAD^ | grep '.tla') - ## Install genaiscript runtime: https://microsoft.github.io/genaiscript/reference/cli/ - ## Output LLM response in SARIF format: https://microsoft.github.io/genaiscript/reference/scripts/annotations/ - run: npx --yes genaiscript run .github/scripts/tlAI-Linter.genai.js $(git diff --name-only HEAD^ | grep '.tla') -oa results.sarif - - - name: Upload SARIF file - ## https://sarifweb.azurewebsites.net - ## https://docs.github.com/en/code-security/code-scanning/integrating-with-code-scanning/uploading-a-sarif-file-to-github - if: success() || failure() - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: results.sarif + linting: + name: tlAI-linter + + runs-on: ubuntu-latest + + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + OPENAI_API_BASE: ${{ secrets.OPENAI_API_BASE }} + OPENAI_API_TYPE: ${{ secrets.OPENAI_API_TYPE }} + + defaults: + run: + shell: bash + + steps: + - name: Clone repo + uses: actions/checkout@v4 + with: + ## All history for git diff below to succeed. + fetch-depth: 0 + + - name: Setup NodeJS + ## https://github.com/actions/setup-node + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Run GenAIscript on the TLA+ specs that are added in this pull request. + ## Identify git diff: $(git diff --name-only HEAD^ | grep '.tla') + ## Install genaiscript runtime: https://microsoft.github.io/genaiscript/reference/cli/ + ## Output LLM response in SARIF format: https://microsoft.github.io/genaiscript/reference/scripts/annotations/ + run: npx --yes genaiscript run .github/scripts/tlAI-Linter.genai.js $(git diff --name-only HEAD^ | grep '.tla') -oa results.sarif + + - name: Upload SARIF file + ## https://sarifweb.azurewebsites.net + ## https://docs.github.com/en/code-security/code-scanning/integrating-with-code-scanning/uploading-a-sarif-file-to-github + if: success() || failure() + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: results.sarif From 4b5d050eb111b3fd343e8040628138e36dda39f2 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 07:26:36 -0700 Subject: [PATCH 04/20] Enhance schema validation with new utilities (#1412) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ refactor: enhance schema validation with new utilities Introduce tryValidateJSONWithSchema and integration with parsers. * added docs * updated tests * updated prd * docs * caution --- .../content/docs/reference/scripts/files.md | 21 ++ .../docs/reference/scripts/redteam.mdx | 6 + .../docs/reference/scripts/schemas.mdx | 44 ++++ packages/core/src/data.ts | 4 +- packages/core/src/parsers.ts | 49 +++- packages/core/src/promptcontext.ts | 4 +- packages/core/src/schema.test.ts | 223 +++++++++++++++--- packages/core/src/schema.ts | 25 +- packages/core/src/types/prompt_template.d.ts | 45 ++-- packages/core/src/workspace.ts | 22 +- .../genaisrc/git-release-notes.genai.mjs | 5 +- .../sample/genaisrc/samples/prd.genai.mts | 4 +- packages/sample/genaisrc/workspace.genai.mjs | 12 +- 13 files changed, 381 insertions(+), 83 deletions(-) diff --git a/docs/src/content/docs/reference/scripts/files.md b/docs/src/content/docs/reference/scripts/files.md index e33dd2a154..35b0e80ab8 100644 --- a/docs/src/content/docs/reference/scripts/files.md +++ b/docs/src/content/docs/reference/scripts/files.md @@ -128,6 +128,27 @@ const data = await workspace.readCSV<{ name: string; value: number }>( ) ``` +### `readData` + +This helper API tries to infer the data type automatically and parse it out. It supports JSON, JSON5, YAML, XML, INI, TOML, CSV, XLSX. + +```js +const data = await workspace.readData("filename.csv") +``` + +### Schema validation + +You can provide a [JSON schema](/genaiscript/reference/scripts/schemas) to validate the parsed data. +By default, invalid data is silently ignore and the return value is `undefined` but you can force +the API to throw using `throwOnValidationError`. + +```ts +const data = await workspace.readJSON("data.json", { + schema: { type: "object", properties: { ... }, + throwOnValidationError: true +}) +``` + ### `writeText` Writes text to a file, relative to the workspace root. diff --git a/docs/src/content/docs/reference/scripts/redteam.mdx b/docs/src/content/docs/reference/scripts/redteam.mdx index 8bc79bac98..e86b4de79b 100644 --- a/docs/src/content/docs/reference/scripts/redteam.mdx +++ b/docs/src/content/docs/reference/scripts/redteam.mdx @@ -7,6 +7,12 @@ sidebar: LLM red teaming is a way to find vulnerabilities in AI systems before they're deployed by using simulated adversarial inputs. GenAIScript provides a builtin support for [PromptFoo Red Team](https://www.promptfoo.dev/docs/red-team/). +:::caution + +Red teaming in PromptFoo uses custom LLM models to generate adversarial inputs. This feature uses the Promptfoo cloud. + +::: + ## Adding Red Teaming to scripts Add `redteam` to the `script` function to enable red teaming. diff --git a/docs/src/content/docs/reference/scripts/schemas.mdx b/docs/src/content/docs/reference/scripts/schemas.mdx index 5ae68170d4..4b82fe0ede 100644 --- a/docs/src/content/docs/reference/scripts/schemas.mdx +++ b/docs/src/content/docs/reference/scripts/schemas.mdx @@ -18,6 +18,44 @@ This technique works reasonably well and GenAIScript also provides automatic val You will notice that the schema supported by GenAIScript is much simpler than the full-blow JSON schema specification. We recommend using simple schemas to avoid confusing the LLM; then port them to your application specific data format later on. +## JSON schemas + +A JSON schema is a declarative language that allows you to validate the structure of JSON data. +It defines the expected data types, properties, and constraints for JSON objects. +JSON schemas are widely used in APIs, configuration files, and data interchange formats to ensure that the data adheres to a specific structure. +JSON schemas are defined using a JSON format and can be used to validate JSON data against the defined schema. +GenAIScript supports JSON schemas to define the structure of the data you want to generate. + +```js +const schema = { + type: "object", + properties: { + name: { type: "string" }, + population: { type: "number" }, + url: { type: "string" }, + }, + required: ["name", "population", "url"], +} +``` + +## `responseSchema` + +Use `responseSchema` to define a JSON/YAML schema for the prompt output. + +```js user=true +script({ + responseSchema: schema, +}) +``` + +When using `responseSchema`, you can use the `responseType` to specify how the schema should be encoded in the request. + +- `responseType: "json"`: The schema is encoded in a system message and validated by GenAIScript. +- `responseType: "json_object"`: The schema is encoded in the request, using the builtin LLM structured output support. + It is also validated by GenAIScript. + +Both approaches are tradeoffs and typically depends on the LLM you are using. + ## `defSchema` Use `defSchema` to define a JSON/YAML schema for the prompt output. @@ -238,3 +276,9 @@ Use `parsers.validateJSON` to validate JSON when running the script. ```js const validation = parsers.validateJSON(schema, json) ``` + +Most APIs on the `workspace` object that parse data, also support a `schema` option to validate the data. + +```js +const data = await workspace.readJSON("data.json", { schema }) +``` diff --git a/packages/core/src/data.ts b/packages/core/src/data.ts index e8183de702..9821b7e7d0 100644 --- a/packages/core/src/data.ts +++ b/packages/core/src/data.ts @@ -23,6 +23,7 @@ import { TraceOptions } from "./trace" import { host } from "./host" import { fromBase64 } from "./base64" import { JSONLTryParse } from "./jsonl" +import { tryValidateJSONWithSchema } from "./schema" /** * Attempts to parse the provided file's content based on its detected format. @@ -64,5 +65,6 @@ export async function dataTryParse( return undefined // unknown } } - return data + + return tryValidateJSONWithSchema(data, options) } diff --git a/packages/core/src/parsers.ts b/packages/core/src/parsers.ts index 5bdb06dbe8..e987b1fd09 100644 --- a/packages/core/src/parsers.ts +++ b/packages/core/src/parsers.ts @@ -20,7 +20,7 @@ import { treeSitterQuery } from "./treesitter" import { parsePdf } from "./pdf" import { HTMLToMarkdown, HTMLToText } from "./html" import { MathTryEvaluate } from "./math" -import { validateJSONWithSchema } from "./schema" +import { tryValidateJSONWithSchema, validateJSONWithSchema } from "./schema" import { XLSXTryParse } from "./xlsx" import { host } from "./host" import { unzip } from "./zip" @@ -94,25 +94,46 @@ export async function createParsers( const { encode: encoder } = await resolveTokenEncoder(model) return Object.freeze({ JSON5: (text, options) => - JSON5TryParse(filenameOrFileToContent(text), options?.defaultValue), + tryValidateJSONWithSchema( + JSON5TryParse( + filenameOrFileToContent(text), + options?.defaultValue + ), + options + ), JSONLLM: (text) => JSONLLMTryParse(text), JSONL: (text) => JSONLTryParse(filenameOrFileToContent(text)), YAML: (text, options) => - YAMLTryParse(filenameOrFileToContent(text), options?.defaultValue), + tryValidateJSONWithSchema( + YAMLTryParse( + filenameOrFileToContent(text), + options?.defaultValue + ), + options + ), XML: (text, options) => { const { defaultValue, ...rest } = options || {} - return XMLTryParse( - filenameOrFileToContent(text), - defaultValue, - rest + return tryValidateJSONWithSchema( + XMLTryParse(filenameOrFileToContent(text), defaultValue, rest), + options ) }, TOML: (text, options) => - TOMLTryParse(filenameOrFileToContent(text), options), + tryValidateJSONWithSchema( + TOMLTryParse(filenameOrFileToContent(text), options), + options + ), frontmatter: (text, options) => - frontmatterTryParse(filenameOrFileToContent(text), options)?.value, + tryValidateJSONWithSchema( + frontmatterTryParse(filenameOrFileToContent(text), options) + ?.value, + options + ), CSV: (text, options) => - CSVTryParse(filenameOrFileToContent(text), options), + tryValidateJSONWithSchema( + CSVTryParse(filenameOrFileToContent(text), options), + options + ), XLSX: async (file, options) => await XLSXTryParse( await host.readFile(filenameOrFileToFilename(file)), @@ -120,7 +141,13 @@ export async function createParsers( ), dotEnv: (text) => dotEnvTryParse(filenameOrFileToContent(text)), INI: (text, options) => - INITryParse(filenameOrFileToContent(text), options?.defaultValue), + tryValidateJSONWithSchema( + INITryParse( + filenameOrFileToContent(text), + options?.defaultValue + ), + options + ), transcription: (text) => vttSrtParse(filenameOrFileToContent(text)), unzip: async (file, options) => await unzip(await host.readFile(file.filename), options), diff --git a/packages/core/src/promptcontext.ts b/packages/core/src/promptcontext.ts index 7065404c5d..b7c9692950 100644 --- a/packages/core/src/promptcontext.ts +++ b/packages/core/src/promptcontext.ts @@ -76,8 +76,8 @@ export async function createPromptContext( // Define the workspace file system operations const workspace: WorkspaceFileSystem = { readText: (f) => runtimeHost.workspace.readText(f), - readJSON: (f) => runtimeHost.workspace.readJSON(f), - readYAML: (f) => runtimeHost.workspace.readYAML(f), + readJSON: (f, o) => runtimeHost.workspace.readJSON(f, o), + readYAML: (f, o) => runtimeHost.workspace.readYAML(f, o), readXML: (f, o) => runtimeHost.workspace.readXML(f, o), readCSV: (f, o) => runtimeHost.workspace.readCSV(f, o), readINI: (f, o) => runtimeHost.workspace.readINI(f, o), diff --git a/packages/core/src/schema.test.ts b/packages/core/src/schema.test.ts index 18a817d2e7..a72ad3a145 100644 --- a/packages/core/src/schema.test.ts +++ b/packages/core/src/schema.test.ts @@ -5,9 +5,11 @@ import { JSONSchemaStringify, JSONSchemaStringifyToTypeScript, toStrictJSONSchema, + tryValidateJSONWithSchema, validateJSONWithSchema, validateSchema, } from "./schema" +import { MarkdownTrace } from "./trace" describe("schema", () => { test("cities", () => { @@ -62,46 +64,45 @@ describe("schema", () => { " extra?: string | number,\n" + " }>" ) - }), - test("city", () => { - const source: JSONSchema = { - type: "object", - description: - "A city with population and elevation information.", - properties: { - name: { - type: "string", - description: "The name of the city.", - }, - population: { - type: "number", - description: `The population + }) + test("city", () => { + const source: JSONSchema = { + type: "object", + description: "A city with population and elevation information.", + properties: { + name: { + type: "string", + description: "The name of the city.", + }, + population: { + type: "number", + description: `The population of the city.`, - }, - url: { - type: "string", - description: "The URL of the city's Wikipedia page.", - }, }, - required: ["name", "url"], - } - - const ts = JSONSchemaStringifyToTypeScript(source) - // console.log(ts) - assert.equal( - ts, - "// A city with population and elevation information.\n" + - "type Response = {\n" + - " // The name of the city.\n" + - " name: string,\n" + - " /* The population \n" + - " of the city. */\n" + - " population?: number,\n" + - " // The URL of the city's Wikipedia page.\n" + - " url: string,\n" + - "}" - ) - }) + url: { + type: "string", + description: "The URL of the city's Wikipedia page.", + }, + }, + required: ["name", "url"], + } + + const ts = JSONSchemaStringifyToTypeScript(source) + // console.log(ts) + assert.equal( + ts, + "// A city with population and elevation information.\n" + + "type Response = {\n" + + " // The name of the city.\n" + + " name: string,\n" + + " /* The population \n" + + " of the city. */\n" + + " population?: number,\n" + + " // The URL of the city's Wikipedia page.\n" + + " url: string,\n" + + "}" + ) + }) test("strict", () => { const source: JSONSchema = { type: "object", @@ -241,4 +242,150 @@ of the city.`, links: { type: "array", items: { type: "string" } }, }) }) + test("validateJSONWithSchema - missing required field", () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + required: ["name", "age"], + } + + const object = { name: "John" } + const result = validateJSONWithSchema(object, schema) + assert.strictEqual(result.pathValid, false) + assert.ok(result.schemaError) + }) + + test("validateJSONWithSchema - additional properties", () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + required: ["name"], + additionalProperties: false, + } + + const object = { name: "John", age: 30, extra: "extra value" } + const result = validateJSONWithSchema(object, schema) + assert.strictEqual(result.pathValid, false) + assert.ok(result.schemaError) + }) + + test("JSONSchemaStringify - nested objects", () => { + const schema: JSONSchema = { + type: "object", + properties: { + user: { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + required: ["name"], + }, + }, + required: ["user"], + } + + const result = JSONSchemaStringify(schema) + assert.strictEqual( + result, + JSON.stringify( + { + $schema: "http://json-schema.org/draft-07/schema#", + ...schema, + }, + null, + 2 + ) + ) + }) + + test("validateSchema - invalid schema", async () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "invalidType" as any }, + }, + required: ["name"], + } + + const result = await validateSchema(schema) + assert.strictEqual(result, false) + }) + test("tryValidateJSONWithSchema - valid object with schema", () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + required: ["name"], + } + + const object = { name: "John", age: 30 } + const result = tryValidateJSONWithSchema(object, { schema }) + assert.deepStrictEqual(result, object) + }) + + test("tryValidateJSONWithSchema - invalid object with schema", () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + required: ["name"], + } + + const object = { age: 30 } + const result = tryValidateJSONWithSchema(object, { schema }) + assert.strictEqual(result, undefined) + }) + + test("tryValidateJSONWithSchema - valid object without schema", () => { + const object = { name: "John", age: 30 } + const result = tryValidateJSONWithSchema(object) + assert.deepStrictEqual(result, object) + }) + + test("tryValidateJSONWithSchema - invalid schema with throwOnSchemaError", () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "invalidType" as any }, + }, + required: ["name"], + } + + const object = { name: "John" } + assert.throws(() => { + tryValidateJSONWithSchema(object, { + schema, + throwOnValidationError: true, + }) + }, /schema is invalid/) + }) + + test("tryValidateJSONWithSchema - valid object with trace", () => { + const schema: JSONSchema = { + type: "object", + properties: { + name: { type: "string" }, + age: { type: "number" }, + }, + required: ["name"], + } + + const object = { name: "John", age: 30 } + const trace = new MarkdownTrace() + const result = tryValidateJSONWithSchema(object, { schema, trace }) + assert.deepStrictEqual(result, object) + }) }) diff --git a/packages/core/src/schema.ts b/packages/core/src/schema.ts index 3e8aae33f2..a34b66bc51 100644 --- a/packages/core/src/schema.ts +++ b/packages/core/src/schema.ts @@ -1,10 +1,12 @@ // Import necessary modules and functions import { JSON5parse } from "./json5" -import { MarkdownTrace } from "./trace" +import { MarkdownTrace, TraceOptions } from "./trace" import Ajv from "ajv" import { YAMLParse } from "./yaml" import { errorMessage } from "./error" import { promptParametersSchemaToJSONSchema } from "./parameters" +import debug from "debug" +const dbg = debug("genaiscript:schema") /** * Checks if the given object is a valid JSON Schema. @@ -72,7 +74,9 @@ export function JSONSchemaStringifyToTypeScript( `${options?.export ? "export " : ""}type ${typeName.replace(/\s+/g, "_")} =` ) stringifyNode(schema) // Convert schema to TypeScript - return lines.join("\n") // Join lines into a single TypeScript definition + const res = lines.join("\n") // Join lines into a single TypeScript definition + dbg(res) + return res // Append a line to the TypeScript definition function append(line: string) { @@ -188,6 +192,21 @@ export async function validateSchema(schema: JSONSchema) { return await ajv.validateSchema(schema, false) } +export function tryValidateJSONWithSchema( + object: T, + options?: JSONSchemaValidationOptions & TraceOptions +) { + const { schema, throwOnValidationError, trace } = options || {} + if (object !== undefined && schema) { + const validation = validateJSONWithSchema(object, schema, { trace }) + if (validation.schemaError) { + if (throwOnValidationError) throw new Error(validation.schemaError) + return undefined + } + } + return object +} + /** * Validates a JSON object against a specified JSON schema. * @param object - The JSON object to validate. @@ -214,6 +233,7 @@ export function validateJSONWithSchema( const validate = ajv.compile(schema) const valid = validate(object) if (!valid) { + dbg(`validation failed: ${ajv.errorsText(validate.errors)}`) trace?.warn(`schema validation failed`) trace?.fence(validate.errors) trace?.fence(schema, "json") @@ -225,6 +245,7 @@ export function validateJSONWithSchema( } return { schema, pathValid: true } } catch (e) { + dbg(`runtime error: ${errorMessage(e)}`) trace?.warn("schema validation failed") return { schema, pathValid: false, schemaError: errorMessage(e) } } diff --git a/packages/core/src/types/prompt_template.d.ts b/packages/core/src/types/prompt_template.d.ts index 36b29bbff4..75219b27c3 100644 --- a/packages/core/src/types/prompt_template.d.ts +++ b/packages/core/src/types/prompt_template.d.ts @@ -184,10 +184,10 @@ type ModelType = OptionsOrString< | "github_copilot_chat:o1:low" | "github_copilot_chat:o1:medium" | "github_copilot_chat:o1:high" - | "github_copilot_chat:o3-mini" - | "github_copilot_chat:o3-mini:low" - | "github_copilot_chat:o3-mini:medium" - | "github_copilot_chat:o3-mini:high" + | "github_copilot_chat:o3-mini" + | "github_copilot_chat:o3-mini:low" + | "github_copilot_chat:o3-mini:medium" + | "github_copilot_chat:o3-mini:high" | "azure:gpt-4o" | "azure:gpt-4o-mini" | "azure:o1" @@ -1142,7 +1142,7 @@ interface WorkspaceGrepResult { matches: WorkspaceFile[] } -interface INIParseOptions { +interface INIParseOptions extends JSONSchemaValidationOptions { defaultValue?: any } @@ -1171,6 +1171,11 @@ interface FileStats { mode: number } +interface JSONSchemaValidationOptions { + schema?: JSONSchema + throwOnValidationError?: boolean +} + interface WorkspaceFileSystem { /** * Searches for files using the glob pattern and returns a list of files. @@ -1213,13 +1218,19 @@ interface WorkspaceFileSystem { * Reads the content of a file and parses to JSON, using the JSON5 parser. * @param path */ - readJSON(path: string | Awaitable): Promise + readJSON( + path: string | Awaitable, + options?: JSONSchemaValidationOptions + ): Promise /** * Reads the content of a file and parses to YAML. * @param path */ - readYAML(path: string | Awaitable): Promise + readYAML( + path: string | Awaitable, + options?: JSONSchemaValidationOptions + ): Promise /** * Reads the content of a file and parses to XML, using the XML parser. @@ -1253,7 +1264,10 @@ interface WorkspaceFileSystem { */ readData( path: string | Awaitable, - options?: CSVParseOptions & INIParseOptions & XMLParseOptions + options?: CSVParseOptions & + INIParseOptions & + XMLParseOptions & + JSONSchemaValidationOptions ): Promise /** @@ -1882,7 +1896,7 @@ interface Fenced { validation?: FileEditValidation } -interface XMLParseOptions { +interface XMLParseOptions extends JSONSchemaValidationOptions { allowBooleanAttributes?: boolean ignoreAttributes?: boolean ignoreDeclaration?: boolean @@ -1953,7 +1967,7 @@ interface Tokenizer { decode: TokenDecoder } -interface CSVParseOptions { +interface CSVParseOptions extends JSONSchemaValidationOptions { delimiter?: string headers?: string[] repair?: boolean @@ -2188,7 +2202,7 @@ interface Parsers { */ JSON5( content: string | WorkspaceFile, - options?: { defaultValue?: any } + options?: { defaultValue?: any } & JSONSchemaValidationOptions ): any | undefined /** @@ -2208,7 +2222,7 @@ interface Parsers { */ YAML( content: string | WorkspaceFile, - options?: { defaultValue?: any } + options?: { defaultValue?: any } & JSONSchemaValidationOptions ): any | undefined /** @@ -2217,7 +2231,7 @@ interface Parsers { */ TOML( content: string | WorkspaceFile, - options?: { defaultValue?: any } + options?: { defaultValue?: any } & JSONSchemaValidationOptions ): any | undefined /** @@ -2227,7 +2241,10 @@ interface Parsers { */ frontmatter( content: string | WorkspaceFile, - options?: { defaultValue?: any; format: "yaml" | "json" | "toml" } + options?: { + defaultValue?: any + format: "yaml" | "json" | "toml" + } & JSONSchemaValidationOptions ): any | undefined /** diff --git a/packages/core/src/workspace.ts b/packages/core/src/workspace.ts index a5de3097a4..96d53d13dc 100644 --- a/packages/core/src/workspace.ts +++ b/packages/core/src/workspace.ts @@ -16,6 +16,7 @@ import { XMLTryParse } from "./xml" import { YAMLTryParse } from "./yaml" import { dirname } from "path" import { createCache } from "./cache" +import { tryValidateJSONWithSchema } from "./schema" /** * Creates a file system interface for interacting with workspace files. @@ -101,18 +102,20 @@ export function createWorkspaceFileSystem(): Omit< return file }, readJSON: async ( - f: string | Awaitable + f: string | Awaitable, + options?: JSONSchemaValidationOptions ): Promise => { const file = await fs.readText(f) const res = JSON5TryParse(file.content, undefined) - return res + return tryValidateJSONWithSchema(res, options) }, readYAML: async ( - f: string | Awaitable + f: string | Awaitable, + options?: JSONSchemaValidationOptions ): Promise => { const file = await fs.readText(f) const res = YAMLTryParse(file.content) - return res + return tryValidateJSONWithSchema(res, options) }, readXML: async ( f: string | Awaitable, @@ -120,7 +123,7 @@ export function createWorkspaceFileSystem(): Omit< ) => { const file = await fs.readText(f) const res = XMLTryParse(file.content, options) - return res + return tryValidateJSONWithSchema(res, options) }, readCSV: async ( f: string | Awaitable, @@ -128,7 +131,7 @@ export function createWorkspaceFileSystem(): Omit< ): Promise => { const file = await fs.readText(f) const res = CSVTryParse(file.content, options) as T[] - return res + return tryValidateJSONWithSchema(res, options) }, readINI: async ( f: string | Awaitable, @@ -136,13 +139,14 @@ export function createWorkspaceFileSystem(): Omit< ): Promise => { const file = await fs.readText(f) const res = INITryParse(file.content, options?.defaultValue) - return res + return tryValidateJSONWithSchema(res, options) }, readData: async ( - f: string | Awaitable + f: string | Awaitable, + options?: JSONSchemaValidationOptions ): Promise => { const file = await f - const data = await dataTryParse(toWorkspaceFile(file)) + const data = await dataTryParse(toWorkspaceFile(file), options) return data }, cache: async (name: string) => { diff --git a/packages/sample/genaisrc/git-release-notes.genai.mjs b/packages/sample/genaisrc/git-release-notes.genai.mjs index a23aa2501d..f5c916b1ee 100644 --- a/packages/sample/genaisrc/git-release-notes.genai.mjs +++ b/packages/sample/genaisrc/git-release-notes.genai.mjs @@ -40,7 +40,10 @@ const diff = await git.diff({ }) console.debug(diff) -const commitsName = def("COMMITS", commits, { ignoreEmpty: true, maxTokens: 3000 }) +const commitsName = def("COMMITS", commits, { + ignoreEmpty: true, + maxTokens: 3000, +}) const diffName = def("DIFF", diff, { maxTokens: 12000 }) $` diff --git a/packages/sample/genaisrc/samples/prd.genai.mts b/packages/sample/genaisrc/samples/prd.genai.mts index 8c6794913e..414a2c2966 100644 --- a/packages/sample/genaisrc/samples/prd.genai.mts +++ b/packages/sample/genaisrc/samples/prd.genai.mts @@ -4,9 +4,7 @@ script({ temperature: 0.5, systemSafety: true, }) -const { safety } = env.vars - -const defaultBranch = await git.defaultBranch() +const defaultBranch = "dev" const branch = await git.branch() if (branch === defaultBranch) cancel("you are already on the default branch") diff --git a/packages/sample/genaisrc/workspace.genai.mjs b/packages/sample/genaisrc/workspace.genai.mjs index f6440bb3a6..e520761772 100644 --- a/packages/sample/genaisrc/workspace.genai.mjs +++ b/packages/sample/genaisrc/workspace.genai.mjs @@ -1,5 +1,11 @@ -script({ model: "small", tests: {} }) -const json = await workspace.readJSON("src/sample.json") +script({ model: "echo", tests: {} }) +const json = await workspace.readJSON("src/sample.json", { + schema: { + type: "object", + properties: { foo: { type: "string" } }, + required: ["foo"], + }, +}) if (json.foo !== "bar") throw new Error("Invalid JSON") const xml = await workspace.readXML("src/sample.xml") if (xml.foo.bar !== "baz") throw new Error("Invalid xml") @@ -11,3 +17,5 @@ await workspace.copyFile("src/penguins.csv", "src/penguins-copy.csv") const csvCopy = await workspace.readCSV("src/penguins-copy.csv") if (JSON.stringify(csv) !== JSON.stringify(csvCopy)) throw new Error("Invalid copy") + +console.log(`all good!`) From 740305691eb9fdd17fce75fd5650beae5c79966c Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 08:02:17 -0700 Subject: [PATCH 05/20] Update CONTRIBUTING.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- CONTRIBUTING.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3de0704d2a..a1b27ee368 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,8 +21,7 @@ You can open this repo in GitHub CodeSpace/Docker to get the build environment n - Go to https://github.com/microsoft/genaiscript - Click on **Code** - Select Create new Codespace -- Selec the **dev** branch - +- Select the **dev** branch ### Manual setup - Install [Node.JS LTS](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) From f3668e90dc26277b0a68157ba8307f24e269f953 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 16:52:34 +0000 Subject: [PATCH 06/20] add examples of warnings --- packages/sample/genaisrc/envoutput.genai.mjs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/sample/genaisrc/envoutput.genai.mjs b/packages/sample/genaisrc/envoutput.genai.mjs index 8d08acbf33..2edc169935 100644 --- a/packages/sample/genaisrc/envoutput.genai.mjs +++ b/packages/sample/genaisrc/envoutput.genai.mjs @@ -1,9 +1,22 @@ +script({ model: "echo"}) const { output } = env for (let i = 1; i <= 6; i++) output.heading(i, "heading " + i) $`Write 2 word poem` +output.warn("this is a warning"); +output.caution("this is a caution"); +output.item("this is an item"); +output.itemValue("item", "value"); +output.note("this is a note"); +output.diff( +`A +B +C`, +`AA +B` +) output.fence( `--- title: What is Markdown? - Understanding Markdown Syntax @@ -20,7 +33,6 @@ For example, to denote a heading, you add a number sign before it (e.g., # Headi `, "md" ) - output.fence(`let x = "abc"`, "js") output.itemValue("item", "value") output.fence("This is a fence") From eb12d968ebbd143ef19153d457cb587c642529b6 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 17:33:44 +0000 Subject: [PATCH 07/20] =?UTF-8?q?=E2=9C=A8=20enhance:=20Add=20support=20fo?= =?UTF-8?q?r=20GitHub=20Markdown=20annotations=20parsing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improve diagnostic handling by adding support for parsing GitHub Flavored Markdown annotations such as WARNING and CAUTION, mapping severities, and refining output formats. New tests added to validate functionality. --- packages/core/src/annotations.test.ts | 128 +++++++++++++++++++++++++- packages/core/src/annotations.ts | 69 ++++++++++---- 2 files changed, 173 insertions(+), 24 deletions(-) diff --git a/packages/core/src/annotations.test.ts b/packages/core/src/annotations.test.ts index b33b98959b..bd182d7a02 100644 --- a/packages/core/src/annotations.test.ts +++ b/packages/core/src/annotations.test.ts @@ -1,7 +1,13 @@ import test, { beforeEach, describe } from "node:test" -import { convertAnnotationsToItems, parseAnnotations } from "./annotations" +import { + convertAnnotationsToItems, + convertDiagnosticToGitHubActionCommand, + convertGithubMarkdownAnnotationsToItems, + parseAnnotations, +} from "./annotations" import assert from "assert/strict" import { TestHost } from "./testhost" +import { EMOJI_WARNING, EMOJI_FAIL } from "./constants" describe("annotations", () => { beforeEach(() => { @@ -66,15 +72,127 @@ info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this comm assert.strictEqual(diags[1].filename, "src/connection.ts") assert.strictEqual(diags[1].range[0][0], 70) }) -}) -test("convertAnnotationsToItems", () => { - const input = ` + test("convertAnnotationsToItems", () => { + const input = ` ::warning file=src/greeter.ts,line=2,endLine=2,code=missing_semicolon::Missing semicolon after property declaration. ::warning file=src/greeter.ts,line=5,endLine=5,code=missing_semicolon::Missing semicolon after assignment. ::warning file=src/greeter.ts,line=9,endLine=9,code=missing_semicolon::Missing semicolon after return statement. ::warning file=src/greeter.ts,line=18,endLine=18,code=empty_function::The function 'hello' is empty and should contain logic or be removed if not needed. ::warning file=src/greeter.ts,line=20,endLine=20,code=missing_semicolon::Missing semicolon after variable declaration. ` - const output = convertAnnotationsToItems(input) + const output = convertAnnotationsToItems(input) + console.log(output) + }) + + test("convertDiagnosticToGitHubActionCommand", () => { + const testCases = [ + { + diagnostic: { + severity: "info", + filename: "src/test.ts", + range: [ + [10, 0], + [10, 25], + ], + message: "This is an informational message", + }, + expected: + "::notice file=src/test.ts, line=10, endLine=10::This is an informational message", + }, + { + diagnostic: { + severity: "warning", + filename: "src/component.tsx", + range: [ + [5, 2], + [8, 15], + ], + message: "Consider using a more specific type", + }, + expected: + "::warning file=src/component.tsx, line=5, endLine=8::Consider using a more specific type", + }, + { + diagnostic: { + severity: "error", + filename: "packages/core/utils.js", + range: [ + [42, 0], + [42, 30], + ], + code: "TS2322", + message: "Type 'string' is not assignable to type 'number'", + }, + expected: + "::error file=packages/core/utils.js, line=42, endLine=42::Type 'string' is not assignable to type 'number'", + }, + ] + + for (const { diagnostic, expected } of testCases) { + const result = convertDiagnosticToGitHubActionCommand( + diagnostic as Diagnostic + ) + assert.strictEqual(result, expected) + } + }) + + test("convertGithubMarkdownAnnotationsToItemsCaution", () => { + const input = `> [!CAUTION] +> This operation cannot be undone. +` + + const expected = `- ${EMOJI_FAIL} This operation cannot be undone. +` + + const result = convertGithubMarkdownAnnotationsToItems(input) + assert.strictEqual(result, expected) + }) + + test("convertGithubMarkdownAnnotationsToItems", () => { + const input = ` +> [!WARNING] +> This component will be deprecated in the next major version. + +Some normal text here. + +> [!NOTE] +> Remember to update your dependencies. +` + + const expected = `- ${EMOJI_WARNING} This component will be deprecated in the next major version. + +Some normal text here. +- ℹ️ Remember to update your dependencies. +` + + const result = convertGithubMarkdownAnnotationsToItems(input) + assert.strictEqual(result, expected) + }) + + + test("convertGithubMarkdownAnnotationsToItems2", () => { + const input = ` +> [!WARNING] +> This component will be deprecated in the next major version. + +Some normal text here. + +> [!NOTE] +> Remember to update your dependencies. + +> [!CAUTION] +> This operation cannot be undone. +` + + const expected = `- ${EMOJI_WARNING} This component will be deprecated in the next major version. + +Some normal text here. +- ℹ️ Remember to update your dependencies. +- ${EMOJI_FAIL} This operation cannot be undone. +` + + const result = convertGithubMarkdownAnnotationsToItems(input) + assert.strictEqual(result, expected) + }) }) diff --git a/packages/core/src/annotations.ts b/packages/core/src/annotations.ts index aee82854c8..83fed953c2 100644 --- a/packages/core/src/annotations.ts +++ b/packages/core/src/annotations.ts @@ -23,6 +23,12 @@ const AZURE_DEVOPS_ANNOTATIONS_RX = const TYPESCRIPT_ANNOTATIONS_RX = /^(?[^:\s\n].+?):(?\d+)(?::(?\d+))?(?::\d+)?\s+-\s+(?error|warning)\s+(?[^:]+)\s*:\s*(?.*)$/gim +// Regular expression for matching GitHub Flavored Markdown style warnings. +// Example: > [!WARNING] +// > This is a warning message. +const GITHUB_MARKDOWN_WARNINGS_RX = + /^\s*>\s*\[!(?NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*\n>\s*(?.+)(?:\s*\n>\s*.*?)*?$/gim + // Regular expression for TypeScript compiler errors with parentheses format // Example: src/connection.ts(71,5): error TS1128: Declaration or statement expected. // src/connection.ts(71,5): error TS1128: Declaration or statement expected. @@ -38,8 +44,11 @@ const ANNOTATIONS_RX = [ // Maps severity strings to `DiagnosticSeverity`. const SEV_MAP: Record = Object.freeze({ ["info"]: "info", + ["tip"]: "info", ["notice"]: "info", // Maps 'notice' to 'info' severity + ["note"]: "info", ["warning"]: "warning", + ["caution"]: "error", ["error"]: "error", }) const SEV_EMOJI_MAP: Record = Object.freeze({ @@ -114,27 +123,49 @@ export function eraseAnnotations(text: string) { * @returns A string where matched annotations are replaced with formatted items. */ export function convertAnnotationsToItems(text: string) { - return ANNOTATIONS_RX.reduce( - (t, rx) => - t.replace(rx, (s, ...args) => { - const groups = args.at(-1) - const { file, line, endLine, severity, code, message } = groups - const d: Diagnostic = { - severity: SEV_MAP[severity?.toLowerCase()] ?? "info", - filename: file, - range: [ - [parseInt(line) - 1, 0], // Start of range, 0-based index - [parseInt(endLine) - 1, Number.MAX_VALUE], // End of range, max value for columns - ], - code, - message, - } - return convertAnnotationToItem(d) - }), - text + return convertGithubMarkdownAnnotationsToItems( + ANNOTATIONS_RX.reduce( + (t, rx) => + t.replace(rx, (s, ...args) => { + const groups = args.at(-1) + const { file, line, endLine, severity, code, message } = + groups + const d: Diagnostic = { + severity: SEV_MAP[severity?.toLowerCase()] ?? "info", + filename: file, + range: [ + [parseInt(line) - 1, 0], // Start of range, 0-based index + [parseInt(endLine) - 1, Number.MAX_VALUE], // End of range, max value for columns + ], + code, + message, + } + return convertAnnotationToItem(d) + }), + text + ) ) } +export function convertGithubMarkdownAnnotationsToItems(text: string) { + return text?.replace(GITHUB_MARKDOWN_WARNINGS_RX, (s, ...args) => { + const groups = args.at(-1) + const { severity, message } = groups + const sev = SEV_MAP[severity?.toLowerCase()] ?? "info" + const d: Diagnostic = { + severity: sev, + filename: "", + range: [ + [0, 0], // Start of range, 0-based index + [0, Number.MAX_VALUE], // End of range, max value for columns + ], + code: "", + message, + } + return convertAnnotationToItem(d) + }) +} + /** * Formats a diagnostic annotation into a string representation suitable for display. * @@ -150,7 +181,7 @@ export function convertAnnotationsToItems(text: string) { export function convertAnnotationToItem(d: Diagnostic) { const { severity, message, filename, code, range } = d const line = range?.[0]?.[0] - return `- ${SEV_EMOJI_MAP[severity?.toLowerCase()] ?? "info"} ${message} ${filename ? `(\`${filename}${line ? `#L${line}` : ""}\`)` : ""}` + return `- ${SEV_EMOJI_MAP[severity?.toLowerCase()] ?? "info"} ${message}${filename ? ` (\`${filename}${line ? `#L${line}` : ""}\`)` : ""}` } /** From 0f2245213754450e3f9fd059e05d629a44d0e357 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 18:01:53 +0000 Subject: [PATCH 08/20] Release 1.124.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 51f9dcbea0..812e96dd56 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "genaiscript-workspace", "displayName": "GenAIScript", "description": "Programmatically assemble prompts for LLMs using JavaScript. Orchestrate LLMs, tools, and data in code.", - "version": "1.124.2", + "version": "1.124.3", "license": "MIT", "private": true, "workspaces": { From 624377864aa5464397cbf58873801c30549a654a Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Tue, 1 Apr 2025 18:02:17 +0000 Subject: [PATCH 09/20] [skip ci] updated version numbers --- docs/package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/modulesample/package.json | 2 +- packages/sample/package.json | 2 +- packages/vscode/package.json | 2 +- packages/web/package.json | 2 +- slides/package.json | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package.json b/docs/package.json index 625b7e2de5..ebc2d1ad9b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -2,7 +2,7 @@ "name": "docs", "type": "module", "private": true, - "version": "1.124.2", + "version": "1.124.3", "license": "MIT", "scripts": { "install:force": "rm yarn.lock && yarn install", diff --git a/packages/cli/package.json b/packages/cli/package.json index 918778d089..9366c40e51 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "genaiscript", - "version": "1.124.2", + "version": "1.124.3", "main": "built/genaiscript.cjs", "type": "commonjs", "bin": { diff --git a/packages/core/package.json b/packages/core/package.json index db8c42e15d..7965284ab1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "genaiscript-core-internal", - "version": "1.124.2", + "version": "1.124.3", "main": "src/index.ts", "license": "MIT", "private": true, diff --git a/packages/modulesample/package.json b/packages/modulesample/package.json index 01e6bd8a7c..b5a32faf15 100644 --- a/packages/modulesample/package.json +++ b/packages/modulesample/package.json @@ -5,5 +5,5 @@ "genai": "node ../cli/built/genaiscript.cjs run", "test": "yarn genai poem-js-module" }, - "version": "1.124.2" + "version": "1.124.3" } diff --git a/packages/sample/package.json b/packages/sample/package.json index 5011b82e2b..f31214b97f 100644 --- a/packages/sample/package.json +++ b/packages/sample/package.json @@ -1,6 +1,6 @@ { "name": "genaiscript-sample", - "version": "1.124.2", + "version": "1.124.3", "license": "MIT", "private": true, "scripts": { diff --git a/packages/vscode/package.json b/packages/vscode/package.json index cc22d1e47e..003bcf7cdf 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -7,7 +7,7 @@ }, "displayName": "GenAIScript Insiders", "description": "Generative AI Scripting.", - "version": "1.124.2", + "version": "1.124.3", "icon": "icon.png", "engines": { "vscode": "^1.98.0" diff --git a/packages/web/package.json b/packages/web/package.json index 9fd330855a..b58ea25092 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,6 +1,6 @@ { "name": "genaiscript-web", - "version": "1.124.2", + "version": "1.124.3", "license": "MIT", "private": true, "scripts": { diff --git a/slides/package.json b/slides/package.json index e61352cdfa..4241a0edbd 100644 --- a/slides/package.json +++ b/slides/package.json @@ -1,6 +1,6 @@ { "name": "genaiscript-slides", - "version": "1.124.2", + "version": "1.124.3", "type": "module", "private": true, "npm": { From 5aa62412b3772f93a62b285b16f0fd36fb0fcae3 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 2 Apr 2025 02:21:15 +0000 Subject: [PATCH 10/20] ast-grep blog post --- .../docs/blog/ast-grep-and-transform.mdx | 138 ++++++++++++++++++ docs/src/content/docs/blog/mcp-resources.mdx | 2 +- 2 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 docs/src/content/docs/blog/ast-grep-and-transform.mdx diff --git a/docs/src/content/docs/blog/ast-grep-and-transform.mdx b/docs/src/content/docs/blog/ast-grep-and-transform.mdx new file mode 100644 index 0000000000..d7a72bb9b9 --- /dev/null +++ b/docs/src/content/docs/blog/ast-grep-and-transform.mdx @@ -0,0 +1,138 @@ +--- +title: AST Grep and Transform +date: 2025-04-01 +tags: + - ast + - tree-sitter + - ast-grep + - genai +authors: pelikhan +canonical_url: https://microsoft.github.io/genaiscript/blog/ast-grep-and-transform +description: Learn how to parse source code using ast-grep and update nodes in the tree. +--- + +import { Code } from "@astrojs/starlight/components" +import code from "../../../../../genaisrc/docs.genai.mjs?raw" + +This page describes a strategy to build GenAI scripts that use Abstract Syntax Trees (AST) to parse +and modify source code. When applicable, it provides an extremely flexible and stable way to +apply large scale changes to source code. Interrested? Let's dive in! + +:::tip + +If you're in hurry and jump to the **last documentation generator/updater you'll ever need** \* +in the [sample section](#sample). + +_\*: for TypeScript, maybe._ +::: + +## The strategy of AST-based code transformation + +One of the challenge when creating GenAI scripts that update source code is to correctly locate and update source code. +The slightest mistake in the location of the code to update can lead to a broken code. This is especially true when +the code to update is not a simple string, but a complex structure like an object or a function call. + +In some cases, you know "precisely" which part of the code you want +to update. For example, you want to refresh the documentation of a function after a change. You know +that the documentation is located just before the function definition at least in the sense of the programming language +but the number of empty lines or space may vary. + +```ts title="math.ts" +/** sums a and b */ +function fn(a: number, b: number): number { + return a - b // oops outdated +} +``` + +In such scenario, you can use the Abstract Syntax Tree (AST) to locate the code to update. The AST is a tree representation of +code. + +```mermaid +graph TD + A(comment
/** sums a and b */) --> B(function_declaration
fn) + B --> D(statement
return a - b) +``` + +So instead of fighting spaces and new lines, you can just locate the `function_declaration` node that follows +a `comment` node. + +```ts title="docs.genai.mts" +const functionAndComment = sg.find_function_with_outdated_comment() +``` + +Once you've located the node to update, you could do any transformation you want, e.g. replace it with another text. +In terms of GenAI script, this means that you can build a prompt that includes as much context as you need, generate a response. + +```ts title="docs.genai.mts" +$`Update the documentation of the function 'fn' to reflect the new behavior of the function.` +fence(functionAndComment.text()) +``` + +```txt +subs a and b +``` + +Once the LLM responds with the new comment, you could insert it as the new content of the node in the AST. + +```ts title="docs.genai.mts" +functionAndComment.comment().text = response +``` + +```mermaid +graph TD + A(comment
/** subs a and b */) --> B(function_declaration
fn) + B --> D(statement
return a - b) +``` + +Voila! You've only touched the part of the file you wanted to update! + +```ts title="math.ts" +/** subs a and b */ +function fn(a: number, b: number): number { + return a - b +} +``` + +To recap, this strategy is based on the following steps: + +1. Use the AST to locate the node to update. +2. Use the LLM to generate the new content of the node. +3. Update the node in the AST with the new content. + +### ast-grep + +[ast-grep(sg)](https://ast-grep.github.io/) is a fast and polyglot tool for code structural search, +lint, rewriting at large scale. **sg** provides us the AST-searh-and-replace capabilities we need to +implement the strategy above. + +GenAIScript benefits from the excellent [Node.JS integration](https://ast-grep.github.io/reference/api.html#napi), +which is available through the [`host.astGrep()`](https://microsoft.github.io/genaiscript/reference/ast-grep) method. + +## Sample: Doc generator / updater + +You will find a full write down of the making of the documentation generator/updater script below +in the [documentation](/genaiscript/reference/scripts/ast-grep). I encourage you to read it to dig deeper. + +The `docs` scripts is a documentation generator/updater. + +- uses ast-grep to find and generate missing documentation for exported TypeScript function. A second LLM-as-Judge + request is used to check that the generated documentation is correct. +- if the `diff` option is selected, it will filter out functions that do not intersect with the + diff (this is rather naive but a good start...). +- it can also be used to update the documentation of a function that has changed. +- it works regarless of the file size or the number of files as most transformations are hyper-localized. + +```sh title="generate and refresh my docs plz" +npm run genaiscript docs -- --diff +``` + +Here are some example of applications of the scripts (one-shot, no human edit, multi-edit per file): + +- [TypeScript codebase](https://github.com/pelikhan/TypeScript/pull/1), I stopped the script after a while, it was humming. +- [GenAIScript codebase](https://github.com/microsoft/genaiscript/pull/1376/files), this change also contains the update to GenAIScript as I was building the feature. + +Here it goes: + + + +- [original source](https://github.com/microsoft/genaiscript/blob/main/genaisrc/docs.genai.mts) diff --git a/docs/src/content/docs/blog/mcp-resources.mdx b/docs/src/content/docs/blog/mcp-resources.mdx index 5809f2d1ce..fe6c42ec58 100644 --- a/docs/src/content/docs/blog/mcp-resources.mdx +++ b/docs/src/content/docs/blog/mcp-resources.mdx @@ -2,7 +2,7 @@ title: MCP Resources description: Learn how to publish MCP resources seamlessly using GenAIScript. keywords: MCP, GenAIScript, resources, publishing -date: 2025-30-03 +date: 2025-03-30 cover: alt: A colorful 2D illustration in an 8-bit retro style, depicting a stylized From 4c8d0a3f5efd60dd69594f1d408b354ed6bd74c1 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 2 Apr 2025 02:22:09 +0000 Subject: [PATCH 11/20] image --- .../docs/blog/ast-grep-and-transform.mdx | 17 +++++++++++++---- .../docs/blog/ast-grep-and-transform.png | Bin 0 -> 254713 bytes 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 docs/src/content/docs/blog/ast-grep-and-transform.png diff --git a/docs/src/content/docs/blog/ast-grep-and-transform.mdx b/docs/src/content/docs/blog/ast-grep-and-transform.mdx index d7a72bb9b9..54a8a223cd 100644 --- a/docs/src/content/docs/blog/ast-grep-and-transform.mdx +++ b/docs/src/content/docs/blog/ast-grep-and-transform.mdx @@ -2,13 +2,22 @@ title: AST Grep and Transform date: 2025-04-01 tags: - - ast - - tree-sitter - - ast-grep - - genai + - ast + - tree-sitter + - ast-grep + - genai authors: pelikhan canonical_url: https://microsoft.github.io/genaiscript/blog/ast-grep-and-transform description: Learn how to parse source code using ast-grep and update nodes in the tree. +cover: + alt: The image is an abstract 8-bit style illustration using five colors. It + shows a stylized tree with nodes connected in a branching pattern, + representing an Abstract Syntax Tree (AST) used in code transformation. + Geometric shapes and lines indicate the ideas of parsing and modifying + source code. The design is simple and corporate, with no characters or text + present. + image: ./ast-grep-and-transform.png + --- import { Code } from "@astrojs/starlight/components" diff --git a/docs/src/content/docs/blog/ast-grep-and-transform.png b/docs/src/content/docs/blog/ast-grep-and-transform.png new file mode 100644 index 0000000000000000000000000000000000000000..55ab07587f95134671b7864a83374197605c553d GIT binary patch literal 254713 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

#Hg} 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%0Ahk?27OPW9yrS%4RJ;XF0&3GX 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�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 K>iMcqfAxRL%JLNe literal 0 HcmV?d00001 From 994ad9c4c133f0eabfeda23cc17c61e556644307 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 2 Apr 2025 02:30:28 +0000 Subject: [PATCH 12/20] update blog --- .../docs/blog/ast-grep-and-transform.mdx | 58 ++++++++++++++----- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/docs/src/content/docs/blog/ast-grep-and-transform.mdx b/docs/src/content/docs/blog/ast-grep-and-transform.mdx index 54a8a223cd..79962a17f7 100644 --- a/docs/src/content/docs/blog/ast-grep-and-transform.mdx +++ b/docs/src/content/docs/blog/ast-grep-and-transform.mdx @@ -2,22 +2,21 @@ title: AST Grep and Transform date: 2025-04-01 tags: - - ast - - tree-sitter - - ast-grep - - genai + - ast + - tree-sitter + - ast-grep + - genai authors: pelikhan canonical_url: https://microsoft.github.io/genaiscript/blog/ast-grep-and-transform description: Learn how to parse source code using ast-grep and update nodes in the tree. cover: - alt: The image is an abstract 8-bit style illustration using five colors. It - shows a stylized tree with nodes connected in a branching pattern, - representing an Abstract Syntax Tree (AST) used in code transformation. - Geometric shapes and lines indicate the ideas of parsing and modifying - source code. The design is simple and corporate, with no characters or text - present. - image: ./ast-grep-and-transform.png - + alt: The image is an abstract 8-bit style illustration using five colors. It + shows a stylized tree with nodes connected in a branching pattern, + representing an Abstract Syntax Tree (AST) used in code transformation. + Geometric shapes and lines indicate the ideas of parsing and modifying + source code. The design is simple and corporate, with no characters or text + present. + image: ./ast-grep-and-transform.png --- import { Code } from "@astrojs/starlight/components" @@ -104,18 +103,45 @@ function fn(a: number, b: number): number { To recap, this strategy is based on the following steps: -1. Use the AST to locate the node to update. -2. Use the LLM to generate the new content of the node. -3. Update the node in the AST with the new content. +1. **search** Use the AST to locate the node to update. +2. **transform and replace** Use the LLM to generate the new content of the node. +3. **commit** Update the node in the AST with the new content. ### ast-grep +![AST-Grep Logo](https://ast-grep.github.io/logo.svg) + [ast-grep(sg)](https://ast-grep.github.io/) is a fast and polyglot tool for code structural search, lint, rewriting at large scale. **sg** provides us the AST-searh-and-replace capabilities we need to implement the strategy above. GenAIScript benefits from the excellent [Node.JS integration](https://ast-grep.github.io/reference/api.html#napi), -which is available through the [`host.astGrep()`](https://microsoft.github.io/genaiscript/reference/ast-grep) method. +which is available through the [`host.astGrep()`](https://microsoft.github.io/genaiscript/reference/scripts/ast-grep) method. + +```ts title="docs.genai.mts" +// search +const { matches, replace } = await sg.search("ts", "src/*fib*.ts", { + rule: { + kind: "function_declaration", + not: { + precedes: { + kind: "comment", + stopBy: "neighbor", + }, + }, + }, +}) + +// transform +const edits = sg.changeset() +for (const match of matches) { + const { text } = await prompt`Generate new docs for ${match.text()}` + // replace + edits.replace(match.comment(), text) // it's somewhat more involved +} +// commit all edits to file +await workspace.writeFiles(edits.commit()) +``` ## Sample: Doc generator / updater From b7c753888b785498cab97c202edf8310c56a4927 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 2 Apr 2025 02:31:50 +0000 Subject: [PATCH 13/20] run docs from dev --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 19bbff52b6..041d918ef9 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: push: branches: - - main + - main, dev # tags: # - "[0-9]+.[0-9]+.[0-9]+" permissions: From 5c730bf517f429bda6d09a5a8690b94b8b2ee00b Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 2 Apr 2025 13:25:32 +0000 Subject: [PATCH 14/20] blog post fixes --- .../docs/blog/ast-grep-and-transform.mdx | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/docs/src/content/docs/blog/ast-grep-and-transform.mdx b/docs/src/content/docs/blog/ast-grep-and-transform.mdx index 79962a17f7..837c7e899e 100644 --- a/docs/src/content/docs/blog/ast-grep-and-transform.mdx +++ b/docs/src/content/docs/blog/ast-grep-and-transform.mdx @@ -24,11 +24,11 @@ import code from "../../../../../genaisrc/docs.genai.mjs?raw" This page describes a strategy to build GenAI scripts that use Abstract Syntax Trees (AST) to parse and modify source code. When applicable, it provides an extremely flexible and stable way to -apply large scale changes to source code. Interrested? Let's dive in! +apply large scale changes to source code. Interested? Let's dive in! :::tip -If you're in hurry and jump to the **last documentation generator/updater you'll ever need** \* +If you're in hurry, jump to the **last documentation generator/updater you'll ever need** \* in the [sample section](#sample). _\*: for TypeScript, maybe._ @@ -64,26 +64,26 @@ graph TD So instead of fighting spaces and new lines, you can just locate the `function_declaration` node that follows a `comment` node. -```ts title="docs.genai.mts" -const functionAndComment = sg.find_function_with_outdated_comment() +```ts title="docs.genai.mts" wrap +const node = sg.search("functions without comments") ``` Once you've located the node to update, you could do any transformation you want, e.g. replace it with another text. In terms of GenAI script, this means that you can build a prompt that includes as much context as you need, generate a response. -```ts title="docs.genai.mts" +```ts title="docs.genai.mts" wrap $`Update the documentation of the function 'fn' to reflect the new behavior of the function.` -fence(functionAndComment.text()) +fence(node.text()) ``` ```txt -subs a and b +/* subs a and b */ ``` Once the LLM responds with the new comment, you could insert it as the new content of the node in the AST. ```ts title="docs.genai.mts" -functionAndComment.comment().text = response +edits.replace(node.comment(), response) ``` ```mermaid @@ -107,18 +107,23 @@ To recap, this strategy is based on the following steps: 2. **transform and replace** Use the LLM to generate the new content of the node. 3. **commit** Update the node in the AST with the new content. -### ast-grep +## ast-grep ![AST-Grep Logo](https://ast-grep.github.io/logo.svg) [ast-grep(sg)](https://ast-grep.github.io/) is a fast and polyglot tool for code structural search, -lint, rewriting at large scale. **sg** provides us the AST-searh-and-replace capabilities we need to +lint, rewriting at large scale. **sg** provides us the AST-search-and-replace capabilities we need to implement the strategy above. GenAIScript benefits from the excellent [Node.JS integration](https://ast-grep.github.io/reference/api.html#napi), which is available through the [`host.astGrep()`](https://microsoft.github.io/genaiscript/reference/scripts/ast-grep) method. -```ts title="docs.genai.mts" +### Searching + +The `sg.search` method allows you to search for nodes in the AST. It takes the language, file glob +and pattern syntax and returns a list of matches. + +```ts title="docs.genai.mts" wrap // search const { matches, replace } = await sg.search("ts", "src/*fib*.ts", { rule: { @@ -131,7 +136,13 @@ const { matches, replace } = await sg.search("ts", "src/*fib*.ts", { }, }, }) +``` + +### Editing + +The `sg.changeset` method creates a changeset that can be used to apply a set of edits to a set of files. +```ts // transform const edits = sg.changeset() for (const match of matches) { @@ -155,10 +166,10 @@ The `docs` scripts is a documentation generator/updater. - if the `diff` option is selected, it will filter out functions that do not intersect with the diff (this is rather naive but a good start...). - it can also be used to update the documentation of a function that has changed. -- it works regarless of the file size or the number of files as most transformations are hyper-localized. +- it works regardless of the file size or the number of files as most transformations are hyper-localized. ```sh title="generate and refresh my docs plz" -npm run genaiscript docs -- --diff +genaiscript run docs -- --diff ``` Here are some example of applications of the scripts (one-shot, no human edit, multi-edit per file): From a48e4a100e0dc099313affe0585c697cd35c38bc Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Wed, 2 Apr 2025 07:24:12 -0700 Subject: [PATCH 15/20] Cli-run-help (#1416) * help cli for scripts * add sparc rules * fixes to support dev * output trace again --- .github/prompts/sparc.md | 279 ++++++++++++++++++ .github/workflows/genai-commander.yml | 28 +- .github/workflows/genai-pr-commit-review.yml | 4 +- .../workflows/genai-pr-docs-commit-review.yml | 4 +- .github/workflows/genai-pr-review.yml | 4 +- .../content/docs/reference/cli/commands.md | 16 +- packages/cli/src/cli.ts | 14 +- packages/cli/src/run.ts | 8 +- packages/cli/src/scripts.ts | 36 ++- packages/core/src/schema.ts | 4 +- packages/core/src/types/prompt_template.d.ts | 12 +- .../genaisrc/pr-docs-review-commit.genai.mjs | 6 + packages/sample/genaisrc/pr-review.genai.mjs | 6 + 13 files changed, 383 insertions(+), 38 deletions(-) create mode 100644 .github/prompts/sparc.md diff --git a/.github/prompts/sparc.md b/.github/prompts/sparc.md new file mode 100644 index 0000000000..cafff565de --- /dev/null +++ b/.github/prompts/sparc.md @@ -0,0 +1,279 @@ +// from: https://gist.githubusercontent.com/ruvnet/7d4e1d5c9233ab0a1d2a66bf5ec3e58f/raw/923916fa92cd225c3d5eeec12a184a4a2a2462ff/.cursorules.txt + +# SPARC Agentic Development Rules + +Core Philosophy + +1. Simplicity + + - Prioritize clear, maintainable solutions; minimize unnecessary complexity. + +2. Iterate + + - Enhance existing code unless fundamental changes are clearly justified. + +3. Focus + + - Stick strictly to defined tasks; avoid unrelated scope changes. + +4. Quality + + - Deliver clean, well-tested, documented, and secure outcomes through structured workflows. + +5. Collaboration + - Foster effective teamwork between human developers and autonomous agents. + +Methodology & Workflow + +- Structured Workflow + - Follow clear phases from specification through deployment. +- Flexibility + - Adapt processes to diverse project sizes and complexity levels. +- Intelligent Evolution + - Continuously improve codebase using advanced symbolic reasoning and adaptive complexity management. +- Conscious Integration + - Incorporate reflective awareness at each development stage. + +Agentic Integration with Cline and Cursor + +- Cline Configuration (.clinerules) + + - Embed concise, project-specific rules to guide autonomous behaviors, prompt designs, and contextual decisions. + +- Cursor Configuration (.cursorrules) + - Clearly define repository-specific standards for code style, consistency, testing practices, and symbolic reasoning integration points. + +Memory Bank Integration + +- Persistent Context + - Continuously retain relevant context across development stages to ensure coherent long-term planning and decision-making. +- Reference Prior Decisions + - Regularly review past decisions stored in memory to maintain consistency and reduce redundancy. +- Adaptive Learning + - Utilize historical data and previous solutions to adaptively refine new implementations. + +General Guidelines for Programming Languages + +1. Clarity and Readability + + - Favor straightforward, self-explanatory code structures across all languages. + - Include descriptive comments to clarify complex logic. + +2. Language-Specific Best Practices + + - Adhere to established community and project-specific best practices for each language (Python, JavaScript, Java, etc.). + - Regularly review language documentation and style guides. + +3. Consistency Across Codebases + - Maintain uniform coding conventions and naming schemes across all languages used within a project. + +Project Context & Understanding + +1. Documentation First + + - Review essential documentation before implementation: + - Product Requirements Documents (PRDs) + - README.md + - docs/architecture.md + - docs/technical.md + - tasks/tasks.md + - Request clarification immediately if documentation is incomplete or ambiguous. + +2. Architecture Adherence + + - Follow established module boundaries and architectural designs. + - Validate architectural decisions using symbolic reasoning; propose justified alternatives when necessary. + +3. Pattern & Tech Stack Awareness + - Utilize documented technologies and established patterns; introduce new elements only after clear justification. + +Task Execution & Workflow + +Task Definition & Steps + +1. Specification + + - Define clear objectives, detailed requirements, user scenarios, and UI/UX standards. + - Use advanced symbolic reasoning to analyze complex scenarios. + +2. Pseudocode + + - Clearly map out logical implementation pathways before coding. + +3. Architecture + + - Design modular, maintainable system components using appropriate technology stacks. + - Ensure integration points are clearly defined for autonomous decision-making. + +4. Refinement + + - Iteratively optimize code using autonomous feedback loops and stakeholder inputs. + +5. Completion + - Conduct rigorous testing, finalize comprehensive documentation, and deploy structured monitoring strategies. + +AI Collaboration & Prompting + +1. Clear Instructions + + - Provide explicit directives with defined outcomes, constraints, and contextual information. + +2. Context Referencing + + - Regularly reference previous stages and decisions stored in the memory bank. + +3. Suggest vs. Apply + + - Clearly indicate whether AI should propose ("Suggestion:") or directly implement changes ("Applying fix:"). + +4. Critical Evaluation + + - Thoroughly review all agentic outputs for accuracy and logical coherence. + +5. Focused Interaction + + - Assign specific, clearly defined tasks to AI agents to maintain clarity. + +6. Leverage Agent Strengths + + - Utilize AI for refactoring, symbolic reasoning, adaptive optimization, and test generation; human oversight remains on core logic and strategic architecture. + +7. Incremental Progress + + - Break complex tasks into incremental, reviewable sub-steps. + +8. Standard Check-in + - Example: "Confirming understanding: Reviewed [context], goal is [goal], proceeding with [step]." + +Advanced Coding Capabilities + +- Emergent Intelligence + - AI autonomously maintains internal state models, supporting continuous refinement. +- Pattern Recognition + - Autonomous agents perform advanced pattern analysis for effective optimization. +- Adaptive Optimization + - Continuously evolving feedback loops refine the development process. + +Symbolic Reasoning Integration + +- Symbolic Logic Integration + - Combine symbolic logic with complexity analysis for robust decision-making. +- Information Integration + - Utilize symbolic mathematics and established software patterns for coherent implementations. +- Coherent Documentation + - Maintain clear, semantically accurate documentation through symbolic reasoning. + +Code Quality & Style + +1. TypeScript Guidelines + + - Use strict types, and clearly document logic with JSDoc. + +2. Maintainability + + - Write modular, scalable code optimized for clarity and maintenance. + +3. Concise Components + + - Keep files concise (under 300 lines) and proactively refactor. + +4. Avoid Duplication (DRY) + + - Use symbolic reasoning to systematically identify redundancy. + +5. Linting/Formatting + + - Consistently adhere to ESLint/Prettier configurations. + +6. File Naming + + - Use descriptive, permanent, and standardized naming conventions. + +7. No One-Time Scripts + - Avoid committing temporary utility scripts to production repositories. + +Refactoring + +1. Purposeful Changes + + - Refactor with clear objectives: improve readability, reduce redundancy, and meet architecture guidelines. + +2. Holistic Approach + + - Consolidate similar components through symbolic analysis. + +3. Direct Modification + + - Directly modify existing code rather than duplicating or creating temporary versions. + +4. Integration Verification + - Verify and validate all integrations after changes. + +Testing & Validation + +1. Test-Driven Development + + - Define and write tests before implementing features or fixes. + +2. Comprehensive Coverage + + - Provide thorough test coverage for critical paths and edge cases. + +3. Mandatory Passing + + - Immediately address any failing tests to maintain high-quality standards. + +4. Manual Verification + - Complement automated tests with structured manual checks. + +Debugging & Troubleshooting + +1. Root Cause Resolution + + - Employ symbolic reasoning to identify underlying causes of issues. + +2. Targeted Logging + + - Integrate precise logging for efficient debugging. + +3. Research Tools + - Use advanced agentic tools (Perplexity, AIDER.chat, Firecrawl) to resolve complex issues efficiently. + +Security + +1. Server-Side Authority + + - Maintain sensitive logic and data processing strictly server-side. + +2. Input Sanitization + + - Enforce rigorous server-side input validation. + +3. Credential Management + - Securely manage credentials via environment variables; avoid any hardcoding. + +Version Control & Environment + +1. Git Hygiene + + - Commit frequently with clear and descriptive messages. + +2. Branching Strategy + + - Adhere strictly to defined branching guidelines. + +3. Environment Management + + - Ensure code consistency and compatibility across all environments. + +4. Server Management + - Systematically restart servers following updates or configuration changes. + +Documentation Maintenance + +1. Reflective Documentation + + - Keep comprehensive, accurate, and logically structured documentation updated through symbolic reasoning. + +2. Continuous Updates + - Regularly revisit and refine guidelines to reflect evolving practices and accumulated project knowledge. diff --git a/.github/workflows/genai-commander.yml b/.github/workflows/genai-commander.yml index 418253e5f9..32aedf7e7d 100644 --- a/.github/workflows/genai-commander.yml +++ b/.github/workflows/genai-commander.yml @@ -32,13 +32,13 @@ jobs: id: check_author uses: actions/github-script@v7 with: - script: | - const { owner, repo } = context.repo; - const commentAuthor = context.payload.comment.user.login; - const { data: collaborators } = await github.rest.repos.listCollaborators({ owner, repo }); - const isCollaborator = collaborators.some(collaborator => collaborator.login === commentAuthor); - if (!isCollaborator) - throw new Error(`user ${commentAuthor} is not a collaborator on this repository`); + script: | + const { owner, repo } = context.repo; + const commentAuthor = context.payload.comment.user.login; + const { data: collaborators } = await github.rest.repos.listCollaborators({ owner, repo }); + const isCollaborator = collaborators.some(collaborator => collaborator.login === commentAuthor); + if (!isCollaborator) + throw new Error(`user ${commentAuthor} is not a collaborator on this repository`); # # Resolve the PR sha and ref # @@ -54,20 +54,20 @@ jobs: console.log(res) return JSON.stringify(res) # - # Checkout both main and PR branches + # Checkout both dev and PR branches # - name: checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: diff PR branch - run: git diff origin/main...origin/${{ fromJSON(steps.sha.outputs.result).ref }} + run: git diff origin/dev...origin/${{ fromJSON(steps.sha.outputs.result).ref }} - name: diff PR commit - run: git diff origin/main...${{ fromJSON(steps.sha.outputs.result).sha }} + run: git diff origin/dev...${{ fromJSON(steps.sha.outputs.result).sha }} - name: checkout PR commit run: git checkout ${{ fromJSON(steps.sha.outputs.result).sha }} - - name: diff main - run: git diff origin/main + - name: diff dev + run: git diff origin/dev # # Setup and build project # @@ -88,14 +88,14 @@ jobs: # - name: genaiscript pr-describe if: startsWith(github.event.comment.body, '/genai describe') - run: node packages/cli/built/genaiscript.cjs run pr-describe -prd --out-output $GITHUB_STEP_SUMMARY + run: node packages/cli/built/genaiscript.cjs run pr-describe -prd --out-trace $GITHUB_STEP_SUMMARY --vars defaultBranch=dev env: GITHUB_ISSUE: ${{ github.event.issue.number }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_COMMIT_SHA: ${{ fromJSON(steps.sha.outputs.result).sha }} - name: genaiscript pr-review if: startsWith(github.event.comment.body, '/genai review') - run: node packages/cli/built/genaiscript.cjs run pr-review -prc --out-output $GITHUB_STEP_SUMMARY + run: node packages/cli/built/genaiscript.cjs run pr-review -prc --out-trace $GITHUB_STEP_SUMMARY --vars defaultBranch=dev env: GITHUB_ISSUE: ${{ github.event.issue.number }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/genai-pr-commit-review.yml b/.github/workflows/genai-pr-commit-review.yml index 91ad511936..5d16429ce4 100644 --- a/.github/workflows/genai-pr-commit-review.yml +++ b/.github/workflows/genai-pr-commit-review.yml @@ -33,9 +33,9 @@ jobs: - name: start ollama run: yarn ollama:start - name: git stuff - run: git fetch origin && git pull origin main:main + run: git fetch origin && git pull origin dev:dev - name: genaiscript pr-review-commit - run: node packages/cli/built/genaiscript.cjs run pr-review-commit --out ./temp/genai/pr-review-commit -prr --out-trace $GITHUB_STEP_SUMMARY + run: node packages/cli/built/genaiscript.cjs run pr-review-commit --out ./temp/genai/pr-review-commit -prr --out-trace $GITHUB_STEP_SUMMARY --vars defaultBranch=dev continue-on-error: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/genai-pr-docs-commit-review.yml b/.github/workflows/genai-pr-docs-commit-review.yml index 47d5d6ed47..15c316aae8 100644 --- a/.github/workflows/genai-pr-docs-commit-review.yml +++ b/.github/workflows/genai-pr-docs-commit-review.yml @@ -30,9 +30,9 @@ jobs: - name: start ollama run: yarn ollama:start - name: git stuff - run: git fetch origin && git pull origin main:main + run: git fetch origin && git pull origin dev:dev - name: genaiscript pr-review-commit - run: node packages/cli/built/genaiscript.cjs run pr-docs-review-commit --out ./temp/genai/pr-docs-review-commit -prr --out-trace $GITHUB_STEP_SUMMARY + run: node packages/cli/built/genaiscript.cjs run pr-docs-review-commit --out ./temp/genai/pr-docs-review-commit -prr --out-trace $GITHUB_STEP_SUMMARY --vars defaultBranch=dev continue-on-error: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/genai-pr-review.yml b/.github/workflows/genai-pr-review.yml index c3859ed077..9f90c0d9b7 100644 --- a/.github/workflows/genai-pr-review.yml +++ b/.github/workflows/genai-pr-review.yml @@ -41,11 +41,11 @@ jobs: run: git fetch origin && git pull origin main:main - name: genaiscript pr-describe continue-on-error: true - run: node packages/cli/built/genaiscript.cjs run pr-describe --out ./temp/genai/pr-describe -prd -m reasoning --out-trace $GITHUB_STEP_SUMMARY + run: node packages/cli/built/genaiscript.cjs run pr-describe --out ./temp/genai/pr-describe -prd -m reasoning --out-trace $GITHUB_STEP_SUMMARY --vars defaultBranch=dev env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: genaiscript pr-review - run: node packages/cli/built/genaiscript.cjs run pr-review --out ./temp/genai/pr-review -prc -m reasoning --out-trace $GITHUB_STEP_SUMMARY + run: node packages/cli/built/genaiscript.cjs run pr-review --out ./temp/genai/pr-review -prc -m reasoning --out-trace $GITHUB_STEP_SUMMARY --vars defaultBranch=dev continue-on-error: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/src/content/docs/reference/cli/commands.md b/docs/src/content/docs/reference/cli/commands.md index 145ae5bce8..00ab6e850e 100644 --- a/docs/src/content/docs/reference/cli/commands.md +++ b/docs/src/content/docs/reference/cli/commands.md @@ -266,7 +266,7 @@ Commands: folder to enable type checking. compile [folders...] Compile all scripts in workspace model [options] [script] List model connection information for scripts - help [command] display help for command + help|info