@simonepri/refined-antigravity-acp 0.1.0 → 0.1.2

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 (82) hide show
  1. package/dist/bin/cli.d.ts +3 -0
  2. package/dist/bin/cli.d.ts.map +1 -0
  3. package/dist/bin/cli.js +56 -0
  4. package/dist/bin/cli.js.map +1 -0
  5. package/dist/index.server.d.ts +4 -0
  6. package/dist/index.server.d.ts.map +1 -0
  7. package/dist/index.server.js +7 -0
  8. package/dist/index.server.js.map +1 -0
  9. package/dist/src/agy-patch.d.ts +65 -0
  10. package/dist/src/agy-patch.d.ts.map +1 -0
  11. package/dist/src/agy-patch.js +351 -0
  12. package/dist/src/agy-patch.js.map +1 -0
  13. package/dist/src/auth.d.ts +27 -0
  14. package/dist/src/auth.d.ts.map +1 -0
  15. package/dist/src/auth.js +113 -0
  16. package/dist/src/auth.js.map +1 -0
  17. package/dist/src/command.d.ts +5 -0
  18. package/dist/src/command.d.ts.map +1 -0
  19. package/dist/src/command.js +74 -0
  20. package/dist/src/command.js.map +1 -0
  21. package/dist/src/connector.d.ts +188 -0
  22. package/dist/src/connector.d.ts.map +1 -0
  23. package/dist/src/connector.js +1138 -0
  24. package/dist/src/connector.js.map +1 -0
  25. package/dist/src/history.d.ts +12 -0
  26. package/dist/src/history.d.ts.map +1 -0
  27. package/dist/src/history.js +152 -0
  28. package/dist/src/history.js.map +1 -0
  29. package/dist/src/mcp-proxy.d.ts +83 -0
  30. package/dist/src/mcp-proxy.d.ts.map +1 -0
  31. package/dist/src/mcp-proxy.js +308 -0
  32. package/dist/src/mcp-proxy.js.map +1 -0
  33. package/dist/src/provider.d.ts +11 -0
  34. package/dist/src/provider.d.ts.map +1 -0
  35. package/dist/src/provider.js +31 -0
  36. package/dist/src/provider.js.map +1 -0
  37. package/dist/src/sanitize.d.ts +29 -0
  38. package/dist/src/sanitize.d.ts.map +1 -0
  39. package/dist/src/sanitize.js +237 -0
  40. package/dist/src/sanitize.js.map +1 -0
  41. package/dist/src/skills.d.ts +17 -0
  42. package/dist/src/skills.d.ts.map +1 -0
  43. package/dist/src/skills.js +140 -0
  44. package/dist/src/skills.js.map +1 -0
  45. package/dist/src/steering.d.ts +30 -0
  46. package/dist/src/steering.d.ts.map +1 -0
  47. package/dist/src/steering.js +174 -0
  48. package/dist/src/steering.js.map +1 -0
  49. package/package.json +20 -13
  50. package/paseo-plugin.json +0 -1
  51. package/readme.md +3 -5
  52. package/.fallowrc.json +0 -11
  53. package/.github/workflows/ci.yml +0 -24
  54. package/.github/workflows/release.yml +0 -41
  55. package/.oxlintignore +0 -2
  56. package/.oxlintrc.json +0 -152
  57. package/.release-please-manifest.json +0 -3
  58. package/bin/cli.ts +0 -58
  59. package/index.server.ts +0 -9
  60. package/pnpm-workspace.yaml +0 -44
  61. package/release-please-config.json +0 -13
  62. package/server/agy-patch.test.ts +0 -445
  63. package/server/agy-patch.ts +0 -445
  64. package/server/auth.test.ts +0 -51
  65. package/server/auth.ts +0 -122
  66. package/server/command.test.ts +0 -18
  67. package/server/command.ts +0 -92
  68. package/server/connector.test.ts +0 -1136
  69. package/server/connector.ts +0 -1386
  70. package/server/history.test.ts +0 -139
  71. package/server/history.ts +0 -157
  72. package/server/mcp-proxy.test.ts +0 -368
  73. package/server/mcp-proxy.ts +0 -375
  74. package/server/provider.test.ts +0 -11
  75. package/server/provider.ts +0 -37
  76. package/server/sanitize.test.ts +0 -174
  77. package/server/sanitize.ts +0 -286
  78. package/server/skills.test.ts +0 -121
  79. package/server/skills.ts +0 -183
  80. package/server/steering.test.ts +0 -405
  81. package/server/steering.ts +0 -199
  82. package/tsconfig.json +0 -14
@@ -0,0 +1,174 @@
1
+ import { readConversationHistory } from "./history.js";
2
+ import { formatSteeringPrompt } from "./sanitize.js";
3
+ import { augmentCommands, expandSkillInvocation } from "./skills.js";
4
+ function transformPromptInput(input, isSteerReplacement, cwd) {
5
+ if (input.type !== "session.prompt" || input.prompt.input.type !== "message") {
6
+ return input;
7
+ }
8
+ // Only the first text part carries the steering marker; prefixing every part would
9
+ // repeat it throughout a multi-part prompt.
10
+ let markerPending = isSteerReplacement;
11
+ const content = input.prompt.input.content.map((part) => {
12
+ if (part.type !== "text")
13
+ return part;
14
+ let text = expandSkillInvocation(part.text, cwd);
15
+ if (markerPending) {
16
+ text = formatSteeringPrompt(text);
17
+ markerPending = false;
18
+ }
19
+ return { ...part, text };
20
+ });
21
+ return {
22
+ ...input,
23
+ prompt: {
24
+ ...input.prompt,
25
+ input: { ...input.prompt.input, content },
26
+ },
27
+ };
28
+ }
29
+ function readNativeSessionId(persistence) {
30
+ if (!persistence || typeof persistence !== "object" || Array.isArray(persistence)) {
31
+ return null;
32
+ }
33
+ const data = persistence.data;
34
+ if (!data || typeof data !== "object" || Array.isArray(data))
35
+ return null;
36
+ const sessionId = data.sessionId;
37
+ return typeof sessionId === "string" ? sessionId : null;
38
+ }
39
+ /**
40
+ * Connection wrapper that decorates a base ProviderConnection with:
41
+ * 1. Mid-turn steering (`prompt.steer`)
42
+ * 2. Slash skill command advertising (`session.commands`)
43
+ * 3. Slash skill expansion on prompt submission
44
+ * 4. Automatic conversation history replay from Antigravity SQLite on session reload
45
+ */
46
+ export class SteeringConnection {
47
+ base;
48
+ request;
49
+ version;
50
+ capabilities;
51
+ sessionCwds = new Map();
52
+ pendingSteers = new Set();
53
+ replaySessions = new Set();
54
+ listeners = new Set();
55
+ unbindBase;
56
+ constructor(base, request) {
57
+ this.base = base;
58
+ this.request = request;
59
+ this.version = base.version;
60
+ this.capabilities = request.capabilities.includes("prompt.steer")
61
+ ? Array.from(new Set([...base.capabilities, "prompt.steer"]))
62
+ : base.capabilities;
63
+ this.unbindBase = this.base.onEvent((event) => this.handleBaseEvent(event));
64
+ }
65
+ emitSessionSkills(sessionId, cwd) {
66
+ try {
67
+ const commands = augmentCommands(undefined, cwd);
68
+ if (commands.length > 0) {
69
+ this.emit({ type: "session.commands", sessionId, commands });
70
+ }
71
+ }
72
+ catch (err) {
73
+ console.error("[paseo-antigravity] Failed to emit session.commands on session.opened:", err);
74
+ }
75
+ }
76
+ replaySessionHistory(sessionId, nativeSessionId) {
77
+ try {
78
+ const history = readConversationHistory(nativeSessionId);
79
+ for (const entry of history) {
80
+ this.emit({
81
+ type: "timeline.item",
82
+ sessionId,
83
+ item: entry.item,
84
+ timestamp: entry.timestamp,
85
+ });
86
+ }
87
+ }
88
+ catch (err) {
89
+ console.error(`[paseo-antigravity] Failed to replay history for ${sessionId}:`, err);
90
+ }
91
+ }
92
+ handleSessionOpened(event) {
93
+ const cwd = event.cwd ?? process.cwd();
94
+ this.sessionCwds.set(event.sessionId, cwd);
95
+ const sessionCaps = this.request.capabilities.includes("prompt.steer")
96
+ ? Array.from(new Set([...event.capabilities, "prompt.steer"]))
97
+ : event.capabilities;
98
+ this.emit({ ...event, capabilities: sessionCaps });
99
+ if (this.replaySessions.delete(event.sessionId)) {
100
+ const nativeId = readNativeSessionId(event.persistence);
101
+ if (nativeId) {
102
+ this.replaySessionHistory(event.sessionId, nativeId);
103
+ }
104
+ }
105
+ this.emitSessionSkills(event.sessionId, cwd);
106
+ }
107
+ handleBaseEvent(event) {
108
+ if (event.type === "session.opened") {
109
+ this.handleSessionOpened(event);
110
+ return;
111
+ }
112
+ if (event.type === "session.commands") {
113
+ const cwd = this.sessionCwds.get(event.sessionId);
114
+ const commands = augmentCommands(event.commands, cwd);
115
+ this.emit({ ...event, commands });
116
+ return;
117
+ }
118
+ this.emit(event);
119
+ }
120
+ emit(event) {
121
+ for (const listener of this.listeners) {
122
+ listener(event);
123
+ }
124
+ }
125
+ handleSteerPrompt(sessionId, clientMessageId) {
126
+ this.pendingSteers.add(sessionId);
127
+ this.emit({
128
+ type: "session.prompt_result",
129
+ sessionId,
130
+ clientMessageId,
131
+ result: { type: "completed" },
132
+ });
133
+ }
134
+ async send(input) {
135
+ if (input.type === "session.open") {
136
+ if (input.history === "replay") {
137
+ this.replaySessions.add(input.sessionId);
138
+ }
139
+ }
140
+ if (input.type === "session.prompt") {
141
+ if (input.prompt.delivery === "steer") {
142
+ this.handleSteerPrompt(input.sessionId, input.prompt.clientMessageId);
143
+ return;
144
+ }
145
+ // Paseo answers a steer by cancelling the turn and re-dispatching the text as a
146
+ // normal prompt. `pendingSteers` is how we recognise that replacement so it can be
147
+ // marked as a mid-turn interruption rather than a fresh instruction.
148
+ const isReplacement = this.pendingSteers.delete(input.sessionId);
149
+ const cwd = this.sessionCwds.get(input.sessionId);
150
+ input = transformPromptInput(input, isReplacement, cwd);
151
+ }
152
+ if (input.type === "session.close") {
153
+ this.pendingSteers.delete(input.sessionId);
154
+ this.replaySessions.delete(input.sessionId);
155
+ this.sessionCwds.delete(input.sessionId);
156
+ }
157
+ return this.base.send(input);
158
+ }
159
+ onEvent(listener) {
160
+ this.listeners.add(listener);
161
+ return () => {
162
+ this.listeners.delete(listener);
163
+ };
164
+ }
165
+ async close() {
166
+ this.pendingSteers.clear();
167
+ this.replaySessions.clear();
168
+ this.sessionCwds.clear();
169
+ this.listeners.clear();
170
+ this.unbindBase();
171
+ return this.base.close();
172
+ }
173
+ }
174
+ //# sourceMappingURL=steering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/steering.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simonepri/refined-antigravity-acp",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "A hardened wrapper around Google's official Antigravity ACP binary.",
5
5
  "homepage": "https://github.com/simonepri/refined-antigravity-acp#readme",
6
6
  "bugs": {
@@ -13,15 +13,29 @@
13
13
  "url": "git+https://github.com/simonepri/refined-antigravity-acp.git"
14
14
  },
15
15
  "bin": {
16
- "agy-acp": "dist/bin/cli.js",
17
- "antigravity-acp": "dist/bin/cli.js",
18
- "ragy-acp": "dist/bin/cli.js",
19
16
  "refined-antigravity-acp": "dist/bin/cli.js"
20
17
  },
18
+ "files": [
19
+ "dist",
20
+ "paseo-plugin.json",
21
+ "readme.md",
22
+ "license",
23
+ "assets"
24
+ ],
21
25
  "type": "module",
22
26
  "publishConfig": {
23
27
  "access": "public"
24
28
  },
29
+ "scripts": {
30
+ "test": "vitest run",
31
+ "typecheck": "tsc --noEmit",
32
+ "lint": "oxlint",
33
+ "format": "oxfmt",
34
+ "format:check": "oxfmt --check",
35
+ "dead-code": "fallow dead-code",
36
+ "build": "tsc -p tsconfig.build.json",
37
+ "prepack": "pnpm build"
38
+ },
25
39
  "devDependencies": {
26
40
  "@getpaseo/plugin": "^0.9.0",
27
41
  "@types/node": "^24.3.0",
@@ -34,12 +48,5 @@
34
48
  "engines": {
35
49
  "node": ">=22.0.0"
36
50
  },
37
- "scripts": {
38
- "test": "vitest run",
39
- "typecheck": "tsc --noEmit",
40
- "lint": "oxlint",
41
- "format": "oxfmt",
42
- "format:check": "oxfmt --check",
43
- "dead-code": "fallow dead-code"
44
- }
45
- }
51
+ "packageManager": "pnpm@9.15.4"
52
+ }
package/paseo-plugin.json CHANGED
@@ -3,6 +3,5 @@
3
3
  "requirements": {
4
4
  "paseo": "^0.9.0"
5
5
  },
6
- "name": "Refined Antigravity ACP",
7
6
  "description": "Hardened wrapper for Google Antigravity ACP with bugfixes, hang mitigation, and steering."
8
7
  }
package/readme.md CHANGED
@@ -62,11 +62,11 @@ flowchart LR
62
62
  end
63
63
 
64
64
  subgraph Wrapper["Refined Antigravity ACP"]
65
- Connector["Stream Connector<br>(server/connector.ts)"]
65
+ Connector["Stream Connector<br>(src/connector.ts)"]
66
66
  HangDetector["Hang & Turn-Complete Detector<br>(Grace Timers + Synthetic end_turn)"]
67
67
  McpProxy["Loopback MCP Proxy<br>(Header Normalization & 4xx Absorption)"]
68
- Steering["Mid-Flight Steering<br>(server/steering.ts)"]
69
- SkillsEngine["Slash Skills Autocomplete<br>(server/skills.ts)"]
68
+ Steering["Mid-Flight Steering<br>(src/steering.ts)"]
69
+ SkillsEngine["Slash Skills Autocomplete<br>(src/skills.ts)"]
70
70
  Sanitizer["Stream Sanitizer<br>(Markup & Internal Tag Stripping)"]
71
71
  AgyPatch["Binary Patch Engine<br>(Zero-Offset Byte Preservation)"]
72
72
 
@@ -221,8 +221,6 @@ npm install -g @simonepri/refined-antigravity-acp
221
221
  refined-antigravity-acp
222
222
  ```
223
223
 
224
- _(Short aliases `ragy-acp` and `agy-acp` are also available)._
225
-
226
224
  > [!TIP]
227
225
  > The wrapper automatically resolves or downloads the official Google [`agy_acp_server.par`](https://dl.google.com/agy-extensions/releases/) binary if it is not already present on your machine.
228
226
 
package/.fallowrc.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/packages/cli/schema.json",
3
- "entry": ["index.server.ts", "bin/cli.ts"],
4
- "rules": {
5
- "boundary-violation": "off",
6
- "policy-violation": "off",
7
- "unused-exports": "off",
8
- "unused-class-members": "off",
9
- "dev-dependencies-in-production": "off"
10
- }
11
- }
@@ -1,24 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- pull_request:
7
- branches: [main]
8
-
9
- jobs:
10
- verify:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v4
14
- - uses: pnpm/action-setup@v4
15
- - uses: actions/setup-node@v4
16
- with:
17
- node-version: 22
18
- cache: pnpm
19
- - run: pnpm install --frozen-lockfile
20
- - run: pnpm run format:check
21
- - run: pnpm run lint
22
- - run: pnpm run typecheck
23
- - run: pnpm run dead-code
24
- - run: pnpm run test
@@ -1,41 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- branches: [main]
6
-
7
- permissions:
8
- contents: write
9
- pull-requests: write
10
- id-token: write
11
-
12
- jobs:
13
- release-please:
14
- runs-on: ubuntu-latest
15
- steps:
16
- - uses: googleapis/release-please-action@v4
17
- id: release
18
- with:
19
- config-file: release-please-config.json
20
- manifest-file: .release-please-manifest.json
21
-
22
- - uses: actions/checkout@v4
23
- if: ${{ steps.release.outputs.release_created }}
24
-
25
- - uses: pnpm/action-setup@v4
26
- if: ${{ steps.release.outputs.release_created }}
27
-
28
- - uses: actions/setup-node@v4
29
- if: ${{ steps.release.outputs.release_created }}
30
- with:
31
- node-version: 22
32
- cache: pnpm
33
- registry-url: "https://registry.npmjs.org"
34
-
35
- - name: Install dependencies
36
- if: ${{ steps.release.outputs.release_created }}
37
- run: pnpm install --frozen-lockfile
38
-
39
- - name: Publish to npm
40
- if: ${{ steps.release.outputs.release_created }}
41
- run: pnpm publish --access public --no-git-checks
package/.oxlintignore DELETED
@@ -1,2 +0,0 @@
1
- node_modules/
2
- dist/
package/.oxlintrc.json DELETED
@@ -1,152 +0,0 @@
1
- {
2
- "plugins": ["unicorn", "typescript", "oxc", "import", "promise", "vitest", "node"],
3
- "categories": {
4
- "correctness": "deny",
5
- "suspicious": "deny",
6
- "perf": "deny"
7
- },
8
- "rules": {
9
- "complexity": ["error", 10],
10
- "max-lines-per-function": [
11
- "error",
12
- {
13
- "max": 50,
14
- "skipBlankLines": true,
15
- "skipComments": true
16
- }
17
- ],
18
- "max-depth": ["error", 4],
19
- "no-underscore-dangle": "off",
20
- "no-await-in-loop": "off",
21
- "node/no-process-env": "off",
22
- "node/no-sync": "off",
23
- "eqeqeq": "error",
24
- "no-self-compare": "error",
25
- "no-template-curly-in-string": "error",
26
- "no-unneeded-ternary": "error",
27
- "no-useless-concat": "error",
28
- "no-useless-computed-key": "error",
29
- "no-useless-rename": "error",
30
- "no-var": "error",
31
- "prefer-const": "error",
32
- "prefer-numeric-literals": "error",
33
- "prefer-object-has-own": "error",
34
- "prefer-spread": "error",
35
- "yoda": "error",
36
- "typescript/no-floating-promises": "error",
37
- "typescript/no-misused-new": "error",
38
- "typescript/no-non-null-asserted-optional-chain": "error",
39
- "typescript/prefer-as-const": "error",
40
- "typescript/no-extra-non-null-assertion": "error",
41
- "import/no-duplicates": "error",
42
- "import/no-self-import": "error",
43
- "promise/no-new-statics": "error",
44
- "promise/valid-params": "error",
45
- "promise/param-names": "error",
46
- "unicorn/no-instanceof-array": "error",
47
- "unicorn/no-unnecessary-await": "error",
48
- "unicorn/prefer-node-protocol": "error",
49
- "unicorn/prefer-array-find": "error",
50
- "unicorn/prefer-array-flat": "error",
51
- "unicorn/prefer-array-flat-map": "error",
52
- "unicorn/prefer-includes": "error",
53
- "unicorn/prefer-string-starts-ends-with": "error",
54
- "accessor-pairs": "error",
55
- "array-callback-return": "error",
56
- "default-case-last": "error",
57
- "default-param-last": "error",
58
- "grouped-accessor-pairs": "error",
59
- "guard-for-in": "error",
60
- "logical-assignment-operators": "error",
61
- "no-array-constructor": "error",
62
- "no-case-declarations": "error",
63
- "no-constructor-return": "error",
64
- "no-else-return": "error",
65
- "no-extra-label": "error",
66
- "no-fallthrough": "error",
67
- "no-implicit-coercion": "error",
68
- "no-inner-declarations": "error",
69
- "no-labels": "error",
70
- "no-lone-blocks": "error",
71
- "no-loop-func": "error",
72
- "no-multi-assign": "error",
73
- "no-multi-str": "error",
74
- "no-new-func": "error",
75
- "no-new-wrappers": "error",
76
- "no-object-constructor": "error",
77
- "no-prototype-builtins": "error",
78
- "no-redeclare": "error",
79
- "no-return-assign": "error",
80
- "no-script-url": "error",
81
- "no-throw-literal": "error",
82
- "no-useless-return": "error",
83
- "object-shorthand": "error",
84
- "operator-assignment": "error",
85
- "prefer-arrow-callback": "error",
86
- "prefer-exponentiation-operator": "error",
87
- "prefer-object-spread": "error",
88
- "prefer-promise-reject-errors": "error",
89
- "prefer-regex-literals": "error",
90
- "prefer-rest-params": "error",
91
- "radix": "error",
92
- "symbol-description": "error",
93
- "typescript/adjacent-overload-signatures": "error",
94
- "typescript/ban-tslint-comment": "error",
95
- "typescript/class-literal-property-style": "error",
96
- "typescript/consistent-indexed-object-style": "error",
97
- "typescript/consistent-type-assertions": "error",
98
- "typescript/consistent-type-definitions": "error",
99
- "typescript/consistent-type-exports": "error",
100
- "typescript/consistent-type-imports": "error",
101
- "typescript/dot-notation": "error",
102
- "typescript/method-signature-style": "error",
103
- "typescript/no-empty-interface": "error",
104
- "typescript/no-inferrable-types": "error",
105
- "typescript/no-unnecessary-qualifier": "error",
106
- "typescript/prefer-for-of": "error",
107
- "typescript/prefer-function-type": "error",
108
- "typescript/unified-signatures": "error",
109
- "unicorn/custom-error-definition": "error",
110
- "unicorn/error-message": "error",
111
- "unicorn/explicit-timer-delay": "error",
112
- "unicorn/new-for-builtins": "error",
113
- "unicorn/no-new-buffer": "error",
114
- "unicorn/no-static-only-class": "error",
115
- "unicorn/no-this-assignment": "error",
116
- "unicorn/no-typeof-undefined": "error",
117
- "unicorn/no-unnecessary-slice-end": "error",
118
- "unicorn/no-useless-promise-resolve-reject": "error",
119
- "unicorn/no-useless-switch-case": "error",
120
- "unicorn/prefer-array-index-of": "error",
121
- "unicorn/prefer-array-some": "error",
122
- "unicorn/prefer-at": "error",
123
- "unicorn/prefer-date-now": "error",
124
- "unicorn/prefer-default-parameters": "error",
125
- "unicorn/prefer-math-min-max": "error",
126
- "unicorn/prefer-math-trunc": "error",
127
- "unicorn/prefer-native-coercion-functions": "error",
128
- "unicorn/prefer-number-coercion": "error",
129
- "unicorn/prefer-prototype-methods": "error",
130
- "unicorn/prefer-string-slice": "error",
131
- "unicorn/prefer-string-trim-start-end": "error",
132
- "unicorn/prefer-type-error": "error",
133
- "unicorn/throw-new-error": "error",
134
- "promise/no-nesting": "error",
135
- "promise/no-return-wrap": "error",
136
- "promise/prefer-catch": "error",
137
- "import/newline-after-import": "error",
138
- "import/no-mutable-exports": "error"
139
- },
140
- "overrides": [
141
- {
142
- "files": ["**/*.test.ts"],
143
- "rules": {
144
- "max-lines-per-function": "off",
145
- "complexity": "off",
146
- "unicorn/consistent-function-scoping": "off",
147
- "vitest/no-conditional-expect": "off",
148
- "vitest/require-mock-type-parameters": "off"
149
- }
150
- }
151
- ]
152
- }
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.0.0"
3
- }
package/bin/cli.ts DELETED
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import readline from "node:readline";
4
- import { createAntigravityConnector } from "../server/connector.js";
5
-
6
- async function main(): Promise<void> {
7
- const connector = createAntigravityConnector();
8
- const stream = await connector();
9
-
10
- const reader = stream.readable.getReader();
11
- (async () => {
12
- try {
13
- while (true) {
14
- const { done, value } = await reader.read();
15
- if (done) break;
16
- process.stdout.write(JSON.stringify(value) + "\n");
17
- }
18
- } catch (err) {
19
- console.error("[refined-antigravity-acp] Stdio readable stream error:", err);
20
- process.exit(1);
21
- }
22
- })();
23
-
24
- const writer = stream.writable.getWriter();
25
- const rl = readline.createInterface({
26
- input: process.stdin,
27
- terminal: false,
28
- });
29
-
30
- rl.on("line", (line) => {
31
- const trimmed = line.trim();
32
- if (!trimmed) return;
33
- try {
34
- const msg = JSON.parse(trimmed);
35
- writer.write(msg).catch((err) => {
36
- console.error("[refined-antigravity-acp] Failed to forward ACP message:", err);
37
- });
38
- } catch {
39
- // Drop malformed input line
40
- }
41
- });
42
-
43
- rl.on("close", async () => {
44
- try {
45
- await writer.close();
46
- } catch {
47
- // Writer may already be closed
48
- }
49
- });
50
-
51
- process.on("SIGINT", () => process.exit(0));
52
- process.on("SIGTERM", () => process.exit(0));
53
- }
54
-
55
- main().catch((err) => {
56
- console.error("[refined-antigravity-acp] Fatal error:", err);
57
- process.exit(1);
58
- });
package/index.server.ts DELETED
@@ -1,9 +0,0 @@
1
- import type { PluginServerContext } from "@getpaseo/plugin/server";
2
- import { createAntigravityProvider } from "./server/provider.js";
3
-
4
- export { createAntigravityProvider } from "./server/provider.js";
5
-
6
- export default function contribute(server: PluginServerContext) {
7
- server.registerProvider(createAntigravityProvider());
8
- return () => {};
9
- }
@@ -1,44 +0,0 @@
1
- packages:
2
- - "."
3
-
4
- minimumReleaseAgeExclude:
5
- - "@oxfmt/binding-android-arm-eabi@0.70.0"
6
- - "@oxfmt/binding-android-arm64@0.70.0"
7
- - "@oxfmt/binding-darwin-arm64@0.70.0"
8
- - "@oxfmt/binding-darwin-x64@0.70.0"
9
- - "@oxfmt/binding-freebsd-x64@0.70.0"
10
- - "@oxfmt/binding-linux-arm-gnueabihf@0.70.0"
11
- - "@oxfmt/binding-linux-arm-musleabihf@0.70.0"
12
- - "@oxfmt/binding-linux-arm64-gnu@0.70.0"
13
- - "@oxfmt/binding-linux-arm64-musl@0.70.0"
14
- - "@oxfmt/binding-linux-ppc64-gnu@0.70.0"
15
- - "@oxfmt/binding-linux-riscv64-gnu@0.70.0"
16
- - "@oxfmt/binding-linux-riscv64-musl@0.70.0"
17
- - "@oxfmt/binding-linux-s390x-gnu@0.70.0"
18
- - "@oxfmt/binding-linux-x64-gnu@0.70.0"
19
- - "@oxfmt/binding-linux-x64-musl@0.70.0"
20
- - "@oxfmt/binding-openharmony-arm64@0.70.0"
21
- - "@oxfmt/binding-win32-arm64-msvc@0.70.0"
22
- - "@oxfmt/binding-win32-ia32-msvc@0.70.0"
23
- - "@oxfmt/binding-win32-x64-msvc@0.70.0"
24
- - "@oxlint/binding-android-arm-eabi@1.85.0"
25
- - "@oxlint/binding-android-arm64@1.85.0"
26
- - "@oxlint/binding-darwin-arm64@1.85.0"
27
- - "@oxlint/binding-darwin-x64@1.85.0"
28
- - "@oxlint/binding-freebsd-x64@1.85.0"
29
- - "@oxlint/binding-linux-arm-gnueabihf@1.85.0"
30
- - "@oxlint/binding-linux-arm-musleabihf@1.85.0"
31
- - "@oxlint/binding-linux-arm64-gnu@1.85.0"
32
- - "@oxlint/binding-linux-arm64-musl@1.85.0"
33
- - "@oxlint/binding-linux-ppc64-gnu@1.85.0"
34
- - "@oxlint/binding-linux-riscv64-gnu@1.85.0"
35
- - "@oxlint/binding-linux-riscv64-musl@1.85.0"
36
- - "@oxlint/binding-linux-s390x-gnu@1.85.0"
37
- - "@oxlint/binding-linux-x64-gnu@1.85.0"
38
- - "@oxlint/binding-linux-x64-musl@1.85.0"
39
- - "@oxlint/binding-openharmony-arm64@1.85.0"
40
- - "@oxlint/binding-win32-arm64-msvc@1.85.0"
41
- - "@oxlint/binding-win32-ia32-msvc@1.85.0"
42
- - "@oxlint/binding-win32-x64-msvc@1.85.0"
43
- - oxfmt@0.70.0
44
- - oxlint@1.85.0
@@ -1,13 +0,0 @@
1
- {
2
- "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
3
- "release-type": "node",
4
- "bump-minor-pre-major": true,
5
- "bump-patch-for-minor-pre-major": true,
6
- "skip-changelog": true,
7
- "packages": {
8
- ".": {
9
- "initial-version": "0.1.0",
10
- "component": "refined-antigravity-acp"
11
- }
12
- }
13
- }