Commit Graph

2370 Commits

Author SHA1 Message Date
pnoker a15795019c fix(agentic): add okhttp client deps and migrate tool API to spring-ai 2.0.0 2026-06-26 19:28:11 +08:00
Henry Zhang 676d575428 Merge pull request #86 from pnoker/feature/git-workflow
chore(git): unify branch model, semver tags, CI trim, templates
2026-06-26 14:32:40 +08:00
pnoker 17eceb7ad4 docs: add git workflow design spec and implementation plan 2026-06-26 14:32:02 +08:00
pnoker e89f4cc1d2 docs: document branch model and semver release flow; align changelog tag pattern 2026-06-26 14:31:34 +08:00
pnoker 2ba4f73b7d docs: add PR and issue templates 2026-06-26 14:31:34 +08:00
pnoker a32354c602 chore(git): rewrite tag.sh to semver on main with dry-run 2026-06-26 14:26:04 +08:00
pnoker dd3ee73fb8 ci: drop release branch, rewire triggers to develop/main and v* tags 2026-06-26 14:23:13 +08:00
pnoker 1c11831cbc docs: comprehensive documentation overhaul across English and Chinese sites 2026-06-26 13:17:41 +08:00
pnoker d18bf4d03d style: fix table alignment and whitespace in README files 2026-06-26 13:17:38 +08:00
pnoker a6c63a9c3d style: fix formatting in Java source files and tests 2026-06-26 13:17:33 +08:00
Henry Zhang 85a51914dc Merge pull request #84 from pnoker/docs/ia-refresh
docs(site): rebuild IA, add IoT foundations, bespoke diagrams
2026-06-26 13:07:23 +08:00
pnoker 5f1ab36ade docs(site): apply verification fixes to remaining driver and foundation pages
Source-checked corrections from the verification pass that were not captured
in the prior commit: mqtt default broker (dc3-rabbitmq:1883), snmp/can/http/
ble/zigbee command vs point attribute read sources and honest capability
labels, opc-ua/opc-da/modbus-rtu/fins/listening-virtual wording, and the
fieldbus/iot-protocols foundations chapters. Bilingual, all within drivers/
and foundations/, no scope creep.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 12:55:41 +08:00
pnoker c291c6f0aa docs(site): fix factual issues flagged by independent source verification
Apply source-checked corrections across driver and foundations pages:
- mqtt/snmp/can/http/ble/zigbee/listening-virtual: command-attribute vs
  point-attribute read sources, default broker (dc3-rabbitmq:1883, not EMQX
  localhost:31883), dead driver-level properties, capability matrix alignment
  (CAN write ✓→—), and honest skeleton/partial labels.
- aiot: MCP catalog refresh is manual (POST /mcp/tool/catalog/refresh), not
  scheduled PT5M; AGENTIC_MEMORY_ENABLED dual default clarified.
- edge-cloud: connection/state management sits on the data center, not the
  manager center; soften the four-centers ↔ four-capabilities 1:1 wording.
- security: salt is stateless (no server-enforced 5-min timeout);
  DC3_SECURITY_KEY has a "must exist" startup check but no weak-value rejection.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 12:42:07 +08:00
pnoker 4b190c1d43 docs(site): translate .vitepress code comments to English and calm hero animations
Convert all Chinese code comments under docs/.vitepress (config + theme +
components) to English; UI string literals (zh DICT values, nav labels,
uiLabels) are kept verbatim. Soften the home hero motion for a calmer feel:
slower logo wave (omega 1.0→0.6, sway 6→4.5), gentler particle convergence
(inward 120-200→70-120 px/s, fewer/slower dots), slower wave plane (0.5→0.3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 11:28:32 +08:00
pnoker dbe4d6bc83 docs(site): link data-plane, auth-rbac and ai hubs to their foundations chapters
Add foundations back-links (data-plane → time-series, auth-rbac → security,
ai → aiot) to complete the theory-to-implementation loop across both locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 11:28:32 +08:00
pnoker 93b111e3fb docs(site): deepen all 28 driver pages and add foundations back-links
Rewrite every protocol driver page (zh+en) into a four-section structure
— protocol background, attribute config, troubleshooting, and how it lands
in DC3 — cross-linked to the foundations network-layer chapters and the
driver capability matrix. Implementation status is verified against each
driver's source and labeled honestly (skeleton: ethernet-ip, iec104, dlms,
can, zigbee; partial: fins, mqtt, lwm2m, virtual). Add foundations
back-links from the concepts and drivers hubs to close the theory↔practice
loop.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 11:04:07 +08:00
pnoker 0a33fb47d9 docs(site): add IoT foundations pillar — four-layer knowledge woven with DC3
Add the Foundations pillar (nav position 2) as a structured IoT primer
organized by the classic four-layer reference architecture (perception,
network, platform, application) plus cross-cutting security. One overview
(2.0) with a bespoke FourLayers SVG mapping each layer to its DC3
implementation, and eight chapters (sensing, identification, fieldbus,
iot-protocols, edge-cloud, data-pipeline, aiot, security), bilingual and
fully original. Every chapter closes with a verified "in IoT DC3" section
and cross-links into the product docs. Add the sixth homepage card.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v2026.6.25
2026-06-25 23:48:00 +08:00
pnoker 147368a7ee docs(site): fix language switcher, restyle mermaid, add bespoke flow diagrams
Drop the gate "Languages" locale so the switcher shows only zh/en; keep the
/ redirect gate for no-JS fallback. Deepen the global mermaid theme (softer
on-brand palette, rounded nodes, cleaner edges) so all 156 diagrams read
cleaner. Add a reusable .dc3-diagram palette and three hand-built SVG
components (DataPlane, CommandPlane, AuthFlow) replacing the keystone
diagrams on the data-plane, command-plane and auth-rbac pages, bilingual
and theme-aware.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 23:18:57 +08:00
pnoker cfd5a2a857 docs(site): refine top nav into five pillars, add glossary and driver matrix
Collapse the flat 10-section navigation into five pillars (Overview,
Architecture, Connectivity, Operations, Develop) plus a Community dropdown,
via a pillar model in config.mts. Legacy dirs (modules, guide, ai,
automation, device-onboarding) aggregate into pillars through multi-path
sidebars and longest-prefix matching, with zero file moves and zero dead
links. Adds a bilingual glossary and driver capability matrix, and aligns
the homepage feature cards.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:07:54 +08:00
pnoker 1701413a4d docs(site): add IA-refresh spec and P0 plan
Design and task breakdown for collapsing the flat 10-section nav into
professional pillars and adding an IoT foundations knowledge pillar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:07:54 +08:00
pnoker d06037ee17 docs(site): fix browser title; add hero wave background and converging particle field
- title: add config `title: 'IoT DC3'` so the browser tab reads "IoT DC3"
  (inner pages ":title | IoT DC3") instead of the default "VitePress".
- hero: full-bleed background particle field that converges clockwise toward the
  logo from all directions (HeroParticles), plus a pseudo-perspective wave
  point-grid underlay (HeroWaves); both pure 2D canvas, layered under the hero
  content (waves z0 < particles z1 < content z2).
2026-06-25 16:59:40 +08:00
pnoker f6990019be docs(site): live hero logo, unified architecture component, grouped sidebar
- hero: rebuild the homepage logo as a live canvas particle system faithfully
  reconstructed from logo.svg (54 dots, solid #1296db) instead of a static image;
  the dots animate with a clockwise, inward-converging wave along the three spiral
  arms — no whole-image rotation, no extra particles or glow haze.
- architecture: render the homepage/architecture diagram via a single
  theme-reactive Architecture.vue component (renamed from Dc3Architecture.vue);
  drop the static SVG/HTML drawings.
- cleanup: remove ~23MB of unused images (legacy/ 167 files, architecture-cn.png,
  iot-dc3-architecture-{zh,en}.svg, diagrams/iot-dc3-architecture.html).
- sidebar: group drivers/concepts/architecture into collapsible sections;
  fix a pre-existing dead-link bug in cross-section link generation.
- nav: brand-blue site title.
- chore: bump packageManager to pnpm@11.9.0.
2026-06-25 15:30:22 +08:00
pnoker e61b620399 docs: fix tenant-isolation fiction + data-plane schema/compression + MCP endpoint
Whole-site QA pass (concepts + drivers + architecture + operation + home) with adversarial verification against source. Fixed:
- Remove fabricated 'MyBatis-Plus tenant-line interceptor auto-appends WHERE tenant_id' (no such interceptor exists; isolation is controller-layer requireTenant/filterTenant) across architecture/index, auth-rbac, modules, tenant concept (zh+en).
- data-plane: add dc3_history schema qualifier + compression (7d) / retention (180d) lifecycle policies (zh+en).
- operation/index: MCP endpoint is gateway-root POST /mcp, not /api/v3/agentic/mcp (zh+en).
Concept pages (9), drivers (28), services/domain-model/command-plane/device-onboarding/data-commands/alarms verified accurate against source.
2026-06-25 10:54:07 +08:00
pnoker c470de529e docs(drivers): add bilingual reference pages for all 28 drivers + catalog
Per-driver onboarding pages (protocol intro, driver/point/command config tables, collection & health, minimal example, pitfalls), config tables taken verbatim from each driver application.yml. Drivers catalog + 'Drivers' nav entry. Adversarial pass verified every attribute row against the yml and corrected behavioral drift (JDBC executeQuery path, dlms fail-fast, listening-virtual name-based parse, modbus-rtu per-device connection, opc-ua auto cert, fins 16-bit read, etc.).
v2026.6.24
2026-06-24 21:43:13 +08:00
pnoker 77273d2b24 docs(concepts): add 9 bilingual core-concept reference pages
Device, Driver, Profile (thing model), Point, PointValue, Command, Event, Tenant, Attribute&Config — each grounded in source BOs + maintainer design docs, beginner-friendly with analogies, cross-linked. Field tables/enums/table names/APIs verified against source (adversarial pass caught & fixed design-doc drift: dc3_event_history not _record, EventLevelEnum LOW/MEDIUM/HIGH/CRITICAL, tenant isolation is controller-layer not a DB interceptor).
2026-06-24 21:19:40 +08:00
pnoker 11d2d0176f docs(home): add recolored logo hero image (azure gradient + soft glow), floating instead of bordered card 2026-06-24 19:40:09 +08:00
pnoker 8b507b313d fix(auth,gateway): mark OAuth2.1/MCP protocol endpoints @PublicEndpoint to pass controller permission audit
These OAuth2.1 authorization-server endpoints (metadata, jwks, register, authorize, token, revoke) and the MCP gateway endpoints (protected-resource metadata, JSON-RPC mcp) authenticate via OAuth (PKCE / client credentials / bearer-token introspection), not the internal @PreAuthorize RBAC. Marking them @PublicEndpoint — consistent with TokenController pre-login endpoints — makes their public security posture explicit and satisfies the controller permission audit (337 endpoints: 326 guarded + 11 public).
2026-06-24 19:29:31 +08:00
pnoker 0f0eac8c29 ci: manage docs npm deps via dependabot; scope codeql security-events:write to job level 2026-06-24 19:19:48 +08:00
pnoker 64035dd72a docs(site): switch base to / for docs.dc3.site custom domain (fix icon/lang-redirect paths) 2026-06-24 19:06:16 +08:00
pnoker 85d7f300d7 fix(docs): transparent home navbar so hero title isn't occluded; restore doc-page header divider to match sidebar 2026-06-24 17:22:33 +08:00
pnoker 181c947fe7 ci(docs): point pnpm/action-setup at docs/package.json for packageManager 2026-06-24 16:22:01 +08:00
pnoker 2030eab432 ci(docs): build on Node 22 and use packageManager pnpm (fix node:sqlite / pnpm Node>=22.13 requirement) 2026-06-24 16:19:49 +08:00
pnoker a6846212fc docs(site): logo-blue retheme, grouped sidebar, frosted header, flat cards; relocate vitepress project under docs/
Theme: brand palette to logo azure (#1296db family) with AA-tuned links, neutralized backgrounds/shadows, per-section sidebar group headers with pill active state, borderless frosted nav, flat translucent feature cards; mermaid + theme-color recolored to blue.

Build: move package.json/pnpm-lock/pnpm-workspace/node_modules under docs/; scripts to 'vitepress dev/build/preview'; CI docs.yml uses working-directory docs + cache-dependency-path docs/pnpm-lock.yaml.
2026-06-24 16:12:03 +08:00
pnoker 8c0f1b00ac docs: overhaul site with bilingual i18n, mermaid, and expanded guides 2026-06-23 19:34:22 +08:00
pnoker c564ba014f chore: remove obsolete dc3-stack-test skill 2026-06-23 19:34:21 +08:00
pnoker a620afb087 build(deps): upgrade spring-ai to 2.0.0 ga and drop milestone repository 2026-06-23 19:34:21 +08:00
pnoker 9aa6a425d8 docs(iot-dc3): refresh multilingual README with sharper AI-native positioning and design principles
- Replace slogan with capability-oriented messaging across en/zh/ja/vi
- Add design principles section (Facade, DO/BO/VO, tenant isolation)
- Add contributors badge
- Fix Japanese blockquote rendering breakage
2026-06-23 14:33:07 +08:00
pnoker 46f8243c07 test(driver): add postgresql testcontainers integration test for jdbc io
Add the first driver integration test: spins a real PostgreSQL container and
verifies the shared JDBC read path returns stored values and that the write
path binds the point value as a parameter — a SQL-injection payload is stored
verbatim and cannot drop the table, confirming the parameterised-write fix
end-to-end. Set the Failsafe classesDirectory so integration tests run against
the plain compiled classes instead of the Spring Boot repackaged fat jar.
v2026.6.22
2026-06-22 18:49:49 +08:00
pnoker 452ed896f3 test(driver): add minimal unit tests for 13 previously untested drivers
Add offline MockitoExtension tests for bacnet-ip, can, ethernet-ip, fins, http,
lwm2m, mysql, oracle, postgresql, serial, snmp, sqlserver, and tcp-udp. Each
covers configuration validation (validate/validatePoint flag missing required
attributes) and deterministic lifecycle behavior. Network/hardware paths
(read/write/getConnector) are deliberately excluded to keep the suite fast and
deterministic. Takes these drivers from zero tests to baseline coverage.
2026-06-22 18:09:01 +08:00
pnoker 9aa5a6bdb9 security(driver): bind jdbc write value as a parameter to prevent sql injection
The shared JDBC driver base interpolated the point value into the write SQL via
writeQuery.replace("${value}", ...), allowing a crafted write command value to
alter the statement. Bind the value with PreparedStatement#setString against a
single ? placeholder instead. Update the mysql/oracle/postgresql/sqlserver
writeQuery attribute docs to the ? convention and add the module's first test.
2026-06-22 17:59:50 +08:00
pnoker ec52b1a7fa fix(driver): fail fast in dlms/iec104 stubs instead of fabricating read/write success
The DLMS and IEC 104 drivers are work-in-progress skeletons whose protocol I/O
is unimplemented. They previously returned a null-valued ReadPointValue / cached
echo and reported write success, so the SDK emitted fabricated point values and
masked that the drivers do not work. Make read/write throw Read/WritePointException
so the SDK records failures and applies backoff. Remove the dead connection
scaffolding and add the drivers' first unit tests.
2026-06-22 17:13:40 +08:00
pnoker a3032fbc6d fix(driver): set coap driver type to DRIVER_CLIENT
The CoAP driver implementation is a Californium client (GET/PUT), but
its config declared type: DRIVER_SERVER. Correct it to DRIVER_CLIENT.
2026-06-22 16:56:29 +08:00
pnoker ad7973e08f fix(driver): stop mqtt validate() requiring point attributes as driver config
validate(driverConfig) required commandTopic/commandQos, but those are
per-point attributes read from pointConfig in write(), so driver-level
validation always failed. Drop the misplaced checks (and the now-unused
helper); this driver declares no required driver-level attributes.
2026-06-22 16:56:29 +08:00
pnoker 98f0ac3128 docs(readme): add READMEs for previously undocumented modules
Document 31 modules that had no README: dc3-center-agentic, dc3-e2e,
common modules (agentic, sql, test, resource-registrar) and the facade
subsystem (api/grpc/local-auth/local-data/local-manager), plus 21
drivers. Content is grounded in each module's pom/yaml/source; WIP
skeleton drivers (can, dlms, ethernet-ip, iec104, lwm2m, zigbee) are
flagged as such.
2026-06-22 16:50:08 +08:00
pnoker 7320b99183 docs(driver): fix attribute classification and flag WIP mqtt driver
Move misclassified point attributes out of the driver-attribute tables
(modbus-tcp Slave ID, virtual Tag, listening-virtual), drop plcs7's
fabricated Data Length and add the required PLC Type, document
command/event attributes, and flag the mqtt driver as a WIP skeleton.
2026-06-22 16:49:29 +08:00
pnoker 49892923bd docs(common): fix thread and mqtt configuration examples
thread: document the three JDK executor beans and the real dc3.thread
keys (the @Async claim was wrong). mqtt: correct the dc3.driver.mqtt
prefix/keys and the Spring Integration + Paho component roles.
2026-06-22 16:49:19 +08:00
pnoker a8ba610df3 docs(gateway): correct routing table and service addressing
Replace the non-existent ekuiper route with agentic, add the OAuth2/MCP
routes, and describe static addressing (no Nacos) and the actual profile
configuration.
2026-06-22 16:49:18 +08:00
pnoker abd826bf6e docs(api): correct gRPC RPC names, import paths, and missing services
Align the four api READMEs with the actual protos: Select*->Get*/List*
per the CRUD verb convention, fix api/common->api/center import paths
for auth/data, drop the fabricated manager SelectByServiceName RPC, and
document the previously omitted auth/data/manager services.
2026-06-22 16:49:07 +08:00
pnoker d5ac154aec chore: align .env.example image tag default to 2026.6
DC3_IMAGE_TAG was 2026.5 while the compose files default to 2026.6;
unify the .env.example default so pulled images match.
2026-06-22 16:48:57 +08:00
pnoker bf8f8fefe9 refactor(manager): move @EnableAsync to ManagerInitRunner auto-config
@EnableAsync was on the business component MetadataEventPublisher; move
it to the module's @AutoConfiguration entry (ManagerInitRunner) so the
async switch lives with config, not a bean. Scope is unchanged.
2026-06-22 16:48:43 +08:00