clanka 0.2.31 → 0.2.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Agent.js CHANGED
@@ -289,9 +289,9 @@ ${content}
289
289
  });
290
290
  });
291
291
  const retryPolicy = Schedule.exponential(100, 1.5).pipe(Schedule.either(Schedule.spaced(5000)), Schedule.jittered);
292
- const defaultSystem = (options) => `You are a world-class software engineer: precise, rigorous, thoughtful, and relentlessly careful. You fully understand the task, verify assumptions, and produce minimal, correct, maintainable solutions. You make no mistakes.
292
+ const defaultSystem = (options) => `You are a world-class software engineer: precise, rigorous, thoughtful, and efficient. You fully understand the task, verify assumptions, and produce minimal, correct, maintainable solutions. You make no mistakes.
293
293
 
294
- - **Fully read and understand your task** before proceeding.
294
+ - Fully read and understand your task before proceeding.
295
295
  - Only add comments when necessary.
296
296
 
297
297
  ${options.toolInstructions}
@@ -114,6 +114,7 @@ describe("preprocessScript", () => {
114
114
  "patch12",
115
115
  "patch13",
116
116
  "patch14",
117
+ "patch15",
117
118
  ])("fixes broken %s", (fixture) => {
118
119
  const content = readFileSync(join(__dirname, "fixtures", `${fixture}-broken.txt`), "utf-8");
119
120
  const fixed = readFileSync(join(__dirname, "fixtures", `${fixture}-fixed.txt`), "utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptPreprocessing.test.js","sourceRoot":"","sources":["../src/ScriptPreprocessing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScriptPreprocessing.test.js","sourceRoot":"","sources":["../src/ScriptPreprocessing.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "clanka",
3
3
  "type": "module",
4
- "version": "0.2.31",
4
+ "version": "0.2.32",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
package/src/Agent.ts CHANGED
@@ -475,9 +475,9 @@ const retryPolicy = Schedule.exponential(100, 1.5).pipe(
475
475
  const defaultSystem = (options: {
476
476
  readonly toolInstructions: string
477
477
  readonly agentsMd: string | null
478
- }) => `You are a world-class software engineer: precise, rigorous, thoughtful, and relentlessly careful. You fully understand the task, verify assumptions, and produce minimal, correct, maintainable solutions. You make no mistakes.
478
+ }) => `You are a world-class software engineer: precise, rigorous, thoughtful, and efficient. You fully understand the task, verify assumptions, and produce minimal, correct, maintainable solutions. You make no mistakes.
479
479
 
480
- - **Fully read and understand your task** before proceeding.
480
+ - Fully read and understand your task before proceeding.
481
481
  - Only add comments when necessary.
482
482
 
483
483
  ${options.toolInstructions}
@@ -172,6 +172,7 @@ describe("preprocessScript", () => {
172
172
  "patch12",
173
173
  "patch13",
174
174
  "patch14",
175
+ "patch15",
175
176
  ])("fixes broken %s", (fixture) => {
176
177
  const content = readFileSync(
177
178
  join(__dirname, "fixtures", `${fixture}-broken.txt`),
@@ -0,0 +1,90 @@
1
+ const patch = `*** Begin Patch
2
+ *** Update File: packages/sql/pg/src/PgClient.ts
3
+ @@
4
+ - const listenClient = yield* RcRef.make({
5
+ - acquire: reserveRaw
6
+ - })
7
+ + const onListenClientError = (_cause: Error) => {
8
+ + //
9
+ + }
10
+ + const listenClient = yield* RcRef.make({
11
+ + acquire: Effect.acquireRelease(
12
+ + Effect.tryPromise({
13
+ + try: async () => {
14
+ + const client = new Pg.Client(pool.options)
15
+ + client.on("error", onListenClientError)
16
+ + await client.connect()
17
+ + return client
18
+ + },
19
+ + catch: (cause) =>
20
+ + new SqlError({
21
+ + reason: classifyError(cause, "Failed to acquire connection for listen", "listen")
22
+ + })
23
+ + }),
24
+ + (client) =>
25
+ + Effect.promise(() => {
26
+ + client.off("error", onListenClientError)
27
+ + return client.end()
28
+ + }).pipe(
29
+ + Effect.timeoutOption(1000)
30
+ + )
31
+ + )
32
+ + })
33
+ *** Add File: packages/sql/pg/test/Listen.test.ts
34
+ +import { PgClient } from "@effect/sql-pg"
35
+ +import { assert, it } from "@effect/vitest"
36
+ +import { Effect, Fiber, Option, Stream } from "effect"
37
+ +import * as Reactivity from "effect/unstable/reactivity/Reactivity"
38
+ +import * as Pg from "pg"
39
+ +import { PgContainer } from "./utils.ts"
40
+ +
41
+ +it.layer(PgContainer.layer, { timeout: "30 seconds" })("PgClient listen", (it) => {
42
+ + it.effect("uses a dedicated connection outside of the pool", () =>
43
+ + Effect.scoped(
44
+ + Effect.gen(function*() {
45
+ + const container = yield* PgContainer
46
+ + const pool = new Pg.Pool({
47
+ + connectionString: container.getConnectionUri(),
48
+ + max: 1,
49
+ + application_name: "@effect/sql-pg-test-listen"
50
+ + })
51
+ + yield* Effect.addFinalizer(() => Effect.promise(() => pool.end()))
52
+ +
53
+ + const client = yield* PgClient.fromPool({
54
+ + acquire: Effect.succeed(pool)
55
+ + }).pipe(
56
+ + Effect.provide(Reactivity.layer)
57
+ + )
58
+ +
59
+ + const channel = \`listen_\${Date.now()}_\${Math.random().toString(36).slice(2)}\`
60
+ + const listener = yield* client.listen(channel).pipe(
61
+ + Stream.take(1),
62
+ + Stream.runHead,
63
+ + Effect.forkScoped
64
+ + )
65
+ +
66
+ + yield* Effect.sleep(200)
67
+ + assert.strictEqual(pool.totalCount, 0)
68
+ +
69
+ + const rows = yield* client<{ value: number }>(\`SELECT 1 AS value\`).pipe(
70
+ + Effect.timeoutFail({
71
+ + duration: "3 seconds",
72
+ + onTimeout: () => new Error("query timed out while listen was active")
73
+ + })
74
+ + )
75
+ + assert.deepEqual(rows, [{ value: 1 }])
76
+ +
77
+ + yield* client.notify(channel, "payload")
78
+ + const message = yield* Fiber.join(listener)
79
+ + assert.deepEqual(message, Option.some("payload"))
80
+ + })
81
+ + ))
82
+ +})
83
+ *** Add File: .changeset/ten-pens-rule.md
84
+ +---
85
+ +"@effect/sql-pg": patch
86
+ +---
87
+ +
88
+ +Change `PgClient.listen` to use a dedicated PostgreSQL connection instead of reserving one from the pool.
89
+ *** End Patch`
90
+ console.log(await applyPatch(patch))
@@ -0,0 +1,90 @@
1
+ const patch = `*** Begin Patch
2
+ *** Update File: packages/sql/pg/src/PgClient.ts
3
+ @@
4
+ - const listenClient = yield* RcRef.make({
5
+ - acquire: reserveRaw
6
+ - })
7
+ + const onListenClientError = (_cause: Error) => {
8
+ + //
9
+ + }
10
+ + const listenClient = yield* RcRef.make({
11
+ + acquire: Effect.acquireRelease(
12
+ + Effect.tryPromise({
13
+ + try: async () => {
14
+ + const client = new Pg.Client(pool.options)
15
+ + client.on("error", onListenClientError)
16
+ + await client.connect()
17
+ + return client
18
+ + },
19
+ + catch: (cause) =>
20
+ + new SqlError({
21
+ + reason: classifyError(cause, "Failed to acquire connection for listen", "listen")
22
+ + })
23
+ + }),
24
+ + (client) =>
25
+ + Effect.promise(() => {
26
+ + client.off("error", onListenClientError)
27
+ + return client.end()
28
+ + }).pipe(
29
+ + Effect.timeoutOption(1000)
30
+ + )
31
+ + )
32
+ + })
33
+ *** Add File: packages/sql/pg/test/Listen.test.ts
34
+ +import { PgClient } from "@effect/sql-pg"
35
+ +import { assert, it } from "@effect/vitest"
36
+ +import { Effect, Fiber, Option, Stream } from "effect"
37
+ +import * as Reactivity from "effect/unstable/reactivity/Reactivity"
38
+ +import * as Pg from "pg"
39
+ +import { PgContainer } from "./utils.ts"
40
+ +
41
+ +it.layer(PgContainer.layer, { timeout: "30 seconds" })("PgClient listen", (it) => {
42
+ + it.effect("uses a dedicated connection outside of the pool", () =>
43
+ + Effect.scoped(
44
+ + Effect.gen(function*() {
45
+ + const container = yield* PgContainer
46
+ + const pool = new Pg.Pool({
47
+ + connectionString: container.getConnectionUri(),
48
+ + max: 1,
49
+ + application_name: "@effect/sql-pg-test-listen"
50
+ + })
51
+ + yield* Effect.addFinalizer(() => Effect.promise(() => pool.end()))
52
+ +
53
+ + const client = yield* PgClient.fromPool({
54
+ + acquire: Effect.succeed(pool)
55
+ + }).pipe(
56
+ + Effect.provide(Reactivity.layer)
57
+ + )
58
+ +
59
+ + const channel = \`listen_\${Date.now()}_\${Math.random().toString(36).slice(2)}\`
60
+ + const listener = yield* client.listen(channel).pipe(
61
+ + Stream.take(1),
62
+ + Stream.runHead,
63
+ + Effect.forkScoped
64
+ + )
65
+ +
66
+ + yield* Effect.sleep(200)
67
+ + assert.strictEqual(pool.totalCount, 0)
68
+ +
69
+ + const rows = yield* client<{ value: number }>(\`SELECT 1 AS value\`).pipe(
70
+ + Effect.timeoutFail({
71
+ + duration: "3 seconds",
72
+ + onTimeout: () => new Error("query timed out while listen was active")
73
+ + })
74
+ + )
75
+ + assert.deepEqual(rows, [{ value: 1 }])
76
+ +
77
+ + yield* client.notify(channel, "payload")
78
+ + const message = yield* Fiber.join(listener)
79
+ + assert.deepEqual(message, Option.some("payload"))
80
+ + })
81
+ + ))
82
+ +})
83
+ *** Add File: .changeset/ten-pens-rule.md
84
+ +---
85
+ +"@effect/sql-pg": patch
86
+ +---
87
+ +
88
+ +Change \`PgClient.listen\` to use a dedicated PostgreSQL connection instead of reserving one from the pool.
89
+ *** End Patch`
90
+ console.log(await applyPatch(patch))