Appearance
Rule Chain Behavior Manifest
Scanned
- Frontend files: 22
- Backend files: 35
- Total files: 57
Pages
- Rule Chains (/rulechains)
- Rule Chain Editor (/rulechains/:id)
Forms
- Name (name)
- Description (description)
- Enabled (enabled)
- Protocol (protocol)
- Target Mode (target-mode)
- Batch Mode (batch-mode)
- Devices (devices)
- Interval (interval)
- Keys (keys)
Flows
- create-rulechain
- Open the rule chains area.
- Click New Rule Chain.
- Enter name and configuration.
- Configure targets and keys.
- Save the rule chain.
- edit-rulechain
- Open an existing rule chain.
- Modify the configuration.
- Save the changes.
- delete-rulechain
- Locate a rule chain in the list.
- Click Delete.
- Confirm the deletion.
- start-rulechain
- Open the editor.
- Review the rule chain configuration.
- Click Save & Start.
- pause-rulechain
- Locate an active rule chain.
- Click Pause.
- The rule chain changes to paused state.
- preview-rulechain
- Open the editor.
- Configure the generator settings.
- Click Preview.
- Review the sample payload.
Tables
- None verified
Constraints
- Name is required before saving.
- At least one device must be selected.
- At least one key must be configured.
- Rule chain must be saved before it can be started.
- Only active rule chains can be paused.
Unknowns
- None
Available Pages") lines.push("") pages.forEach((page) => const name = String(page?
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- from "react-router-dom" createRuleChain, getRuleChain, pauseRuleChain, previewRuleChain, startRuleChain, updateRuleChain, from "../../../api/ruleChains"
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- name: string description: string enabled: boolean status: RuleChainStatus config: RuleChainConfig > return
- c:/autoconnecto/frontend/src/api/ruleChains.ts
- CreateRuleChainPayload, PreviewRuleChainPayload, RuleChain, RuleChainPreviewResponse, RuleChainSummary, UpdateRuleChainPayload, from "../features/rule-chains/types/ruleChain.types"
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- is.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Preview/i, /Save Draft/i, /Save & Start/i], requireAllRegexes: false, , ]) if (editorEvidence.length) items.push( id: "rulechain-editor", name: "Ru
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- ============ */ private renderEditor(manifest: RuleChainBehaviorManifest): string | null const lines: string[] = [] const previewFlow = this.getFlow(manifest, "preview-rulechain") const formFields = this.uniqueNonEmpty( (manifest.forms || []).map((f) => f?.lab
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- atus= status /> isEdit ? "Edit Rule Chain" : "New Rule Chain" Type: Data Generator
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- 0 > Rule Chains navigate("/rule-chains/new") > + New Rule Chain <Table rowKey="id" dataSource= items loading= loading pagination= pageSize: 10 > <Table.Column title="
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- addFlow( "create-rulechain", "Create Rule Chain", [ "Open the rule chains area.", "Click New Rule Chain.", "Enter name and configuration.", "Configure targets and keys.", "Save the rule chain.", ], this.findEvidenceInFiles(files, [ filePathInclud
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- onClick= () => handleSave("draft") loading= saving && actionLoading === "save" > Save Draft <Button type="primary" onClick= handleStart loading= saving && actionLoading === "start" > Save &
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- nceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Preview/i, /Save Draft/i, /Save & Start/i], requireAllRegexes: false, , ]) if (editorEvidence.length) items.push( id: "rulechain-editor", name: "Rule Chain Edi
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- rom "react-router-dom" Button, Card, message, Modal, Space, Table, Typography, from "antd" DeleteOutlined, PauseCircleOutlined, PlayCircleOutlined, from "@ant-design/icons" deleteRuleChain, listRuleChains, pauseRuleChain, startRuleChain, from "../../../api/rul
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- files, [ filePathIncludes: ["RuleChainsPage", "rulechain", "rule-chain"], regexes: [/Rule Chains/i, /columns/i, /Delete/i], requireAllRegexes: false, , ]) if (listEvidence.length) items.push( id: "rulechains-list", name: "Rule Chains", routeHint: "/rulechains"
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- const createFlow = this.getFlow(manifest, "create-rulechain") const editFlow = this.getFlow(manifest, "edit-rulechain") const deleteFlow = this.getFlow(manifest, "delete-rulechain") const startFlow = this.getFlow(manifest, "start-rulechain") const pauseFlow =
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- e="primary" onClick= handleStart loading= saving && actionLoading === "start" > Save & Start isEdit && status === "active" ? ( <Button onClick= handlePause loading= actionLoading === "pause" >
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- s, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Preview/i, /Save Draft/i, /Save & Start/i], requireAllRegexes: false, , ]) if (editorEvidence.length) items.push( id: "rulechain-editor", name: "Rule Chain Editor", routeHint
- c:/autoconnecto/frontend/src/features/rule-chains/components/RuleChainStatusBadge.tsx
- rops = status: RuleChainStatus const colorMap: Record = draft: "default", active: "green", paused: "orange", const labelMap: Record = draft: "Draft", active: "Active", paused: "Paused", return
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- Navigate, useParams from "react-router-dom" createRuleChain, getRuleChain, pauseRuleChain, previewRuleChain, startRuleChain, updateRuleChain, from "../../../api/ruleChains"
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- om" Button, Card, message, Modal, Space, Table, Typography, from "antd" DeleteOutlined, PauseCircleOutlined, PlayCircleOutlined, from "@ant-design/icons" deleteRuleChain, listRuleChains, pauseRuleChain, startRuleChain, from "../../../api/ruleChains"
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- | "same_payload_for_all" |
- c:/autoconnecto/frontend/src/api/ruleChains.ts
- tring status: "active" > const res = await api.post(
/api/rule-chains/$ id /start) return res.data id: string ): Promise const res = await api.post(/api/rule-chains/$ id /pause) return res.data payload: P
- tring status: "active" > const res = await api.post(
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- eChainEditorPage", "rulechain", "rule-chain"], regexes: [/Save & Start/i], , ]) ) addFlow( "pause-rulechain", "Pause Rule Chain", [ "Locate an active rule chain.", "Click Pause.", "The rule chain changes to paused state.", ], this.findEvidenceInFiles(files,
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- const deleteFlow = this.getFlow(manifest, "delete-rulechain") const startFlow = this.getFlow(manifest, "start-rulechain") const pauseFlow = this.getFlow(manifest, "pause-rulechain") const constraints = this.getConstraintTexts(manifest) const hasAnyContent = !!
- c:/autoconnecto/frontend/src/features/rule-chains/components/GeneratorKeyCard.tsx
- ve /> > <Input value= value.key onChange= (e) => update( key: e.target.value ) placeholder="temperature" />
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- useState ([]) const [deviceTypeOptions, setDeviceTypeOptions] = useState ( [] ) const [name, setName] = useState("") const [description, setDescription] = useState("") const [enabled, setEnabled] = useState(true) const [config, setConfig] = useState ( createDe
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- row: RuleChainSummary) => Modal.confirm( title: "Delete Rule Chain", content:
Are you sure you want to delete "$ row.name "?, okText: "Delete", okType: "danger", onOk: async () => setBusy(row.id, true) try await deleteRuleChain(row.id) setItems((prev) => pre
- row: RuleChainSummary) => Modal.confirm( title: "Delete Rule Chain", content:
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- version: number mode: RuleChainMode generator: DataGeneratorConfig id: string name: string description?: string | null type: RuleChainType protocol?: RuleChainProtocol | null status: RuleChainStatus enabled: boolean targetCount: number keyCount: number interva
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- file?: string id: string name: string steps: string[] confidence: Confidence evidence: EvidenceItem[] id: string label: string confidence: Confidence evidence: EvidenceItem[
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- ehaviorManifest, RuleChainFlow, RuleChainTable, from "../extractors/rulechain-behavior-extractor.service" render(manifest: RuleChainBehaviorManifest): Page[] const pages: Page[] = [] const overview = this.renderOverview(manif
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- deviceTypeOptions, setDeviceTypeOptions] = useState ( [] ) const [name, setName] = useState("") const [description, setDescription] = useState("") const [enabled, setEnabled] = useState(true) const [config, setConfig] = useState ( createDefaultRuleChainConfig(
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- mber mode: RuleChainMode generator: DataGeneratorConfig id: string name: string description?: string | null type: RuleChainType protocol?: RuleChainProtocol | null status: RuleChainStatus enabled: boolean targetCount: number keyCount: number intervalSeconds: n
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- : ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Name/i], , ]) ) addField( "description", "Description", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Description/i], ,
- c:/autoconnecto/frontend/src/features/rule-chains/components/GeneratorKeyCard.tsx
- title= value.key?.trim() ? value.key : "New Key" extra= Enabled <Switch checked= value.enabled onChange= (checked) => update( enabled: checked ) /> <Button danger icon= <DeleteOutl
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- iceTypeOption[]>( [] ) const [name, setName] = useState("") const [description, setDescription] = useState("") const [enabled, setEnabled] = useState(true) const [config, setConfig] = useState ( createDefaultRuleChainConfig() ) const generator = config.generat
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- = "number" | "boolean" | "string" protocol: RuleChainProtocol targetMode: RuleChainTargetMode deviceIds: string[] intervalSecon
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- eChainEditorPage", "rulechain", "rule-chain"], regexes: [/Description/i], , ]) ) addField( "enabled", "Enabled", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Enabled/i], , ])
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- aultGeneratorKey, createDefaultRuleChainConfig, type GeneratorKeyConfig, type RuleChain, type RuleChainConfig, type RuleChainProtocol, type RuleChainStatus, from "../types/ruleChain.types" const Title, Text = Typography type DeviceTypeOption = value: string
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- <Table.Column title="Interval" dataIndex="interva
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- | "same_payload_for_all" | "per_device_randomized" ex
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- "RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Enabled/i], , ]) ) addField( "protocol", "Protocol", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Protocol/i], , ])
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- /> <Select value= targetMode options= [ label: "Single Device", value: "single" , label: "Multipl
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- "rulechain", "rule-chain"], regexes: [/Protocol/i], , ]) ) addField( "target-mode", "Target Mode", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Target Mode/i], , ]) )
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- /> <Select value= generator.batchMode options= [ label: "Per Device Randomized",
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- ulechain", "rule-chain"], regexes: [/Target Mode/i], , ]) ) addField( "batch-mode", "Batch Mode", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Batch Mode/i], , ]) )
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- useState(false) const [saving, setSaving] = useState(false) const [previewLoading, setPreviewLoading] = useState(false) const [devicesLoading, setDevicesLoading] = useState(false) const [actionLoading, setActionLoading] = useState< "save" | "start" | "pause" |
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- leChainEditorPage", "rulechain", "rule-chain"], regexes: [/Batch Mode/i], , ]) ) addField( "devices", "Devices", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Devices/i], , ])
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- le="Schedule" style= marginBottom: 16 > <InputNumber style= width: "100%" min= 1 value= generator.intervalSeconds onChange= (v) =>
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- lumn title="Targets" dataIndex="targetsCount" /> <Table.Column title="Status" render= (_: unknown, row: RuleChainSummary) => ( )
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- expor
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- "RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Devices/i], , ]) ) addField( "interval", "Interval", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/Interval/i], , ])
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- => ( ...prev, generator: ...prev.generator, ...patch, as any, )) const updateKeys = (nextKeys: GeneratorKeyConfig[]) => updateGenerator( keys: nextKeys ) const handleAddKey = () => updateKeys([...(generator.keys || []), createDefaultGeneratorKey()]) const h
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- n title="Protocol" dataIndex="protocol" /> <Table.Column title="Status" render= (_: unknown, row: RuleChainSummary) => (
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- ChainProtocol targetMode: RuleChainTargetMode deviceIds: string[] intervalSeconds: number batchMode: RuleChainBatchMode keys: GeneratorKeyConfig[] id: string name: string
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- "Open the rule chains area.", "Click New Rule Chain.", "Enter name and configuration.", "Configure targets and keys.", "Save the rule chain.", ], this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [
- c:/autoconnecto/frontend/src/features/rule-chains/components/GeneratorKeyCard.tsx
- lue.dataType === "number") return ( <InputNumber style= width: "100%" value= value.settings?.min onChange= (v) => updateSettings( min: v ) /> <
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- " : "", as any, , ) const validateBeforeSubmit = () => if (!name.trim()) messageApi.error("Name is required") return false if (targetMode === "deviceType") if (!generator.deviceType?.trim()) messageApi.error("Please select a device type") return false
- C:/autoconnecto/backend/src/documentation/extractors/rulechain-behavior-extractor.service.ts
- ms.push( id, text, confidence: "high", evidence, ) addConstraint( "name-required", "Name is required before saving.", this.findEvidenceInFiles(files, [ filePathIncludes: ["RuleChainEditorPage", "rulechain", "rule-chain"], regexes: [/required/i,
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- nst hasAnyContent = formFields.length > 0 || !!previewFlow?.steps?.length || this.hasConstraintText(manifest, "Name is required before saving.") || this.hasConstraintText(manifest, "At least one device must be selected.") || this.hasConstraintText(manifest, "A
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- fig, type RuleChainProtocol, type RuleChainStatus, from "../types/ruleChain.types" const Title, Text = Typography type GeneratorTargetMode = "single" | "multiple" | "deviceType" function getErrorMessag
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- = "form" | "same_payload_for_all" | "per_device_randomized" id: string key: string dataType: GeneratorDataType enabled: boolean mode: s
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- ngth || this.hasConstraintText(manifest, "Name is required before saving.") || this.hasConstraintText(manifest, "At least one device must be selected.") || this.hasConstraintText(manifest, "At least one key must be configured.") || this.hasConstraintText( mani
- c:/autoconnecto/frontend/src/features/rule-chains/components/GeneratorKeyCard.tsx
- Space, Switch, from "antd" GeneratorDataType, GeneratorKeyConfig, from "../types/ruleChain.types" const dataTypeOp
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainEditorPage.tsx
- leChain, pauseRuleChain, previewRuleChain, startRuleChain, updateRuleChain, from "../../../api/ruleChains" createDefaultGeneratorKey, createDefaultRuleChainConfig, type GeneratorKeyConfig,
- c:/autoconnecto/frontend/src/features/rule-chains/pages/RuleChainsPage.tsx
- y" onClick= () => navigate("/rule-chains/new") > + New Rule Chain <Table rowKey="id" dataSource= items loading= loading pagination= pageSize: 10 > <Table.Column title="Type" dataIndex="type"
- c:/autoconnecto/frontend/src/features/rule-chains/types/ruleChain.types.ts
- _payload_for_all" | "per_device_randomized" protocol: RuleChainProtoc
- C:/autoconnecto/backend/src/documentation/renderers/rulechain-multipage.renderer.ts
- | this.hasConstraintText(manifest, "At least one device must be selected.") || this.hasConstraintText(manifest, "At least one key must be configured.") || this.hasConstraintText( manifest, "Rule chain must be saved before it can be started." ) if (!hasAnyConte
