diff --git a/.github/workflows/check_license.yml b/.github/workflows/check_license.yml
new file mode 100644
index 000000000..c7569d134
--- /dev/null
+++ b/.github/workflows/check_license.yml
@@ -0,0 +1,44 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: Google open-source license
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ check-license:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Set up Go
+ uses: actions/setup-go@v4
+ with:
+ go-version: '1.21'
+
+ - name: Install addlicense
+ run: go install github.com/google/addlicense@latest
+
+ - name: Check license headers
+ run: |
+ addlicense -check \
+ -l apache \
+ -c "Google LLC" \
+ .
diff --git a/agent_sdks/python/pyproject.toml b/agent_sdks/python/pyproject.toml
index 960a031dd..b2acfc6fc 100644
--- a/agent_sdks/python/pyproject.toml
+++ b/agent_sdks/python/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "a2ui-agent"
version = "0.1.0"
diff --git a/docs/scripts/convert_docs.py b/docs/scripts/convert_docs.py
index df0d9cf9d..a82b72ac0 100644
--- a/docs/scripts/convert_docs.py
+++ b/docs/scripts/convert_docs.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
import os
import re
import argparse
diff --git a/docs/scripts/test_convert_docs.py b/docs/scripts/test_convert_docs.py
index 2cfcd1fb8..03bae2d3e 100644
--- a/docs/scripts/test_convert_docs.py
+++ b/docs/scripts/test_convert_docs.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
import pytest
from convert_docs import to_mkdocs
diff --git a/renderers/lit/prepare-publish.mjs b/renderers/lit/prepare-publish.mjs
index dc3941989..9f2491a5c 100644
--- a/renderers/lit/prepare-publish.mjs
+++ b/renderers/lit/prepare-publish.mjs
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { readFileSync, writeFileSync, copyFileSync, mkdirSync, existsSync } from 'fs';
import { join } from 'path';
diff --git a/renderers/lit/src/0.8/ui/context/context.ts b/renderers/lit/src/0.8/ui/context/context.ts
index 12efa58ba..6321419d3 100644
--- a/renderers/lit/src/0.8/ui/context/context.ts
+++ b/renderers/lit/src/0.8/ui/context/context.ts
@@ -1,2 +1,18 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
export * from "./theme.js";
export * from "./markdown.js";
diff --git a/renderers/markdown/markdown-it/src/markdown.test.ts b/renderers/markdown/markdown-it/src/markdown.test.ts
index e3ca65674..b8db19838 100644
--- a/renderers/markdown/markdown-it/src/markdown.test.ts
+++ b/renderers/markdown/markdown-it/src/markdown.test.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { JSDOM } from 'jsdom';
// Provide a jsdom window for DOMPurify in the Node test environment.
diff --git a/renderers/web_core/src/v0_8/schema/common-types.ts b/renderers/web_core/src/v0_8/schema/common-types.ts
index 4823c4a9f..675f42885 100644
--- a/renderers/web_core/src/v0_8/schema/common-types.ts
+++ b/renderers/web_core/src/v0_8/schema/common-types.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { z } from "zod";
/**
diff --git a/renderers/web_core/src/v0_8/schema/server-to-client.ts b/renderers/web_core/src/v0_8/schema/server-to-client.ts
index bc6d4c511..7d0f282b9 100644
--- a/renderers/web_core/src/v0_8/schema/server-to-client.ts
+++ b/renderers/web_core/src/v0_8/schema/server-to-client.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { z } from "zod";
import {
AudioPlayerSchema,
diff --git a/renderers/web_core/src/v0_8/schema/verify-schema.test.ts b/renderers/web_core/src/v0_8/schema/verify-schema.test.ts
index f42d2b160..00ccf3421 100644
--- a/renderers/web_core/src/v0_8/schema/verify-schema.test.ts
+++ b/renderers/web_core/src/v0_8/schema/verify-schema.test.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it } from "node:test";
import * as assert from "node:assert";
import { zodToJsonSchema } from "zod-to-json-schema";
diff --git a/renderers/web_core/src/v0_9/schema/verify-schema.test.ts b/renderers/web_core/src/v0_9/schema/verify-schema.test.ts
index 4010e3cd2..6cf86e33c 100644
--- a/renderers/web_core/src/v0_9/schema/verify-schema.test.ts
+++ b/renderers/web_core/src/v0_9/schema/verify-schema.test.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it } from "node:test";
import * as assert from "node:assert";
import { zodToJsonSchema } from "zod-to-json-schema";
diff --git a/renderers/web_core/src/v0_9/test/function_execution.spec.ts b/renderers/web_core/src/v0_9/test/function_execution.spec.ts
index 222100a68..edb0e58a8 100644
--- a/renderers/web_core/src/v0_9/test/function_execution.spec.ts
+++ b/renderers/web_core/src/v0_9/test/function_execution.spec.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it } from "node:test";
import assert from "node:assert";
import { DataModel } from "../state/data-model.js";
diff --git a/samples/agent/adk/component_gallery/__main__.py b/samples/agent/adk/component_gallery/__main__.py
index 8d65d0195..050c53446 100644
--- a/samples/agent/adk/component_gallery/__main__.py
+++ b/samples/agent/adk/component_gallery/__main__.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""Main entry point for the Component Gallery agent."""
import logging
diff --git a/samples/agent/adk/component_gallery/agent.py b/samples/agent/adk/component_gallery/agent.py
index 72edbcc8b..855d4d935 100644
--- a/samples/agent/adk/component_gallery/agent.py
+++ b/samples/agent/adk/component_gallery/agent.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""Agent logic for the Component Gallery."""
import logging
diff --git a/samples/agent/adk/component_gallery/agent_executor.py b/samples/agent/adk/component_gallery/agent_executor.py
index f71688206..d0bed73c7 100644
--- a/samples/agent/adk/component_gallery/agent_executor.py
+++ b/samples/agent/adk/component_gallery/agent_executor.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""Agent executor for Component Gallery."""
import logging
diff --git a/samples/agent/adk/component_gallery/gallery_examples.py b/samples/agent/adk/component_gallery/gallery_examples.py
index 8ea8b31f7..f241ea320 100644
--- a/samples/agent/adk/component_gallery/gallery_examples.py
+++ b/samples/agent/adk/component_gallery/gallery_examples.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""Defines the Component Gallery 'Kitchen Sink' example."""
import json
diff --git a/samples/agent/adk/component_gallery/tools.py b/samples/agent/adk/component_gallery/tools.py
index be06c0482..9980b41c5 100644
--- a/samples/agent/adk/component_gallery/tools.py
+++ b/samples/agent/adk/component_gallery/tools.py
@@ -1 +1,15 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
# Minimal tools.py
diff --git a/samples/agent/adk/contact_lookup/pyproject.toml b/samples/agent/adk/contact_lookup/pyproject.toml
index d8dda10e0..4c0e65640 100644
--- a/samples/agent/adk/contact_lookup/pyproject.toml
+++ b/samples/agent/adk/contact_lookup/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "a2ui-contact-lookup"
version = "0.1.0"
diff --git a/samples/agent/adk/contact_multiple_surfaces/images/floorplan.html b/samples/agent/adk/contact_multiple_surfaces/images/floorplan.html
index fbd234787..edd1360a1 100644
--- a/samples/agent/adk/contact_multiple_surfaces/images/floorplan.html
+++ b/samples/agent/adk/contact_multiple_surfaces/images/floorplan.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/agent/adk/contact_multiple_surfaces/pyproject.toml b/samples/agent/adk/contact_multiple_surfaces/pyproject.toml
index 44d33cff4..8da52067e 100644
--- a/samples/agent/adk/contact_multiple_surfaces/pyproject.toml
+++ b/samples/agent/adk/contact_multiple_surfaces/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "a2ui-contact-multiple-surfaces"
version = "0.1.0"
diff --git a/samples/agent/adk/orchestrator/pyproject.toml b/samples/agent/adk/orchestrator/pyproject.toml
index 29d533c6d..c4def00b7 100644
--- a/samples/agent/adk/orchestrator/pyproject.toml
+++ b/samples/agent/adk/orchestrator/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "orchestrator"
version = "0.1.0"
diff --git a/samples/agent/adk/pyproject.toml b/samples/agent/adk/pyproject.toml
index c63dd5bf8..1c7ea82e4 100644
--- a/samples/agent/adk/pyproject.toml
+++ b/samples/agent/adk/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[[tool.uv.index]]
url = "https://pypi.org/simple"
default = true
diff --git a/samples/agent/adk/restaurant_finder/pyproject.toml b/samples/agent/adk/restaurant_finder/pyproject.toml
index 00e2f024b..64128d787 100644
--- a/samples/agent/adk/restaurant_finder/pyproject.toml
+++ b/samples/agent/adk/restaurant_finder/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "a2ui-restaurant-finder"
version = "0.1.0"
diff --git a/samples/agent/adk/rizzcharts/pyproject.toml b/samples/agent/adk/rizzcharts/pyproject.toml
index 8f60edf70..65f9d57da 100644
--- a/samples/agent/adk/rizzcharts/pyproject.toml
+++ b/samples/agent/adk/rizzcharts/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "rizzcharts"
version = "0.1.0"
diff --git a/samples/agent/mcp/pyproject.toml b/samples/agent/mcp/pyproject.toml
index b9e90bd33..6b2dfcad4 100644
--- a/samples/agent/mcp/pyproject.toml
+++ b/samples/agent/mcp/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "a2ui-mcp-demo"
version = "0.1.0"
diff --git a/samples/client/lit/component_gallery/component-gallery.ts b/samples/client/lit/component_gallery/component-gallery.ts
index 021bd7ee8..7fd002109 100644
--- a/samples/client/lit/component_gallery/component-gallery.ts
+++ b/samples/client/lit/component_gallery/component-gallery.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { SignalWatcher } from "@lit-labs/signals";
import { provide } from "@lit/context";
diff --git a/samples/client/lit/component_gallery/index.html b/samples/client/lit/component_gallery/index.html
index 7a6237609..243cf195d 100644
--- a/samples/client/lit/component_gallery/index.html
+++ b/samples/client/lit/component_gallery/index.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/client/lit/component_gallery/ui/debug-panel.ts b/samples/client/lit/component_gallery/ui/debug-panel.ts
index 6bc74814a..8ab825bcc 100644
--- a/samples/client/lit/component_gallery/ui/debug-panel.ts
+++ b/samples/client/lit/component_gallery/ui/debug-panel.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { LitElement, html, css, nothing } from "lit";
import { customElement, property, state } from "lit/decorators.js";
diff --git a/samples/client/lit/local_gallery/index.html b/samples/client/lit/local_gallery/index.html
index 53ff4ccee..0dbeaece0 100644
--- a/samples/client/lit/local_gallery/index.html
+++ b/samples/client/lit/local_gallery/index.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/client/lit/local_gallery/scripts/sync-specs.js b/samples/client/lit/local_gallery/scripts/sync-specs.js
index 616b5e58a..31944d7a7 100644
--- a/samples/client/lit/local_gallery/scripts/sync-specs.js
+++ b/samples/client/lit/local_gallery/scripts/sync-specs.js
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/**
* @fileoverview Synchronizes minimal v0.8 examples from the specification folder
* into the local gallery's public assets and generates a manifest index.
diff --git a/samples/client/lit/local_gallery/src/local-gallery.ts b/samples/client/lit/local_gallery/src/local-gallery.ts
index 075672f61..52fc186c7 100644
--- a/samples/client/lit/local_gallery/src/local-gallery.ts
+++ b/samples/client/lit/local_gallery/src/local-gallery.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { SignalWatcher } from "@lit-labs/signals";
import { provide } from "@lit/context";
import { LitElement, html, css, unsafeCSS } from "lit";
diff --git a/samples/client/lit/local_gallery/src/main.ts b/samples/client/lit/local_gallery/src/main.ts
index 3f4859a61..30ea147ed 100644
--- a/samples/client/lit/local_gallery/src/main.ts
+++ b/samples/client/lit/local_gallery/src/main.ts
@@ -1 +1,17 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import './local-gallery.js';
diff --git a/samples/client/lit/local_gallery/src/theme.ts b/samples/client/lit/local_gallery/src/theme.ts
index 200c28785..c7e91cd1d 100644
--- a/samples/client/lit/local_gallery/src/theme.ts
+++ b/samples/client/lit/local_gallery/src/theme.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { v0_8 } from "@a2ui/lit";
/** Elements */
diff --git a/samples/client/lit/local_gallery/vite.config.ts b/samples/client/lit/local_gallery/vite.config.ts
index 86ef64a25..57de5443f 100644
--- a/samples/client/lit/local_gallery/vite.config.ts
+++ b/samples/client/lit/local_gallery/vite.config.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { defineConfig } from 'vite';
export default defineConfig({
diff --git a/samples/personalized_learning/Dockerfile b/samples/personalized_learning/Dockerfile
index 30259a8fb..a645a6c38 100644
--- a/samples/personalized_learning/Dockerfile
+++ b/samples/personalized_learning/Dockerfile
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
# Personalized Learning Demo - Cloud Run Dockerfile
# Serves both the Vite frontend and the API server
diff --git a/samples/personalized_learning/a2ui-primer.html b/samples/personalized_learning/a2ui-primer.html
index 00181546b..37a62378f 100644
--- a/samples/personalized_learning/a2ui-primer.html
+++ b/samples/personalized_learning/a2ui-primer.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/personalized_learning/agent/__init__.py b/samples/personalized_learning/agent/__init__.py
index ad8763317..35b70f307 100644
--- a/samples/personalized_learning/agent/__init__.py
+++ b/samples/personalized_learning/agent/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Personalized Learning Agent Package
diff --git a/samples/personalized_learning/agent/a2ui_templates.py b/samples/personalized_learning/agent/a2ui_templates.py
index 6469891c0..c7d8bd769 100644
--- a/samples/personalized_learning/agent/a2ui_templates.py
+++ b/samples/personalized_learning/agent/a2ui_templates.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
A2UI Templates for Learning Materials
diff --git a/samples/personalized_learning/agent/agent.py b/samples/personalized_learning/agent/agent.py
index cdf1568dc..39db9cb09 100644
--- a/samples/personalized_learning/agent/agent.py
+++ b/samples/personalized_learning/agent/agent.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Personalized Learning Agent (ADK)
diff --git a/samples/personalized_learning/agent/context_loader.py b/samples/personalized_learning/agent/context_loader.py
index e9304059d..581ee8957 100644
--- a/samples/personalized_learning/agent/context_loader.py
+++ b/samples/personalized_learning/agent/context_loader.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Context Loader for Learner Profile Data
diff --git a/samples/personalized_learning/agent/download_openstax.py b/samples/personalized_learning/agent/download_openstax.py
index f842c765a..33d354a98 100644
--- a/samples/personalized_learning/agent/download_openstax.py
+++ b/samples/personalized_learning/agent/download_openstax.py
@@ -1,4 +1,18 @@
#!/usr/bin/env python3
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Download OpenStax Biology Modules to GCS
diff --git a/samples/personalized_learning/agent/openstax_chapters.py b/samples/personalized_learning/agent/openstax_chapters.py
index 07f53c157..c41a12745 100644
--- a/samples/personalized_learning/agent/openstax_chapters.py
+++ b/samples/personalized_learning/agent/openstax_chapters.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Complete OpenStax Biology AP Courses Chapter Index
diff --git a/samples/personalized_learning/agent/openstax_content.py b/samples/personalized_learning/agent/openstax_content.py
index c6befa612..cfcf836a8 100644
--- a/samples/personalized_learning/agent/openstax_content.py
+++ b/samples/personalized_learning/agent/openstax_content.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
OpenStax Content Fetcher
diff --git a/samples/personalized_learning/agent/openstax_modules.py b/samples/personalized_learning/agent/openstax_modules.py
index f7d9d876c..8a0714599 100644
--- a/samples/personalized_learning/agent/openstax_modules.py
+++ b/samples/personalized_learning/agent/openstax_modules.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
OpenStax Module Index for Biology AP Courses.
diff --git a/samples/personalized_learning/agent/pyproject.toml b/samples/personalized_learning/agent/pyproject.toml
index d9cadd260..949c67adb 100644
--- a/samples/personalized_learning/agent/pyproject.toml
+++ b/samples/personalized_learning/agent/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "personalized-learning-agent"
version = "0.1.0"
diff --git a/samples/personalized_learning/api-server.ts b/samples/personalized_learning/api-server.ts
index 77eeb113d..b844fe139 100644
--- a/samples/personalized_learning/api-server.ts
+++ b/samples/personalized_learning/api-server.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/*
* API Server for Personalized Learning Demo
*
diff --git a/samples/personalized_learning/deploy.py b/samples/personalized_learning/deploy.py
index d412695ca..edd677746 100644
--- a/samples/personalized_learning/deploy.py
+++ b/samples/personalized_learning/deploy.py
@@ -1,4 +1,18 @@
#!/usr/bin/env python3
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Personalized Learning Agent - Deployment Script for Agent Engine
diff --git a/samples/personalized_learning/deploy_hosting.py b/samples/personalized_learning/deploy_hosting.py
index dca98ee6a..80ff9f1ef 100755
--- a/samples/personalized_learning/deploy_hosting.py
+++ b/samples/personalized_learning/deploy_hosting.py
@@ -1,4 +1,18 @@
#!/usr/bin/env python3
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Personalized Learning Demo - Cloud Run + Firebase Hosting Deployment
diff --git a/samples/personalized_learning/index.html b/samples/personalized_learning/index.html
index 0eec9ce27..b755d80ba 100644
--- a/samples/personalized_learning/index.html
+++ b/samples/personalized_learning/index.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/personalized_learning/public/404.html b/samples/personalized_learning/public/404.html
index f0c7f1bb1..6b3db2d76 100644
--- a/samples/personalized_learning/public/404.html
+++ b/samples/personalized_learning/public/404.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/personalized_learning/public/maria-context.html b/samples/personalized_learning/public/maria-context.html
index 3cc885460..85dda34cf 100644
--- a/samples/personalized_learning/public/maria-context.html
+++ b/samples/personalized_learning/public/maria-context.html
@@ -1,4 +1,20 @@
+
+
diff --git a/samples/personalized_learning/quickstart_setup.sh b/samples/personalized_learning/quickstart_setup.sh
index cc7d04d81..39db42f23 100755
--- a/samples/personalized_learning/quickstart_setup.sh
+++ b/samples/personalized_learning/quickstart_setup.sh
@@ -1,4 +1,18 @@
#!/bin/bash
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
# Quickstart Setup Script for Personalized Learning Demo
# This script handles all environment setup silently.
# Run from: samples/personalized_learning/
diff --git a/samples/personalized_learning/src/a2a-client.ts b/samples/personalized_learning/src/a2a-client.ts
index ab2712c70..eb071a301 100644
--- a/samples/personalized_learning/src/a2a-client.ts
+++ b/samples/personalized_learning/src/a2a-client.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/*
* A2A Client
*
diff --git a/samples/personalized_learning/src/chat-orchestrator.ts b/samples/personalized_learning/src/chat-orchestrator.ts
index 9cab982cd..b04ede1e7 100644
--- a/samples/personalized_learning/src/chat-orchestrator.ts
+++ b/samples/personalized_learning/src/chat-orchestrator.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/*
* Chat Orchestrator
*
diff --git a/samples/personalized_learning/src/firebase-auth.ts b/samples/personalized_learning/src/firebase-auth.ts
index c5aec5898..2e589f850 100644
--- a/samples/personalized_learning/src/firebase-auth.ts
+++ b/samples/personalized_learning/src/firebase-auth.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/**
* Firebase Authentication for Personalized Learning Demo
*
diff --git a/samples/personalized_learning/src/main.ts b/samples/personalized_learning/src/main.ts
index f7c1f8b26..cbbb87618 100644
--- a/samples/personalized_learning/src/main.ts
+++ b/samples/personalized_learning/src/main.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/*
* Personalized Learning Demo - Main Entry Point
*
diff --git a/samples/personalized_learning/src/vite-env.d.ts b/samples/personalized_learning/src/vite-env.d.ts
index f10fdd151..99423db4e 100644
--- a/samples/personalized_learning/src/vite-env.d.ts
+++ b/samples/personalized_learning/src/vite-env.d.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
///
interface ImportMetaEnv {
diff --git a/samples/personalized_learning/tests/integration-tests.mjs b/samples/personalized_learning/tests/integration-tests.mjs
index ad091e32b..7b3377bd6 100644
--- a/samples/personalized_learning/tests/integration-tests.mjs
+++ b/samples/personalized_learning/tests/integration-tests.mjs
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/**
* Integration Tests for Personalized Learning Demo
*
diff --git a/samples/personalized_learning/tests/test_integration.py b/samples/personalized_learning/tests/test_integration.py
index 1519fbd6d..d9fecb3b5 100644
--- a/samples/personalized_learning/tests/test_integration.py
+++ b/samples/personalized_learning/tests/test_integration.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""
Integration tests for the personalized learning demo.
diff --git a/samples/personalized_learning/tests/unit-tests.mjs b/samples/personalized_learning/tests/unit-tests.mjs
index 13f61fa2c..282bea13a 100644
--- a/samples/personalized_learning/tests/unit-tests.mjs
+++ b/samples/personalized_learning/tests/unit-tests.mjs
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/**
* Unit Tests for Personalized Learning Demo
*
diff --git a/samples/personalized_learning/vite.config.ts b/samples/personalized_learning/vite.config.ts
index 87fb8022a..f9837a642 100644
--- a/samples/personalized_learning/vite.config.ts
+++ b/samples/personalized_learning/vite.config.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { defineConfig } from "vite";
import { resolve } from "path";
diff --git a/specification/scripts/validate.py b/specification/scripts/validate.py
index 8ce34ee11..bad61549a 100755
--- a/specification/scripts/validate.py
+++ b/specification/scripts/validate.py
@@ -1,4 +1,18 @@
#!/usr/bin/env python3
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
import os
import json
diff --git a/specification/v0_10/eval/pnpm-lock.yaml b/specification/v0_10/eval/pnpm-lock.yaml
index 3479f7f71..65e7ddc18 100644
--- a/specification/v0_10/eval/pnpm-lock.yaml
+++ b/specification/v0_10/eval/pnpm-lock.yaml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
lockfileVersion: '9.0'
settings:
diff --git a/specification/v0_10/test/run_tests.py b/specification/v0_10/test/run_tests.py
index 2a2d5f9af..6d70f6be8 100755
--- a/specification/v0_10/test/run_tests.py
+++ b/specification/v0_10/test/run_tests.py
@@ -1,4 +1,18 @@
#!/usr/bin/env python3
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
import json
import subprocess
diff --git a/specification/v0_8/eval/pnpm-lock.yaml b/specification/v0_8/eval/pnpm-lock.yaml
index 6b9cf0c94..46fa6eb4f 100644
--- a/specification/v0_8/eval/pnpm-lock.yaml
+++ b/specification/v0_8/eval/pnpm-lock.yaml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
lockfileVersion: '9.0'
settings:
diff --git a/specification/v0_9/eval/pnpm-lock.yaml b/specification/v0_9/eval/pnpm-lock.yaml
index 3479f7f71..65e7ddc18 100644
--- a/specification/v0_9/eval/pnpm-lock.yaml
+++ b/specification/v0_9/eval/pnpm-lock.yaml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
lockfileVersion: '9.0'
settings:
diff --git a/specification/v0_9/test/run_tests.py b/specification/v0_9/test/run_tests.py
index 2abdb4170..2df780450 100755
--- a/specification/v0_9/test/run_tests.py
+++ b/specification/v0_9/test/run_tests.py
@@ -1,4 +1,18 @@
#!/usr/bin/env python3
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
import json
import subprocess
diff --git a/tools/build_catalog/build_catalog.py b/tools/build_catalog/build_catalog.py
index 6bed5785b..e44487c98 100644
--- a/tools/build_catalog/build_catalog.py
+++ b/tools/build_catalog/build_catalog.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
# /// script
# requires-python = ">=3.11"
# dependencies = []
diff --git a/tools/build_catalog/pyproject.toml b/tools/build_catalog/pyproject.toml
index 59f76bdc2..3ec89185b 100644
--- a/tools/build_catalog/pyproject.toml
+++ b/tools/build_catalog/pyproject.toml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
[project]
name = "a2ui-scripts"
version = "0.1.0"
diff --git a/tools/build_catalog/tests/test_build_catalog.py b/tools/build_catalog/tests/test_build_catalog.py
index ad7b6d755..63e5b3239 100644
--- a/tools/build_catalog/tests/test_build_catalog.py
+++ b/tools/build_catalog/tests/test_build_catalog.py
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
import json
import pytest
from pathlib import Path
diff --git a/tools/composer/eslint.config.mjs b/tools/composer/eslint.config.mjs
index 4d9bc427f..b10481601 100644
--- a/tools/composer/eslint.config.mjs
+++ b/tools/composer/eslint.config.mjs
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import js from "@eslint/js";
import eslintConfigPrettier from "eslint-config-prettier";
import turboPlugin from "eslint-plugin-turbo";
diff --git a/tools/composer/next.config.ts b/tools/composer/next.config.ts
index e9ffa3083..eafcaa2a0 100644
--- a/tools/composer/next.config.ts
+++ b/tools/composer/next.config.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
diff --git a/tools/composer/pnpm-lock.yaml b/tools/composer/pnpm-lock.yaml
index e2a9b15ca..bdff681fe 100644
--- a/tools/composer/pnpm-lock.yaml
+++ b/tools/composer/pnpm-lock.yaml
@@ -1,3 +1,17 @@
+# Copyright 2026 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
lockfileVersion: '9.0'
settings:
diff --git a/tools/composer/postcss.config.mjs b/tools/composer/postcss.config.mjs
index 61e36849c..6972d5c57 100644
--- a/tools/composer/postcss.config.mjs
+++ b/tools/composer/postcss.config.mjs
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
const config = {
plugins: {
"@tailwindcss/postcss": {},
diff --git a/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts b/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts
index 63fd965de..940673d30 100644
--- a/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts
+++ b/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import {
CopilotRuntime,
createCopilotEndpoint,
diff --git a/tools/composer/src/app/api/copilotkit/a2ui-prompt.ts b/tools/composer/src/app/api/copilotkit/a2ui-prompt.ts
index ee8f23950..10450a5aa 100644
--- a/tools/composer/src/app/api/copilotkit/a2ui-prompt.ts
+++ b/tools/composer/src/app/api/copilotkit/a2ui-prompt.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
// A2UI Component Catalog and Protocol Schema for LLM prompt
// Based on A2UI Protocol v0.8
diff --git a/tools/composer/src/app/components/layout.tsx b/tools/composer/src/app/components/layout.tsx
index f30484c3b..f5fd04e65 100644
--- a/tools/composer/src/app/components/layout.tsx
+++ b/tools/composer/src/app/components/layout.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Metadata } from 'next';
export const metadata: Metadata = {
diff --git a/tools/composer/src/app/components/page.tsx b/tools/composer/src/app/components/page.tsx
index e7a7cc9e9..67f0c2f18 100644
--- a/tools/composer/src/app/components/page.tsx
+++ b/tools/composer/src/app/components/page.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { useState } from 'react';
diff --git a/tools/composer/src/app/gallery/layout.tsx b/tools/composer/src/app/gallery/layout.tsx
index 6f8b24306..aa848abb4 100644
--- a/tools/composer/src/app/gallery/layout.tsx
+++ b/tools/composer/src/app/gallery/layout.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Metadata } from 'next';
export const metadata: Metadata = {
diff --git a/tools/composer/src/app/gallery/page.tsx b/tools/composer/src/app/gallery/page.tsx
index 72972ae39..fffd06c66 100644
--- a/tools/composer/src/app/gallery/page.tsx
+++ b/tools/composer/src/app/gallery/page.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { useState } from 'react';
diff --git a/tools/composer/src/app/globals.css b/tools/composer/src/app/globals.css
index 510aa92f3..4b73c4ee5 100644
--- a/tools/composer/src/app/globals.css
+++ b/tools/composer/src/app/globals.css
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/* CopilotKit CSS must load BEFORE Tailwind so our @layer base overrides theirs */
@import "@copilotkit/react-core/v2/styles.css";
diff --git a/tools/composer/src/app/icons/layout.tsx b/tools/composer/src/app/icons/layout.tsx
index 2d7b4b944..9a9288770 100644
--- a/tools/composer/src/app/icons/layout.tsx
+++ b/tools/composer/src/app/icons/layout.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Metadata } from 'next';
export const metadata: Metadata = {
diff --git a/tools/composer/src/app/icons/page.tsx b/tools/composer/src/app/icons/page.tsx
index 35ba28e5d..2b7736352 100644
--- a/tools/composer/src/app/icons/page.tsx
+++ b/tools/composer/src/app/icons/page.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { useState } from 'react';
diff --git a/tools/composer/src/app/layout.tsx b/tools/composer/src/app/layout.tsx
index cc1f1b0a3..77e7f1f23 100644
--- a/tools/composer/src/app/layout.tsx
+++ b/tools/composer/src/app/layout.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
diff --git a/tools/composer/src/app/page.tsx b/tools/composer/src/app/page.tsx
index 74cc68eab..941f6185c 100644
--- a/tools/composer/src/app/page.tsx
+++ b/tools/composer/src/app/page.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Metadata } from 'next';
import { CreateWidget } from '@/components/main/create-widget';
diff --git a/tools/composer/src/app/widget/[id]/layout.tsx b/tools/composer/src/app/widget/[id]/layout.tsx
index 3698f9a8c..173dafba1 100644
--- a/tools/composer/src/app/widget/[id]/layout.tsx
+++ b/tools/composer/src/app/widget/[id]/layout.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
export default function WidgetEditorLayout({
children,
}: {
diff --git a/tools/composer/src/app/widget/[id]/page.tsx b/tools/composer/src/app/widget/[id]/page.tsx
index 650aeb000..ec54c84d1 100644
--- a/tools/composer/src/app/widget/[id]/page.tsx
+++ b/tools/composer/src/app/widget/[id]/page.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { use } from 'react';
diff --git a/tools/composer/src/components/editor/code-editor.tsx b/tools/composer/src/components/editor/code-editor.tsx
index 021f30974..23fd861b9 100644
--- a/tools/composer/src/components/editor/code-editor.tsx
+++ b/tools/composer/src/components/editor/code-editor.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import Editor, { type Monaco } from '@monaco-editor/react';
diff --git a/tools/composer/src/components/editor/data-panel.test.tsx b/tools/composer/src/components/editor/data-panel.test.tsx
index f1391563a..0a842473a 100644
--- a/tools/composer/src/components/editor/data-panel.test.tsx
+++ b/tools/composer/src/components/editor/data-panel.test.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/react';
import { DataPanel } from './data-panel';
diff --git a/tools/composer/src/components/editor/data-panel.tsx b/tools/composer/src/components/editor/data-panel.tsx
index 74d17aec6..c0199f5a8 100644
--- a/tools/composer/src/components/editor/data-panel.tsx
+++ b/tools/composer/src/components/editor/data-panel.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { useState, useEffect } from 'react';
diff --git a/tools/composer/src/components/editor/editor-header.test.tsx b/tools/composer/src/components/editor/editor-header.test.tsx
index 5bf3b368c..00ea9a296 100644
--- a/tools/composer/src/components/editor/editor-header.test.tsx
+++ b/tools/composer/src/components/editor/editor-header.test.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent, act } from '@testing-library/react';
import { EditorHeader } from './editor-header';
diff --git a/tools/composer/src/components/editor/editor-header.tsx b/tools/composer/src/components/editor/editor-header.tsx
index 361f871a9..ae4563aaa 100644
--- a/tools/composer/src/components/editor/editor-header.tsx
+++ b/tools/composer/src/components/editor/editor-header.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import { useState } from "react";
diff --git a/tools/composer/src/components/editor/preview-pane.tsx b/tools/composer/src/components/editor/preview-pane.tsx
index 5c38bd1ae..cfa43091e 100644
--- a/tools/composer/src/components/editor/preview-pane.tsx
+++ b/tools/composer/src/components/editor/preview-pane.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { useState } from 'react';
diff --git a/tools/composer/src/components/editor/widget-editor.test.tsx b/tools/composer/src/components/editor/widget-editor.test.tsx
index 78d04be64..f6c615f92 100644
--- a/tools/composer/src/components/editor/widget-editor.test.tsx
+++ b/tools/composer/src/components/editor/widget-editor.test.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, act } from '@testing-library/react';
import { WidgetEditor } from './widget-editor';
diff --git a/tools/composer/src/components/editor/widget-editor.tsx b/tools/composer/src/components/editor/widget-editor.tsx
index 9c621a24e..388e83a3a 100644
--- a/tools/composer/src/components/editor/widget-editor.tsx
+++ b/tools/composer/src/components/editor/widget-editor.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import { useState, useCallback } from "react";
diff --git a/tools/composer/src/components/gallery/gallery-widget.tsx b/tools/composer/src/components/gallery/gallery-widget.tsx
index a73be8f62..88533ebd6 100644
--- a/tools/composer/src/components/gallery/gallery-widget.tsx
+++ b/tools/composer/src/components/gallery/gallery-widget.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { Widget } from '@/types/widget';
diff --git a/tools/composer/src/components/gallery/widget-preview-modal.tsx b/tools/composer/src/components/gallery/widget-preview-modal.tsx
index c52a934b9..6751b9f48 100644
--- a/tools/composer/src/components/gallery/widget-preview-modal.tsx
+++ b/tools/composer/src/components/gallery/widget-preview-modal.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { useEffect } from 'react';
diff --git a/tools/composer/src/components/layout/app-shell.tsx b/tools/composer/src/components/layout/app-shell.tsx
index 5429eeda6..f50708c9d 100644
--- a/tools/composer/src/components/layout/app-shell.tsx
+++ b/tools/composer/src/components/layout/app-shell.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import { CopilotKitProvider } from "@copilotkit/react-core/v2";
diff --git a/tools/composer/src/components/layout/sidebar-header.tsx b/tools/composer/src/components/layout/sidebar-header.tsx
index 7ef83c7e6..20fc0e491 100644
--- a/tools/composer/src/components/layout/sidebar-header.tsx
+++ b/tools/composer/src/components/layout/sidebar-header.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { Sparkles } from 'lucide-react';
diff --git a/tools/composer/src/components/layout/sidebar-nav.tsx b/tools/composer/src/components/layout/sidebar-nav.tsx
index c7ebfd7c6..90f41d8fa 100644
--- a/tools/composer/src/components/layout/sidebar-nav.tsx
+++ b/tools/composer/src/components/layout/sidebar-nav.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import Link from "next/link";
diff --git a/tools/composer/src/components/layout/sidebar-widgets.tsx b/tools/composer/src/components/layout/sidebar-widgets.tsx
index a318b55db..310589a49 100644
--- a/tools/composer/src/components/layout/sidebar-widgets.tsx
+++ b/tools/composer/src/components/layout/sidebar-widgets.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import { useState, useRef, useEffect } from "react";
diff --git a/tools/composer/src/components/layout/sidebar.tsx b/tools/composer/src/components/layout/sidebar.tsx
index be5cea53e..7ae9312ff 100644
--- a/tools/composer/src/components/layout/sidebar.tsx
+++ b/tools/composer/src/components/layout/sidebar.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import { useState } from "react";
diff --git a/tools/composer/src/components/main/create-widget.tsx b/tools/composer/src/components/main/create-widget.tsx
index 05b96c859..961a191ba 100644
--- a/tools/composer/src/components/main/create-widget.tsx
+++ b/tools/composer/src/components/main/create-widget.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client";
import { useState, useRef, useEffect } from "react";
diff --git a/tools/composer/src/components/main/preview-gallery.tsx b/tools/composer/src/components/main/preview-gallery.tsx
index f0363cbe8..7e753c292 100644
--- a/tools/composer/src/components/main/preview-gallery.tsx
+++ b/tools/composer/src/components/main/preview-gallery.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
const suggestions = [
{ icon: 'person', label: 'Profile card' },
{ icon: 'thermostat', label: 'Weather widget' },
diff --git a/tools/composer/src/components/main/widget-input.tsx b/tools/composer/src/components/main/widget-input.tsx
index 944839793..b1abe7157 100644
--- a/tools/composer/src/components/main/widget-input.tsx
+++ b/tools/composer/src/components/main/widget-input.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
interface WidgetInputProps {
diff --git a/tools/composer/src/components/ui/alert-dialog.tsx b/tools/composer/src/components/ui/alert-dialog.tsx
index 0863e40d9..202164b43 100644
--- a/tools/composer/src/components/ui/alert-dialog.tsx
+++ b/tools/composer/src/components/ui/alert-dialog.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client"
import * as React from "react"
diff --git a/tools/composer/src/components/ui/button.tsx b/tools/composer/src/components/ui/button.tsx
index 21409a066..b82da3982 100644
--- a/tools/composer/src/components/ui/button.tsx
+++ b/tools/composer/src/components/ui/button.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
diff --git a/tools/composer/src/components/ui/dropdown-menu.tsx b/tools/composer/src/components/ui/dropdown-menu.tsx
index bbe6fb019..b38e1963a 100644
--- a/tools/composer/src/components/ui/dropdown-menu.tsx
+++ b/tools/composer/src/components/ui/dropdown-menu.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client"
import * as React from "react"
diff --git a/tools/composer/src/components/ui/input.tsx b/tools/composer/src/components/ui/input.tsx
index 89169058d..4683138bd 100644
--- a/tools/composer/src/components/ui/input.tsx
+++ b/tools/composer/src/components/ui/input.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import * as React from "react"
import { cn } from "@/lib/utils"
diff --git a/tools/composer/src/components/ui/resizable.tsx b/tools/composer/src/components/ui/resizable.tsx
index 82fa19ed5..e6754ddc1 100644
--- a/tools/composer/src/components/ui/resizable.tsx
+++ b/tools/composer/src/components/ui/resizable.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client"
import * as React from "react"
diff --git a/tools/composer/src/components/ui/separator.tsx b/tools/composer/src/components/ui/separator.tsx
index 275381cab..e27a1e7ba 100644
--- a/tools/composer/src/components/ui/separator.tsx
+++ b/tools/composer/src/components/ui/separator.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
"use client"
import * as React from "react"
diff --git a/tools/composer/src/contexts/widgets-context.test.tsx b/tools/composer/src/contexts/widgets-context.test.tsx
index 1a5713118..5a34b7da4 100644
--- a/tools/composer/src/contexts/widgets-context.test.tsx
+++ b/tools/composer/src/contexts/widgets-context.test.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, act } from '@testing-library/react';
import * as storage from '@/lib/storage';
diff --git a/tools/composer/src/contexts/widgets-context.tsx b/tools/composer/src/contexts/widgets-context.tsx
index d1b4e87c4..2644fde90 100644
--- a/tools/composer/src/contexts/widgets-context.tsx
+++ b/tools/composer/src/contexts/widgets-context.tsx
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
'use client';
import { createContext, useContext, useState, useEffect, useCallback, ReactNode } from 'react';
diff --git a/tools/composer/src/data/gallery/account-balance.ts b/tools/composer/src/data/gallery/account-balance.ts
index 2ff81f040..8d9a7aef2 100644
--- a/tools/composer/src/data/gallery/account-balance.ts
+++ b/tools/composer/src/data/gallery/account-balance.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const ACCOUNT_BALANCE_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/calendar-day.ts b/tools/composer/src/data/gallery/calendar-day.ts
index 1d34475f3..fddcd1d0f 100644
--- a/tools/composer/src/data/gallery/calendar-day.ts
+++ b/tools/composer/src/data/gallery/calendar-day.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const CALENDAR_DAY_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/chat-message.ts b/tools/composer/src/data/gallery/chat-message.ts
index c8b2bdf21..35eef89b3 100644
--- a/tools/composer/src/data/gallery/chat-message.ts
+++ b/tools/composer/src/data/gallery/chat-message.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const CHAT_MESSAGE_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/coffee-order.ts b/tools/composer/src/data/gallery/coffee-order.ts
index 99155a4e3..fcc635ce8 100644
--- a/tools/composer/src/data/gallery/coffee-order.ts
+++ b/tools/composer/src/data/gallery/coffee-order.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const COFFEE_ORDER_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/contact-card.ts b/tools/composer/src/data/gallery/contact-card.ts
index 550066053..c0025916a 100644
--- a/tools/composer/src/data/gallery/contact-card.ts
+++ b/tools/composer/src/data/gallery/contact-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 26. Contact Card
diff --git a/tools/composer/src/data/gallery/countdown-timer.ts b/tools/composer/src/data/gallery/countdown-timer.ts
index e656dbfe5..3c842919f 100644
--- a/tools/composer/src/data/gallery/countdown-timer.ts
+++ b/tools/composer/src/data/gallery/countdown-timer.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 29. Countdown Timer
diff --git a/tools/composer/src/data/gallery/credit-card.ts b/tools/composer/src/data/gallery/credit-card.ts
index 3767345c6..0debc6bdb 100644
--- a/tools/composer/src/data/gallery/credit-card.ts
+++ b/tools/composer/src/data/gallery/credit-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 23. Credit Card Display
diff --git a/tools/composer/src/data/gallery/email-compose.ts b/tools/composer/src/data/gallery/email-compose.ts
index 65dc2d4f9..10906e1b7 100644
--- a/tools/composer/src/data/gallery/email-compose.ts
+++ b/tools/composer/src/data/gallery/email-compose.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const EMAIL_COMPOSE_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/event-detail.ts b/tools/composer/src/data/gallery/event-detail.ts
index f45c681d7..5ab6255a2 100644
--- a/tools/composer/src/data/gallery/event-detail.ts
+++ b/tools/composer/src/data/gallery/event-detail.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 17. Event Detail Card
diff --git a/tools/composer/src/data/gallery/flight-status.ts b/tools/composer/src/data/gallery/flight-status.ts
index 9ac56f0e8..5e6ed868b 100644
--- a/tools/composer/src/data/gallery/flight-status.ts
+++ b/tools/composer/src/data/gallery/flight-status.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const FLIGHT_STATUS_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/index.ts b/tools/composer/src/data/gallery/index.ts
index 787e62ed1..1247d3b40 100644
--- a/tools/composer/src/data/gallery/index.ts
+++ b/tools/composer/src/data/gallery/index.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
// Individual widget exports
export * from './flight-status';
export * from './email-compose';
diff --git a/tools/composer/src/data/gallery/login-form.ts b/tools/composer/src/data/gallery/login-form.ts
index bbb8924d6..feb063d1a 100644
--- a/tools/composer/src/data/gallery/login-form.ts
+++ b/tools/composer/src/data/gallery/login-form.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const LOGIN_FORM_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/movie-card.ts b/tools/composer/src/data/gallery/movie-card.ts
index 5f1786bb0..ae8594285 100644
--- a/tools/composer/src/data/gallery/movie-card.ts
+++ b/tools/composer/src/data/gallery/movie-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 30. Movie Card
diff --git a/tools/composer/src/data/gallery/music-player.ts b/tools/composer/src/data/gallery/music-player.ts
index e32666f7f..5e969eea7 100644
--- a/tools/composer/src/data/gallery/music-player.ts
+++ b/tools/composer/src/data/gallery/music-player.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const MUSIC_PLAYER_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/notification-permission.ts b/tools/composer/src/data/gallery/notification-permission.ts
index 63a8c4360..a0e9952b6 100644
--- a/tools/composer/src/data/gallery/notification-permission.ts
+++ b/tools/composer/src/data/gallery/notification-permission.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const NOTIFICATION_PERMISSION_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/podcast-episode.ts b/tools/composer/src/data/gallery/podcast-episode.ts
index 00a8c8769..928f491cf 100644
--- a/tools/composer/src/data/gallery/podcast-episode.ts
+++ b/tools/composer/src/data/gallery/podcast-episode.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 27. Podcast Episode
diff --git a/tools/composer/src/data/gallery/product-card.ts b/tools/composer/src/data/gallery/product-card.ts
index d0a5cfcc0..5bf57d1b8 100644
--- a/tools/composer/src/data/gallery/product-card.ts
+++ b/tools/composer/src/data/gallery/product-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const PRODUCT_CARD_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/purchase-complete.ts b/tools/composer/src/data/gallery/purchase-complete.ts
index 25005c1d2..cd4c67620 100644
--- a/tools/composer/src/data/gallery/purchase-complete.ts
+++ b/tools/composer/src/data/gallery/purchase-complete.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const PURCHASE_COMPLETE_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/recipe-card.ts b/tools/composer/src/data/gallery/recipe-card.ts
index d4a924b9e..b1a42c5ba 100644
--- a/tools/composer/src/data/gallery/recipe-card.ts
+++ b/tools/composer/src/data/gallery/recipe-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 25. Recipe Card
diff --git a/tools/composer/src/data/gallery/restaurant-card.ts b/tools/composer/src/data/gallery/restaurant-card.ts
index 814a41e14..f8bbec419 100644
--- a/tools/composer/src/data/gallery/restaurant-card.ts
+++ b/tools/composer/src/data/gallery/restaurant-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 20. Restaurant Card
diff --git a/tools/composer/src/data/gallery/shipping-status.ts b/tools/composer/src/data/gallery/shipping-status.ts
index 55aa57886..38aa4c5f4 100644
--- a/tools/composer/src/data/gallery/shipping-status.ts
+++ b/tools/composer/src/data/gallery/shipping-status.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 22. Shipping Status
diff --git a/tools/composer/src/data/gallery/software-purchase.ts b/tools/composer/src/data/gallery/software-purchase.ts
index 763356eff..95b9078a5 100644
--- a/tools/composer/src/data/gallery/software-purchase.ts
+++ b/tools/composer/src/data/gallery/software-purchase.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 19. Software Purchase Form
diff --git a/tools/composer/src/data/gallery/sports-player.ts b/tools/composer/src/data/gallery/sports-player.ts
index cae055fe6..67fc9d0f4 100644
--- a/tools/composer/src/data/gallery/sports-player.ts
+++ b/tools/composer/src/data/gallery/sports-player.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const SPORTS_PLAYER_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/stats-card.ts b/tools/composer/src/data/gallery/stats-card.ts
index b894a60b6..c5fabebd6 100644
--- a/tools/composer/src/data/gallery/stats-card.ts
+++ b/tools/composer/src/data/gallery/stats-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 28. Stats Card
diff --git a/tools/composer/src/data/gallery/step-counter.ts b/tools/composer/src/data/gallery/step-counter.ts
index d86fc3160..3603a035f 100644
--- a/tools/composer/src/data/gallery/step-counter.ts
+++ b/tools/composer/src/data/gallery/step-counter.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 24. Step Counter
diff --git a/tools/composer/src/data/gallery/task-card.ts b/tools/composer/src/data/gallery/task-card.ts
index f20ff72aa..c9030ac26 100644
--- a/tools/composer/src/data/gallery/task-card.ts
+++ b/tools/composer/src/data/gallery/task-card.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const TASK_CARD_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/track-list.ts b/tools/composer/src/data/gallery/track-list.ts
index 7ebf61225..c00df32a4 100644
--- a/tools/composer/src/data/gallery/track-list.ts
+++ b/tools/composer/src/data/gallery/track-list.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 18. Track List
diff --git a/tools/composer/src/data/gallery/user-profile.ts b/tools/composer/src/data/gallery/user-profile.ts
index c9cc59cab..ab3707ce5 100644
--- a/tools/composer/src/data/gallery/user-profile.ts
+++ b/tools/composer/src/data/gallery/user-profile.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const USER_PROFILE_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/weather-current.ts b/tools/composer/src/data/gallery/weather-current.ts
index ac9470cac..f23414f7b 100644
--- a/tools/composer/src/data/gallery/weather-current.ts
+++ b/tools/composer/src/data/gallery/weather-current.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
export const WEATHER_CURRENT_WIDGET: Widget = {
diff --git a/tools/composer/src/data/gallery/workout-summary.ts b/tools/composer/src/data/gallery/workout-summary.ts
index 15030b727..ffb194be9 100644
--- a/tools/composer/src/data/gallery/workout-summary.ts
+++ b/tools/composer/src/data/gallery/workout-summary.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { Widget } from '@/types/widget';
// 16. Workout Summary
diff --git a/tools/composer/src/lib/components-data.ts b/tools/composer/src/lib/components-data.ts
index c4aa94ee7..636d1d858 100644
--- a/tools/composer/src/lib/components-data.ts
+++ b/tools/composer/src/lib/components-data.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import type { ComponentInstance } from '@copilotkit/a2ui-renderer';
export interface ComponentProp {
diff --git a/tools/composer/src/lib/json-parser.test.ts b/tools/composer/src/lib/json-parser.test.ts
index 5c6f39fc2..150492bfb 100644
--- a/tools/composer/src/lib/json-parser.test.ts
+++ b/tools/composer/src/lib/json-parser.test.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it, expect } from 'vitest';
import { parseRobustJSON, parseRobustJSONSafe } from './json-parser';
diff --git a/tools/composer/src/lib/json-parser.ts b/tools/composer/src/lib/json-parser.ts
index d3dce2e0c..d82ae93bf 100644
--- a/tools/composer/src/lib/json-parser.ts
+++ b/tools/composer/src/lib/json-parser.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/**
* Robust JSON parsing utilities for handling malformed JSON strings,
* particularly useful when dealing with AI-generated JSON that may not be properly escaped.
diff --git a/tools/composer/src/lib/storage.test.ts b/tools/composer/src/lib/storage.test.ts
index ea8d2fa9d..5ac8280ff 100644
--- a/tools/composer/src/lib/storage.test.ts
+++ b/tools/composer/src/lib/storage.test.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
import localforage from 'localforage';
import { getWidgets, saveWidget, deleteWidget } from './storage';
diff --git a/tools/composer/src/lib/storage.ts b/tools/composer/src/lib/storage.ts
index e231a8ff2..c7391b883 100644
--- a/tools/composer/src/lib/storage.ts
+++ b/tools/composer/src/lib/storage.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import localforage from 'localforage';
import { Widget } from '@/types/widget';
diff --git a/tools/composer/src/lib/utils.ts b/tools/composer/src/lib/utils.ts
index bd0c391dd..8b9d0b41e 100644
--- a/tools/composer/src/lib/utils.ts
+++ b/tools/composer/src/lib/utils.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
diff --git a/tools/composer/src/test/setup.ts b/tools/composer/src/test/setup.ts
index 276d0549d..ea4a5848b 100644
--- a/tools/composer/src/test/setup.ts
+++ b/tools/composer/src/test/setup.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import '@testing-library/jest-dom';
import { vi } from 'vitest';
diff --git a/tools/composer/src/types/widget.ts b/tools/composer/src/types/widget.ts
index 666966f35..914521917 100644
--- a/tools/composer/src/types/widget.ts
+++ b/tools/composer/src/types/widget.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import type { ComponentInstance } from "@copilotkit/a2ui-renderer";
export interface DataState {
diff --git a/tools/composer/vitest.config.ts b/tools/composer/vitest.config.ts
index 0be902d24..e2766f9ad 100644
--- a/tools/composer/vitest.config.ts
+++ b/tools/composer/vitest.config.ts
@@ -1,3 +1,19 @@
+/**
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
import path from 'path';