Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
c5b81ba
feat(web): Google Cloud integration card
JeremyFunk Oct 8, 2026
d3652db
fix(web): scope the Google Cloud card to log forwarding, address revi…
JeremyFunk Oct 8, 2026
e819d27
Merge branch 'feat/gcp-connector-api' of https://github.com/MapleTech…
JeremyFunk Oct 8, 2026
5bad360
feat(web): Google Cloud scope picker and per-connector log and metric…
JeremyFunk Oct 8, 2026
e580238
fix(web): send only the flipped Google Cloud switch, serialize saves …
JeremyFunk Oct 8, 2026
ff992d1
Merge branch 'feat/gcp-connector-api' of https://github.com/MapleTech…
JeremyFunk Oct 8, 2026
57f6858
feat(web): choose log forwarding and metrics when connecting Google C…
JeremyFunk Oct 8, 2026
fa703e1
Merge branch 'feat/gcp-metrics-poller' of https://github.com/MapleTec…
JeremyFunk Oct 8, 2026
c123d38
feat(web): Google Cloud metrics and resources status, send only the f…
JeremyFunk Oct 8, 2026
7efc8a8
fix(web): narrow the Google Cloud create payload to one variant per call
JeremyFunk Oct 8, 2026
64061ac
Merge branch 'feat/gcp-metrics-poller' of https://github.com/MapleTec…
JeremyFunk Oct 8, 2026
40f7aa7
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 8, 2026
1af3b22
fix(integrations): name the Exclude GKE container logs switch for ass…
JeremyFunk Oct 8, 2026
5ab9d65
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
3ab397b
fix(integrations): ask for the setup script with log_filter
JeremyFunk Oct 9, 2026
7da92a7
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
09af2fb
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
8450b98
feat(gcp): status model, pending changes, setup checklist and guided …
JeremyFunk Oct 9, 2026
a2e2679
fix(gcp): card states after the first design critique: steps that clo…
JeremyFunk Oct 9, 2026
b4a22cf
Merge feat/gcp-metrics-poller into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
3d276bd
fix(gcp): setup steps close on confirmation and reopen in one click, …
JeremyFunk Oct 9, 2026
1c482c6
refactor(gcp): drop an unused link option
JeremyFunk Oct 9, 2026
25d1de0
fix(gcp): script-needed rule, partial reports and clock-free confirma…
JeremyFunk Oct 9, 2026
04f2831
fix(gcp): cleanup panel wording per case, notice order, roles link
JeremyFunk Oct 9, 2026
929d137
fix(gcp): keep step 3 above the fold, confirm wording
JeremyFunk Oct 9, 2026
ef1bfad
Merge feat/gcp-metrics-poller into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
7e4eecb
fix(gcp): connection card states and copy from the final live run
JeremyFunk Oct 9, 2026
e697643
fix(gcp): card wording from the rendered check
JeremyFunk Oct 9, 2026
ec06b86
Merge feat/gcp-metrics-poller into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
ecbb4c3
feat(gcp): recommend the log filter without GKE container logs, and a…
JeremyFunk Oct 9, 2026
737bd0e
Merge feat/gcp-metrics-poller into feat/gcp-integration-card
JeremyFunk Oct 9, 2026
7c9bd57
fix(gcp): log filter acknowledgement from the rendered check
JeremyFunk Oct 9, 2026
775897a
fix(gcp): keep a link's icon on the line of its last word
JeremyFunk Oct 9, 2026
d437061
feat(gcp): integration page on the settings column, with numbered set…
JeremyFunk Oct 9, 2026
6e37942
feat(gcp): capabilities as status, one Configure dialog for what to c…
JeremyFunk Oct 10, 2026
74d403c
fix(gcp): say when a save leaves nothing to run and when to dismiss t…
JeremyFunk Oct 10, 2026
a7262b9
fix(gcp): a warning takes the card's width, the recap drops the filte…
JeremyFunk Oct 10, 2026
928e2fc
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 10, 2026
4bb6cbe
refactor(web): Google Cloud card follows the primitives pass on its s…
JeremyFunk Oct 10, 2026
47294ac
refactor(web): Google Cloud dialog's script link is a link Button
JeremyFunk Oct 10, 2026
0590969
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 14, 2026
7d0a5db
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 14, 2026
747da05
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 15, 2026
fa6b703
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 15, 2026
cabfeeb
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 15, 2026
724a067
Merge branch 'feat/gcp-metrics-poller' into feat/gcp-integration-card
JeremyFunk Oct 15, 2026
5bb6997
feat(integrations): plain, scannable Google Cloud integration page
JeremyFunk Oct 15, 2026
e4a630e
feat(integrations): step-by-step Google Cloud connect flow
JeremyFunk Oct 15, 2026
c425597
feat(lab): Google Cloud connect flow lab
JeremyFunk Oct 15, 2026
7542050
feat(integrations): docs links for the Google Cloud connect flow
JeremyFunk Oct 15, 2026
131d91d
Merge remote-tracking branch 'origin/feat/gcp-metrics-poller' into HEAD
JeremyFunk Oct 15, 2026
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
28 changes: 28 additions & 0 deletions apps/web/src/atoms/gcp-removed-connectors-atoms.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Schema } from "effect"

import { Atom } from "@/lib/effect-atom"
import { localStorageRuntime } from "@/lib/services/common/storage-runtime"

/**
* A connection that was removed before its cleanup script was seen to run. Kept so the
* script stays reachable across reloads until the admin dismisses it. The script comes from the
* delete response, which carries no secret.
*/
const RemovedGcpConnector = Schema.Struct({
id: Schema.String,
label: Schema.String,
hostProjectId: Schema.String,
cleanupScript: Schema.String,
/** Whether a script run ever reported for it: decides how the panel words itself. */
reported: Schema.Boolean,
})
export type RemovedGcpConnector = Schema.Schema.Type<typeof RemovedGcpConnector>

export const removedGcpConnectorsAtomFamily = Atom.family((orgId: string) =>
Atom.kvs({
runtime: localStorageRuntime,
key: `maple.gcp.removed-connectors.${orgId}`,
schema: Schema.Array(RemovedGcpConnector),
defaultValue: (): ReadonlyArray<RemovedGcpConnector> => [],
}),
)
52 changes: 34 additions & 18 deletions apps/web/src/components/icons/google-cloud.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,51 @@
import type { IconProps } from "./icon"

// Source: devicon (MIT) — https://github.com/devicons/devicon, `googlecloud-original`
function GoogleCloudIcon({ size = 24, className, ...props }: IconProps) {
const PATHS = [
{
fill: "#ea4535",
d: "M80.6 40.3h.4l-.2-.2 14-14v-.3c-11.8-10.4-28.1-14-43.2-9.5C36.5 20.8 24.9 32.8 20.7 48c.2-.1.5-.2.8-.2 5.2-3.4 11.4-5.4 17.9-5.4 2.2 0 4.3.2 6.4.6.1-.1.2-.1.3-.1 9-9.9 24.2-11.1 34.6-2.6h-.1z",
},
{
fill: "#557ebf",
d: "M108.1 47.8c-2.3-8.5-7.1-16.2-13.8-22.1L80 39.9c6 4.9 9.5 12.3 9.3 20v2.5c16.9 0 16.9 25.2 0 25.2H63.9v20h-.1l.1.2h25.4c14.6.1 27.5-9.3 31.8-23.1 4.3-13.8-1-28.8-13-36.9z",
},
{
fill: "#36a852",
d: "M39 107.9h26.3V87.7H39c-1.9 0-3.7-.4-5.4-1.1l-15.2 14.6v.2c6 4.3 13.2 6.6 20.7 6.6z",
},
{
fill: "#f9bc15",
d: "M40.2 41.9c-14.9.1-28.1 9.3-32.9 22.8-4.8 13.6 0 28.5 11.8 37.3l15.6-14.9c-8.6-3.7-10.6-14.5-4-20.8 6.6-6.4 17.8-4.4 21.7 3.8L68 55.2C61.4 46.9 51.1 42 40.2 42.1z",
},
]

function Glyph({ mono, size = 24, className, ...props }: IconProps & { mono: boolean }) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 128 128"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path
fill="#ea4535"
d="M80.6 40.3h.4l-.2-.2 14-14v-.3c-11.8-10.4-28.1-14-43.2-9.5C36.5 20.8 24.9 32.8 20.7 48c.2-.1.5-.2.8-.2 5.2-3.4 11.4-5.4 17.9-5.4 2.2 0 4.3.2 6.4.6.1-.1.2-.1.3-.1 9-9.9 24.2-11.1 34.6-2.6h-.1z"
/>
<path
fill="#557ebf"
d="M108.1 47.8c-2.3-8.5-7.1-16.2-13.8-22.1L80 39.9c6 4.9 9.5 12.3 9.3 20v2.5c16.9 0 16.9 25.2 0 25.2H63.9v20h-.1l.1.2h25.4c14.6.1 27.5-9.3 31.8-23.1 4.3-13.8-1-28.8-13-36.9z"
/>
<path
fill="#36a852"
d="M39 107.9h26.3V87.7H39c-1.9 0-3.7-.4-5.4-1.1l-15.2 14.6v.2c6 4.3 13.2 6.6 20.7 6.6z"
/>
<path
fill="#f9bc15"
d="M40.2 41.9c-14.9.1-28.1 9.3-32.9 22.8-4.8 13.6 0 28.5 11.8 37.3l15.6-14.9c-8.6-3.7-10.6-14.5-4-20.8 6.6-6.4 17.8-4.4 21.7 3.8L68 55.2C61.4 46.9 51.1 42 40.2 42.1z"
/>
{PATHS.map((path) => (
<path key={path.fill} fill={mono ? undefined : path.fill} d={path.d} />
))}
</svg>
)
}

export { GoogleCloudIcon }
function GoogleCloudIcon(props: IconProps) {
return <Glyph mono={false} {...props} />
}

/** The mark in `currentColor`, for surfaces that own the color (dim backer plates, buttons). */
function GoogleCloudMonoIcon(props: IconProps) {
return <Glyph mono {...props} />
}

export { GoogleCloudIcon, GoogleCloudMonoIcon }
2 changes: 1 addition & 1 deletion apps/web/src/components/icons/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ export { GearIcon } from "./gear"
export { GeminiIcon } from "./gemini"
export { GithubIcon } from "./github"
export { GoogleIcon } from "./google"
export { GoogleCloudIcon } from "./google-cloud"
export { GoogleCloudIcon, GoogleCloudMonoIcon } from "./google-cloud"
export { GrokIcon } from "./grok"
export { HaystackIcon } from "./haystack"
export { HuggingFaceIcon } from "./huggingface"
Expand Down
Loading
Loading