Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,8 @@
"@anthropic-ai/claude-agent-sdk",
"@anthropic-ai/sdk",
"@modelcontextprotocol/sdk"
]
],
"ignoreExportsUsedInFile": true
},
"nx": {
"targets": {
Expand Down
35 changes: 30 additions & 5 deletions apps/cli/src/legacy/auth/legacy-errors.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
import { Data } from "effect";
import {
actionability,
type CliErrorActionabilityDeclaration,
ErrorActionabilityId,
} from "../../shared/telemetry/error-actionability.ts";

export class LegacyInvalidAccessTokenError extends Data.TaggedError(
"LegacyInvalidAccessTokenError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.authLogin;
}
}

export class LegacyPlatformAuthRequiredError extends Data.TaggedError(
"LegacyPlatformAuthRequiredError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.authLogin;
}
}

/**
* Raised by `deleteProjectCredential` when removing a stored database-password
Expand All @@ -21,7 +34,11 @@ export class LegacyPlatformAuthRequiredError extends Data.TaggedError(
*/
export class LegacyCredentialDeleteError extends Data.TaggedError("LegacyCredentialDeleteError")<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.permission;
}
}

/**
* Raised by `deleteAccessToken` when there is no access token to delete, i.e.
Expand All @@ -33,7 +50,11 @@ export class LegacyCredentialDeleteError extends Data.TaggedError("LegacyCredent
*/
export class LegacyNotLoggedInError extends Data.TaggedError("LegacyNotLoggedInError")<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.authLogin;
}
}

/**
* Raised by `deleteAccessToken` when removing the token fails for a real reason
Expand All @@ -44,4 +65,8 @@ export class LegacyNotLoggedInError extends Data.TaggedError("LegacyNotLoggedInE
*/
export class LegacyDeleteTokenError extends Data.TaggedError("LegacyDeleteTokenError")<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.permission;
}
}
30 changes: 26 additions & 4 deletions apps/cli/src/legacy/commands/backups/backups.errors.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,49 @@
import { Data } from "effect";
import {
actionability,
type CliErrorActionabilityDeclaration,
ErrorActionabilityId,
statusCodeActionability,
} from "../../../shared/telemetry/error-actionability.ts";

export class LegacyBackupListNetworkError extends Data.TaggedError("LegacyBackupListNetworkError")<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.externalNetwork;
}
}

export class LegacyBackupListUnexpectedStatusError extends Data.TaggedError(
"LegacyBackupListUnexpectedStatusError",
)<{
readonly status: number;
readonly body: string;
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return statusCodeActionability(this.status);
}
}

export class LegacyBackupRestoreNetworkError extends Data.TaggedError(
"LegacyBackupRestoreNetworkError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.externalNetwork;
}
}

export class LegacyBackupRestoreUnexpectedStatusError extends Data.TaggedError(
"LegacyBackupRestoreUnexpectedStatusError",
)<{
readonly status: number;
readonly body: string;
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return statusCodeActionability(this.status);
}
}
41 changes: 35 additions & 6 deletions apps/cli/src/legacy/commands/bootstrap/bootstrap.errors.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { Data } from "effect";
import {
actionability,
type CliErrorActionabilityDeclaration,
ErrorActionabilityId,
} from "../../../shared/telemetry/error-actionability.ts";

// ---------------------------------------------------------------------------
// Bootstrap-specific tagged errors. Each maps to a Go `errors.New` / failure
Expand All @@ -12,21 +17,33 @@ export class LegacyBootstrapInvalidTemplateError extends Data.TaggedError(
"LegacyBootstrapInvalidTemplateError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.provideFlags;
}
}

/** GitHub samples listing failure — Go's `failed to list samples` (`bootstrap.go:ListSamples`). */
export class LegacyBootstrapTemplateListError extends Data.TaggedError(
"LegacyBootstrapTemplateListError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.externalNetwork;
}
}

/** Reading the target workdir failed — Go's `failed to read workdir: %w` (`bootstrap.go:44`). */
export class LegacyBootstrapWorkdirReadError extends Data.TaggedError(
"LegacyBootstrapWorkdirReadError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.permission;
}
}

/**
* User declined the overwrite prompt — Go returns `errors.New(context.Canceled)`
Expand All @@ -36,19 +53,31 @@ export class LegacyBootstrapOverwriteDeclinedError extends Data.TaggedError(
"LegacyBootstrapOverwriteDeclinedError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.cancelled;
}
}

/** Template download failure — Go's `failed to download template: %w` (`bootstrap.go:downloadSample`). */
export class LegacyBootstrapTemplateDownloadError extends Data.TaggedError(
"LegacyBootstrapTemplateDownloadError",
)<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.externalNetwork;
}
}

/**
* Project health probe failed — Go's `Error status %d: %s` (non-200) or
* `Service not healthy: %s (%s)` (`bootstrap.go:checkProjectHealth`).
*/
export class LegacyBootstrapHealthError extends Data.TaggedError("LegacyBootstrapHealthError")<{
readonly message: string;
}> {}
}> {
get [ErrorActionabilityId](): CliErrorActionabilityDeclaration {
return actionability.apiStatus;
}
}
Loading
Loading