mirror of
https://github.com/Gitlawb/openclaude.git
synced 2026-11-06 20:58:14 -04:00
* chore(rebrand): update Gitlawb references to Twigpine (#2246) The GitHub org has been renamed to Twigpine, so point repo URLs, badges, CI repo-identity guards, and user-facing sponsor/partner labels at the new name. Scope is deliberately limited to references that are safe to change today: - GitHub URLs (github.com, api.github.com, raw.githubusercontent.com), including the skills registry and release-please release notes - The release-please release trigger, which gates on the repo slug and would otherwise stop publishing - User-visible display strings: gateway label/name, AI/ML API partner name, sponsored-tip sponsor, and docs/site prose Left on the old name because the rename has not landed for them: - `@gitlawb/openclaude` npm scope (the package does not exist on npm) - opengateway/ads/docs subdomains, which resolve only under gitlawb.com - The `gitlawb-opengateway` preset id, tip ids, and gateway file names, which are persisted in user config and sent on the wire * fix(aimlapi): stop matching topup intent on partnerName (#2246) partnerName is display metadata that travels alongside the partner id, not part of the intent identity. It is now excluded from INTENT_KEYS, so matchesIntent no longer requires it to be unchanged. Without this, renaming the partner on the Gitlawb -> Twigpine rebrand would have stranded any in-flight topup: a receipt persisted under the old name fails the strict equality check, so loadAimlapiTopupState returns null and the user restarts checkout. partnerId remains the identity field, so receipts are still scoped to the correct partner. * fix(web): use current Twigpine artwork for the partner card (#2246) The partner asset was a byte-identical rename, so the roster row rendered the former GitLawb key/branch symbol under the Twigpine name while the README pointed at the official tree mark. Vendors the current artwork from twigpine.com/logo.png, resized to the roster's 256x256 convention, keeping the self-hosting contract in web/src/data/partners.ts. --------- Co-authored-by: Gravirei <gravirei@users.noreply.github.com>
61 lines
2.3 KiB
TypeScript
61 lines
2.3 KiB
TypeScript
import { existsSync, readFileSync } from 'fs'
|
|
import { join } from 'path'
|
|
import { expect, test } from 'bun:test'
|
|
|
|
const REPO_ROOT = join(import.meta.dir, '..')
|
|
const DIST = join(REPO_ROOT, 'dist/cli.mjs')
|
|
|
|
// Regression for Twigpine/openclaude#706. The bundled KAIROS dream skill
|
|
// (src/skills/bundled/dream.js, not mirrored) must not stub the real
|
|
// /dream slash command at src/commands/dream/dream.ts during bundling.
|
|
test('/dream command is present in the CLI bundle', () => {
|
|
if (!existsSync(DIST)) {
|
|
throw new Error(
|
|
'dist/cli.mjs not found — run `bun run build` before this test',
|
|
)
|
|
}
|
|
|
|
const bundle = readFileSync(DIST, 'utf-8')
|
|
|
|
expect(bundle).toContain('consolidating memories')
|
|
expect(bundle).not.toMatch(
|
|
/missing-module-stub:.*commands\/dream\/dream\.js/,
|
|
)
|
|
})
|
|
|
|
// Regression for the WebFetch SSRF guard. WebFetchTool passes the real
|
|
// ssrfGuardedLookup (src/utils/hooks/ssrfGuard.ts) as its DNS `lookup`. A
|
|
// string-literal import of that module inside
|
|
// src/__tests__/security-hardening.test.ts previously registered the specifier
|
|
// as missing, and the specifier-keyed resolver then replaced WebFetch's real
|
|
// import with a noop in dist/cli.mjs — silently disabling SSRF protection. The
|
|
// source-level test only reads src/tools/WebFetchTool/utils.ts, so it cannot
|
|
// catch a bundle-only regression; assert against the shipped bundle instead.
|
|
test('WebFetch binds the real ssrfGuardedLookup in the CLI bundle', () => {
|
|
if (!existsSync(DIST)) {
|
|
throw new Error(
|
|
'dist/cli.mjs not found — run `bun run build` before this test',
|
|
)
|
|
}
|
|
|
|
const bundle = readFileSync(DIST, 'utf-8')
|
|
|
|
// The real guard's distinctive blocked-address error must be bundled...
|
|
expect(bundle).toContain('private/link-local address')
|
|
// ...and ssrfGuard must not have been replaced by a missing-module stub.
|
|
expect(bundle).not.toMatch(/missing-module-stub:.*ssrfGuard/)
|
|
})
|
|
|
|
test('CLI bundle includes the real sandbox runtime instead of the native stub', () => {
|
|
if (!existsSync(DIST)) {
|
|
throw new Error(
|
|
'dist/cli.mjs not found — run `bun run build` before this test',
|
|
)
|
|
}
|
|
|
|
const bundle = readFileSync(DIST, 'utf-8')
|
|
|
|
expect(bundle).not.toContain('native-stub:@anthropic-ai/sandbox-runtime')
|
|
expect(bundle).toContain('bubblewrap (bwrap) not installed')
|
|
})
|