@iniesta8888/agent-live 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CODE_OF_CONDUCT.md +7 -0
  2. package/CONTRIBUTING.md +56 -0
  3. package/LICENSE +21 -0
  4. package/README.md +92 -0
  5. package/SECURITY.md +13 -0
  6. package/dist/adapter-sdk/index.d.ts +45 -0
  7. package/dist/adapter-sdk/index.d.ts.map +1 -0
  8. package/dist/adapter-sdk/index.js +106 -0
  9. package/dist/adapter-sdk/index.js.map +1 -0
  10. package/dist/content/compiler.d.ts +31 -0
  11. package/dist/content/compiler.d.ts.map +1 -0
  12. package/dist/content/compiler.js +218 -0
  13. package/dist/content/compiler.js.map +1 -0
  14. package/dist/content/graph-validator.d.ts +56 -0
  15. package/dist/content/graph-validator.d.ts.map +1 -0
  16. package/dist/content/graph-validator.js +226 -0
  17. package/dist/content/graph-validator.js.map +1 -0
  18. package/dist/content/library.d.ts +4 -0
  19. package/dist/content/library.d.ts.map +1 -0
  20. package/dist/content/library.js +45 -0
  21. package/dist/content/library.js.map +1 -0
  22. package/dist/content/registry.d.ts +34 -0
  23. package/dist/content/registry.d.ts.map +1 -0
  24. package/dist/content/registry.js +130 -0
  25. package/dist/content/registry.js.map +1 -0
  26. package/dist/content/runtime-content.d.ts +63 -0
  27. package/dist/content/runtime-content.d.ts.map +1 -0
  28. package/dist/content/runtime-content.js +78 -0
  29. package/dist/content/runtime-content.js.map +1 -0
  30. package/dist/content/schema.d.ts +142 -0
  31. package/dist/content/schema.d.ts.map +1 -0
  32. package/dist/content/schema.js +280 -0
  33. package/dist/content/schema.js.map +1 -0
  34. package/dist/content/validator.d.ts +35 -0
  35. package/dist/content/validator.d.ts.map +1 -0
  36. package/dist/content/validator.js +205 -0
  37. package/dist/content/validator.js.map +1 -0
  38. package/dist/core/agents.d.ts +56 -0
  39. package/dist/core/agents.d.ts.map +1 -0
  40. package/dist/core/agents.js +148 -0
  41. package/dist/core/agents.js.map +1 -0
  42. package/dist/core/limits.d.ts +15 -0
  43. package/dist/core/limits.d.ts.map +1 -0
  44. package/dist/core/limits.js +16 -0
  45. package/dist/core/limits.js.map +1 -0
  46. package/dist/core/mapping.d.ts +17 -0
  47. package/dist/core/mapping.d.ts.map +1 -0
  48. package/dist/core/mapping.js +94 -0
  49. package/dist/core/mapping.js.map +1 -0
  50. package/dist/core/protocol.d.ts +105 -0
  51. package/dist/core/protocol.d.ts.map +1 -0
  52. package/dist/core/protocol.js +6 -0
  53. package/dist/core/protocol.js.map +1 -0
  54. package/dist/core/state.d.ts +49 -0
  55. package/dist/core/state.d.ts.map +1 -0
  56. package/dist/core/state.js +216 -0
  57. package/dist/core/state.js.map +1 -0
  58. package/dist/creator/commands.d.ts +19 -0
  59. package/dist/creator/commands.d.ts.map +1 -0
  60. package/dist/creator/commands.js +44 -0
  61. package/dist/creator/commands.js.map +1 -0
  62. package/dist/creator/mode.d.ts +10 -0
  63. package/dist/creator/mode.d.ts.map +1 -0
  64. package/dist/creator/mode.js +23 -0
  65. package/dist/creator/mode.js.map +1 -0
  66. package/dist/creator/service.d.ts +199 -0
  67. package/dist/creator/service.d.ts.map +1 -0
  68. package/dist/creator/service.js +159 -0
  69. package/dist/creator/service.js.map +1 -0
  70. package/dist/index.d.ts +14 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +10 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/runtime/agent-live-runtime.d.ts +17 -0
  75. package/dist/runtime/agent-live-runtime.d.ts.map +1 -0
  76. package/dist/runtime/agent-live-runtime.js +50 -0
  77. package/dist/runtime/agent-live-runtime.js.map +1 -0
  78. package/dist/runtime/content-service.d.ts +75 -0
  79. package/dist/runtime/content-service.d.ts.map +1 -0
  80. package/dist/runtime/content-service.js +60 -0
  81. package/dist/runtime/content-service.js.map +1 -0
  82. package/dist/runtime/resource-guard.d.ts +17 -0
  83. package/dist/runtime/resource-guard.d.ts.map +1 -0
  84. package/dist/runtime/resource-guard.js +54 -0
  85. package/dist/runtime/resource-guard.js.map +1 -0
  86. package/dist/runtime/server.d.ts +39 -0
  87. package/dist/runtime/server.d.ts.map +1 -0
  88. package/dist/runtime/server.js +286 -0
  89. package/dist/runtime/server.js.map +1 -0
  90. package/dist/web/app.d.ts +1 -0
  91. package/dist/web/app.js +1317 -0
  92. package/dist/web/index.html +45 -0
  93. package/dist/web/office.js +350 -0
  94. package/dist/web/sprites.js +185 -0
  95. package/dist/web/style.css +288 -0
  96. package/dist/web/v2/bootstrap.js +276 -0
  97. package/dist/web/v2/content/README.md +17 -0
  98. package/dist/web/v2/content/agent-skins/studio-team.json +33 -0
  99. package/dist/web/v2/content/agent-skins/tiny-developers.json +33 -0
  100. package/dist/web/v2/content/atmospheres/default.json +13 -0
  101. package/dist/web/v2/content/atmospheres/rainy-night.json +37 -0
  102. package/dist/web/v2/content/catalog.json +14 -0
  103. package/dist/web/v2/content/component-library/activity-implementations.json +873 -0
  104. package/dist/web/v2/content/component-library/activity-recipes.json +25 -0
  105. package/dist/web/v2/content/component-library/agent-profile-templates.json +18 -0
  106. package/dist/web/v2/content/component-library/catalog.json +38 -0
  107. package/dist/web/v2/content/component-library/npc-templates.json +42 -0
  108. package/dist/web/v2/content/component-library/props.json +41 -0
  109. package/dist/web/v2/content/environments/local-office.json +31 -0
  110. package/dist/web/v2/content/environments/rainy-night.json +28 -0
  111. package/dist/web/v2/content/environments/static-office.json +27 -0
  112. package/dist/web/v2/content/layouts/boardroom-office.json +122 -0
  113. package/dist/web/v2/content/layouts/demo-office.json +88 -0
  114. package/dist/web/v2/content/layouts/lively-office.json +96 -0
  115. package/dist/web/v2/content/layouts/old-school-office.json +154 -0
  116. package/dist/web/v2/content/layouts/tech-open-office.json +132 -0
  117. package/dist/web/v2/content/life-activities/boardroom-routines.json +67 -0
  118. package/dist/web/v2/content/life-activities/none.json +10 -0
  119. package/dist/web/v2/content/life-activities/office-basics.json +39 -0
  120. package/dist/web/v2/content/life-activities/old-school-routines.json +74 -0
  121. package/dist/web/v2/content/life-activities/tech-office-routines.json +148 -0
  122. package/dist/web/v2/content/npcs/boardroom-staff.json +54 -0
  123. package/dist/web/v2/content/npcs/none.json +10 -0
  124. package/dist/web/v2/content/npcs/office-staff.json +25 -0
  125. package/dist/web/v2/content/npcs/old-school-staff.json +39 -0
  126. package/dist/web/v2/content/npcs/tech-office-staff.json +40 -0
  127. package/dist/web/v2/content/official-offices/boardroom-office.json +25 -0
  128. package/dist/web/v2/content/official-offices/old-school-office.json +25 -0
  129. package/dist/web/v2/content/official-offices/tech-open-office.json +25 -0
  130. package/dist/web/v2/content/presets/boardroom-office.json +21 -0
  131. package/dist/web/v2/content/presets/cozy-studio.json +19 -0
  132. package/dist/web/v2/content/presets/demo-office.json +19 -0
  133. package/dist/web/v2/content/presets/lively-office.json +19 -0
  134. package/dist/web/v2/content/presets/night-shift.json +19 -0
  135. package/dist/web/v2/content/presets/old-school-office.json +20 -0
  136. package/dist/web/v2/content/presets/refined-demo.json +20 -0
  137. package/dist/web/v2/content/presets/tech-open-office.json +21 -0
  138. package/dist/web/v2/content/props/default-office.json +23 -0
  139. package/dist/web/v2/content/props/extended-office.json +39 -0
  140. package/dist/web/v2/content/props/tech-office.json +28 -0
  141. package/dist/web/v2/content/styles/pixel-classic.json +160 -0
  142. package/dist/web/v2/content/styles/warm-studio.json +150 -0
  143. package/dist/web/v2/environment-runtime.d.ts +1 -0
  144. package/dist/web/v2/environment-runtime.js +138 -0
  145. package/dist/web/v2/graph-validator.d.ts +55 -0
  146. package/dist/web/v2/graph-validator.js +225 -0
  147. package/dist/web/v2/i18n.js +54 -0
  148. package/dist/web/v2/locales/en.json +209 -0
  149. package/dist/web/v2/locales/zh-CN.json +52 -0
  150. package/dist/web/v2/office-engine.d.ts +1 -0
  151. package/dist/web/v2/office-engine.js +145 -0
  152. package/dist/web/v2/office-renderer.d.ts +1 -0
  153. package/dist/web/v2/office-renderer.js +843 -0
  154. package/dist/web/v2/parity.html +10 -0
  155. package/dist/web/v2/parity.js +82 -0
  156. package/dist/web/v2/sprite-renderer.d.ts +1 -0
  157. package/dist/web/v2/sprite-renderer.js +242 -0
  158. package/dist/web/v2/static-content.js +48 -0
  159. package/dist/web/v2/style.css +140 -0
  160. package/dist/web/v2.html +68 -0
  161. package/docs/ADAPTER-DEVELOPMENT.md +328 -0
  162. package/docs/ADAPTER-SDK.md +109 -0
  163. package/docs/ARCHITECTURE.md +223 -0
  164. package/docs/COMPONENT-LIBRARY.md +212 -0
  165. package/docs/CUSTOMIZATION.md +163 -0
  166. package/docs/DEVELOPER.md +186 -0
  167. package/docs/DSH-ADAPTER-DESIGN.md +173 -0
  168. package/docs/OFFICE-THEMES.md +516 -0
  169. package/docs/PRESET-CONFIG.md +460 -0
  170. package/docs/RELEASE-CHECK.md +23 -0
  171. package/docs/TECHNICAL.md +515 -0
  172. package/docs/USING-CODEX.md +24 -0
  173. package/docs/USING-DSH.md +44 -0
  174. package/docs/USING-PI.md +50 -0
  175. package/docs/VISION.md +146 -0
  176. package/examples/adapter/local-office.mjs +52 -0
  177. package/package.json +89 -0
  178. package/skills/agent-live-adapter-builder/SKILL.md +30 -0
  179. package/skills/agent-live-adapter-builder/agents/openai.yaml +4 -0
  180. package/skills/agent-live-adapter-builder/references/investigation.md +9 -0
  181. package/skills/agent-live-adapter-builder/references/review.md +7 -0
  182. package/skills/agent-live-adapter-builder/scripts/create-adapter.mjs +26 -0
@@ -0,0 +1,25 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "activity-recipe-library",
4
+ "id": "builtin/activity-recipe-library",
5
+ "version": "1.0.0",
6
+ "contract": "single-office-v1",
7
+ "entries": [
8
+ { "id": "builtin/boss-briefing", "name": "Boss briefing", "description": "A boss presents priorities to the room.", "tags": ["meeting", "leadership"], "participantKinds": ["npc"], "participantRoles": ["boss"], "capabilities": ["plan", "communicate"], "interruptible": false },
9
+ { "id": "builtin/boss-plan-round", "name": "Boss planning round", "description": "A boss checks the planning board and returns to the executive desk.", "tags": ["leadership", "planning", "office-life"], "participantKinds": ["npc"], "participantRoles": ["boss"], "capabilities": ["plan"], "interruptible": false },
10
+ { "id": "builtin/boss-water-break", "name": "Boss water break", "description": "A boss takes a short water break and returns to the executive desk.", "tags": ["leadership", "break", "water"], "participantKinds": ["npc"], "participantRoles": ["boss"], "capabilities": ["water"], "interruptible": false },
11
+ { "id": "builtin/boss-cheer-round", "name": "Boss encouragement round", "description": "A boss walks through the work area and encourages the team.", "tags": ["leadership", "social", "office-life"], "participantKinds": ["npc"], "participantRoles": ["boss"], "capabilities": ["communicate"], "interruptible": false },
12
+ { "id": "builtin/briefing-support", "name": "Briefing support", "description": "A secretary prepares meeting materials.", "tags": ["meeting", "administration"], "participantKinds": ["npc"], "participantRoles": ["secretary"], "capabilities": ["research"], "interruptible": false },
13
+ { "id": "builtin/cleaning-round", "name": "Cleaning round", "description": "A cleaner visits configured cleaning stops.", "tags": ["service", "cleaning"], "participantKinds": ["npc"], "participantRoles": ["cleaner"], "capabilities": [], "interruptible": false },
14
+ { "id": "builtin/colleague-chat", "name": "Colleague chat", "description": "Two idle people, including background colleagues, have an informal conversation.", "tags": ["social", "break"], "participantKinds": ["agent", "npc"], "minimumAgents": 2, "capabilities": ["collaborate"], "interruptible": true },
15
+ { "id": "builtin/corridor-chat", "name": "Corridor chat", "description": "Two idle agents chat in a corridor.", "tags": ["social", "break", "corridor"], "participantKinds": ["agent"], "minimumAgents": 2, "capabilities": ["collaborate"], "interruptible": true },
16
+ { "id": "builtin/facility-round", "name": "Facility round", "description": "A custodian checks shared office facilities.", "tags": ["service", "maintenance"], "participantKinds": ["npc"], "participantRoles": ["cleaner"], "capabilities": [], "interruptible": false },
17
+ { "id": "builtin/get-water", "name": "Get water", "description": "An idle agent or background colleague visits a water facility.", "tags": ["break", "water"], "participantKinds": ["agent", "npc"], "participantRoles": ["colleague"], "capabilities": ["water"], "interruptible": true },
18
+ { "id": "builtin/outside-walk", "name": "Outside walk", "description": "Two idle people, including background colleagues, leave for a short walk.", "tags": ["social", "break", "outside"], "participantKinds": ["agent", "npc"], "participantRoles": ["colleague"], "minimumAgents": 2, "capabilities": [], "interruptible": true },
19
+ { "id": "builtin/paperwork-round", "name": "Paperwork round", "description": "A receptionist processes calls, copies and filing.", "tags": ["service", "paperwork"], "participantKinds": ["npc"], "participantRoles": ["receptionist"], "capabilities": ["research", "communicate"], "interruptible": false },
20
+ { "id": "builtin/plant-watering", "name": "Plant watering", "description": "A cleaner waters the office plants and checks their condition.", "tags": ["service", "plants", "office-life"], "participantKinds": ["npc"], "participantRoles": ["cleaner"], "capabilities": [], "interruptible": false },
21
+ { "id": "builtin/phone-break", "name": "Phone break", "description": "An idle coding agent or background colleague takes a short phone break.", "tags": ["break", "phone"], "participantKinds": ["agent", "npc"], "participantRoles": ["colleague"], "capabilities": [], "interruptible": true },
22
+ { "id": "builtin/refreshment-round", "name": "Refreshment round", "description": "An attendant prepares and serves refreshments.", "tags": ["service", "meeting", "coffee"], "participantKinds": ["npc"], "participantRoles": ["attendant"], "capabilities": ["coffee"], "interruptible": false },
23
+ { "id": "builtin/restroom-break", "name": "Restroom break", "description": "An idle agent or background colleague takes a restroom break.", "tags": ["break", "restroom"], "participantKinds": ["agent", "npc"], "participantRoles": ["colleague"], "capabilities": [], "interruptible": true }
24
+ ]
25
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "agent-profile-template-library",
4
+ "id": "builtin/agent-profile-template-library",
5
+ "version": "1.0.0",
6
+ "contract": "single-office-v1",
7
+ "defaultTemplate": "builtin/host-agent",
8
+ "entries": [
9
+ {
10
+ "id": "builtin/host-agent",
11
+ "name": "Host agent",
12
+ "description": "Keeps the coding agent identity reported by Pi or Codex while allowing local display overrides.",
13
+ "tags": ["agent", "host", "identity"],
14
+ "defaultAppearance": {},
15
+ "allowedOverrides": ["name", "title", "appearance"]
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "component-library",
4
+ "id": "builtin/agent-live-components",
5
+ "version": "1.0.0",
6
+ "contract": "single-office-v1",
7
+ "registries": {
8
+ "props": "props.json",
9
+ "npcTemplates": "npc-templates.json",
10
+ "agentProfileTemplates": "agent-profile-templates.json",
11
+ "activityRecipes": "activity-recipes.json",
12
+ "activityImplementations": "activity-implementations.json"
13
+ },
14
+ "styles": [
15
+ { "id": "builtin/pixel-classic", "name": "Pixel Classic", "description": "Crisp, high-contrast pixel office art.", "tags": ["pixel", "modern", "high-contrast"] },
16
+ { "id": "builtin/warm-studio", "name": "Warm Studio", "description": "Warm wood and muted-color pixel office art.", "tags": ["pixel", "warm", "traditional"] }
17
+ ],
18
+ "layouts": [
19
+ { "id": "builtin/boardroom-office", "name": "Boardroom Office", "description": "A long-table meeting room led from the front.", "tags": ["meeting", "formal", "long-table"] },
20
+ { "id": "builtin/demo-office", "name": "Demo Office", "description": "The preserved original single-room demo layout.", "tags": ["office", "baseline", "compact"] },
21
+ { "id": "builtin/lively-office", "name": "Lively Office", "description": "A compact office with shared break facilities.", "tags": ["office", "social", "compact"] },
22
+ { "id": "builtin/old-school-office", "name": "Old-school Office", "description": "A compartmentalized traditional office with administration and service areas.", "tags": ["office", "traditional", "cubicle"] },
23
+ { "id": "builtin/tech-open-office", "name": "Tech Open Office", "description": "An informal open office for a modern technology team.", "tags": ["office", "technology", "open-plan"] }
24
+ ],
25
+ "agentSkins": [
26
+ { "id": "builtin/studio-team", "name": "Studio Team", "description": "A warm-toned pixel character palette.", "tags": ["pixel", "warm", "character"] },
27
+ { "id": "builtin/tiny-developers", "name": "Tiny Developers", "description": "The default colorful coding-agent character palette.", "tags": ["pixel", "technology", "character"] }
28
+ ],
29
+ "atmospheres": [
30
+ { "id": "builtin/default-atmosphere", "name": "Default Atmosphere", "description": "Uses the selected style without additional ambience.", "tags": ["neutral", "day-night"] },
31
+ { "id": "builtin/rainy-night", "name": "Rainy Night", "description": "Adds rainy windows and a darker nighttime mood.", "tags": ["rain", "night", "ambient"] }
32
+ ],
33
+ "environments": [
34
+ { "id": "builtin/local-office-environment", "name": "Local Office Time", "description": "Follows the user's local clock and accepts host weather input.", "tags": ["local-time", "dynamic", "weather"] },
35
+ { "id": "builtin/rainy-night-environment", "name": "Fixed Rainy Night", "description": "A fixed nighttime environment with rain enabled.", "tags": ["fixed-time", "rain", "night"] },
36
+ { "id": "builtin/static-office-environment", "name": "Static Office Time", "description": "A deterministic fixed-time environment for demos and tests.", "tags": ["fixed-time", "testing"] }
37
+ ]
38
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "npc-template-library",
4
+ "id": "builtin/npc-template-library",
5
+ "version": "1.0.0",
6
+ "contract": "single-office-v1",
7
+ "defaultTemplate": "builtin/colleague",
8
+ "genderValues": ["female", "male", "nonbinary", "unspecified"],
9
+ "defaultInstancePolicy": {
10
+ "selection": "seeded-random-profile",
11
+ "seedFrom": "instance-id",
12
+ "persistResolvedProfile": true
13
+ },
14
+ "entries": [
15
+ { "id": "builtin/boss", "name": "Boss", "description": "Office leader or meeting host.", "tags": ["leadership", "meeting"], "role": "boss", "defaultTitle": "Boss", "defaultGender": "unspecified", "defaultPose": "sit", "defaultAppearance": { "skin": "#d5a47c", "hair": "#2b3039", "shirt": "#465d80", "trim": "#2d405e", "badge": "#ffcc4d" }, "defaultActivities": ["builtin/boss-cheer-round"], "allowedActivities": ["builtin/boss-briefing", "builtin/boss-plan-round", "builtin/boss-water-break", "builtin/boss-cheer-round"], "allowedOverrides": ["name", "title", "gender", "appearance", "spawn", "shift", "pose"] },
16
+ { "id": "builtin/cleaner", "name": "Cleaner", "description": "Office cleaner or general custodian.", "tags": ["service", "cleaning"], "role": "cleaner", "defaultTitle": "Cleaner", "defaultGender": "unspecified", "defaultPose": "stand", "defaultAppearance": { "skin": "#d69f70", "hair": "#30333b", "shirt": "#4f9d88", "trim": "#347264", "badge": "#b7eadb" }, "defaultActivities": ["builtin/plant-watering"], "allowedActivities": ["builtin/cleaning-round", "builtin/facility-round", "builtin/plant-watering"], "allowedOverrides": ["name", "title", "gender", "appearance", "spawn", "shift", "pose"] },
17
+ { "id": "builtin/receptionist", "name": "Receptionist", "description": "Front-desk receptionist and office coordinator.", "tags": ["service", "reception"], "role": "receptionist", "defaultTitle": "Receptionist", "defaultGender": "unspecified", "defaultPose": "stand", "defaultAppearance": { "skin": "#d69f70", "hair": "#3d302a", "shirt": "#718b78", "trim": "#526a59", "badge": "#d7ae5b" }, "allowedActivities": ["builtin/paperwork-round"], "allowedOverrides": ["name", "title", "gender", "appearance", "spawn", "shift", "pose"] },
18
+ { "id": "builtin/secretary", "name": "Secretary", "description": "Administrative assistant supporting meetings and paperwork.", "tags": ["service", "administration"], "role": "secretary", "defaultTitle": "Secretary", "defaultGender": "unspecified", "defaultPose": "stand", "defaultAppearance": { "skin": "#e8b98f", "hair": "#30333b", "shirt": "#568c83", "trim": "#37645e", "badge": "#b9dfd5" }, "allowedActivities": ["builtin/briefing-support"], "allowedOverrides": ["name", "title", "gender", "appearance", "spawn", "shift", "pose"] },
19
+ { "id": "builtin/attendant", "name": "Meeting attendant", "description": "Meeting-room service and refreshment attendant.", "tags": ["service", "meeting"], "role": "attendant", "defaultTitle": "Meeting attendant", "defaultGender": "unspecified", "defaultPose": "stand", "defaultAppearance": { "skin": "#d69f70", "hair": "#4a4038", "shirt": "#687779", "trim": "#485658", "badge": "#d7b261" }, "allowedActivities": ["builtin/refreshment-round"], "allowedOverrides": ["name", "title", "gender", "appearance", "spawn", "shift", "pose"] },
20
+ {
21
+ "id": "builtin/colleague",
22
+ "name": "Colleague",
23
+ "description": "The default background NPC identity. It has no coding-agent identity, task state, token usage or tool events.",
24
+ "tags": ["coworker", "background", "default"],
25
+ "role": "colleague",
26
+ "defaultTitle": "Colleague",
27
+ "defaultGender": "unspecified",
28
+ "defaultPose": "sit",
29
+ "defaultAppearance": { "skin": "#e8b98f", "hair": "#40352f", "shirt": "#5b89c2", "trim": "#3c6090", "badge": "#9fc1e8" },
30
+ "defaultProfiles": [
31
+ { "id": "alex", "name": "Alex", "gender": "unspecified", "appearance": { "skin": "#f0cba3", "hair": "#2f2418", "shirt": "#4a78c8", "trim": "#33569a", "badge": "#8fb8ff" } },
32
+ { "id": "jordan", "name": "Jordan", "gender": "male", "appearance": { "skin": "#d69f70", "hair": "#1f2430", "shirt": "#4f9d69", "trim": "#37714b", "badge": "#8fd6a6" } },
33
+ { "id": "robin", "name": "Robin", "gender": "female", "appearance": { "skin": "#e8b98f", "hair": "#4a2f22", "shirt": "#b8574f", "trim": "#8d3f38", "badge": "#ef9a91" } },
34
+ { "id": "casey", "name": "Casey", "gender": "nonbinary", "appearance": { "skin": "#b87a4f", "hair": "#3b3b45", "shirt": "#7b57b8", "trim": "#5b3d8d", "badge": "#b99ae8" } }
35
+ ],
36
+ "allowedBehaviors": ["work", "restroom", "water", "shift-departure"],
37
+ "defaultActivities": ["builtin/colleague-chat", "builtin/outside-walk", "builtin/phone-break", "builtin/restroom-break"],
38
+ "allowedActivities": ["builtin/colleague-chat", "builtin/get-water", "builtin/outside-walk", "builtin/phone-break", "builtin/restroom-break"],
39
+ "allowedOverrides": ["name", "title", "gender", "appearance", "spawn", "shift", "pose"]
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "prop-library",
4
+ "id": "builtin/prop-library",
5
+ "version": "1.0.0",
6
+ "contract": "single-office-v1",
7
+ "entries": [
8
+ { "id": "builtin/archive-cabinet", "name": "Archive cabinet", "description": "Cabinet used for research and archive work.", "tags": ["storage", "research", "floor"], "size": { "width": 44, "height": 32 }, "capabilities": ["research"], "renderer": "archive-cabinet" },
9
+ { "id": "builtin/av-console", "name": "AV console", "description": "Meeting-room audiovisual control console.", "tags": ["meeting", "compute", "floor"], "size": { "width": 60, "height": 45 }, "capabilities": ["compute", "communicate"], "renderer": "av-console" },
10
+ { "id": "builtin/boardroom-table", "name": "Boardroom table", "description": "Long shared table for collaborative work.", "tags": ["meeting", "work", "floor"], "size": { "width": 204, "height": 125 }, "capabilities": ["create", "collaborate"], "renderer": "boardroom-table" },
11
+ { "id": "builtin/boss-desk", "name": "Boss desk", "description": "Compact desk for an office leader.", "tags": ["executive", "work", "floor"], "size": { "width": 36, "height": 16 }, "capabilities": [], "renderer": "boss-desk" },
12
+ { "id": "builtin/coat-rack", "name": "Coat rack", "description": "Freestanding rack for coats and bags.", "tags": ["service", "decoration", "floor"], "size": { "width": 13, "height": 29 }, "capabilities": [], "renderer": "coat-rack" },
13
+ { "id": "builtin/coffee-machine", "name": "Coffee machine", "description": "Office drink station used for coffee breaks.", "tags": ["service", "coffee", "floor"], "size": { "width": 26, "height": 22 }, "capabilities": ["coffee"], "renderer": "coffee-machine" },
14
+ { "id": "builtin/copy-station", "name": "Copy station", "description": "Printer and copier used for document work.", "tags": ["service", "research", "floor"], "size": { "width": 26, "height": 38 }, "capabilities": ["research"], "renderer": "copy-station" },
15
+ { "id": "builtin/cubicle-cell", "name": "Cubicle", "description": "Partitioned individual work cell.", "tags": ["work", "partition", "floor"], "size": { "width": 56, "height": 36 }, "capabilities": [], "renderer": "cubicle-cell" },
16
+ { "id": "builtin/door", "name": "Door", "description": "Standard office entrance or interior door.", "tags": ["architecture", "entry", "wall"], "size": { "width": 36, "height": 30 }, "capabilities": ["entry"], "renderer": "door" },
17
+ { "id": "builtin/dumbbell", "name": "Dumbbell", "description": "Small recreation-area exercise prop.", "tags": ["recreation", "decoration", "floor"], "size": { "width": 16, "height": 7 }, "capabilities": [], "renderer": "dumbbell" },
18
+ { "id": "builtin/executive-desk", "name": "Executive desk", "description": "Large desk supporting planning and communication.", "tags": ["executive", "work", "floor"], "size": { "width": 69, "height": 18 }, "capabilities": ["create", "plan", "communicate"], "renderer": "executive-desk" },
19
+ { "id": "builtin/floor-fan", "name": "Floor fan", "description": "Old-school freestanding office fan.", "tags": ["utility", "decoration", "floor"], "size": { "width": 18, "height": 27 }, "capabilities": [], "renderer": "floor-fan" },
20
+ { "id": "builtin/lounge-sofa", "name": "Lounge sofa", "description": "Shared sofa for breaks and informal conversations.", "tags": ["lounge", "collaboration", "floor"], "size": { "width": 112, "height": 26 }, "capabilities": ["collaborate"], "renderer": "lounge-sofa" },
21
+ { "id": "builtin/meeting-table", "name": "Meeting table", "description": "Small table for team collaboration.", "tags": ["meeting", "collaboration", "floor"], "size": { "width": 112, "height": 26 }, "capabilities": ["collaborate"], "renderer": "meeting-table" },
22
+ { "id": "builtin/notice-board", "name": "Notice board", "description": "Wall board for office notices.", "tags": ["information", "decoration", "wall"], "size": { "width": 55, "height": 23 }, "capabilities": [], "renderer": "notice-board" },
23
+ { "id": "builtin/office-clock", "name": "Office clock", "description": "Wall clock synchronized with the office environment.", "tags": ["time", "decoration", "wall"], "size": { "width": 14, "height": 14 }, "capabilities": [], "renderer": "office-clock" },
24
+ { "id": "builtin/phone-table", "name": "Phone table", "description": "Small telephone station for communication work.", "tags": ["communication", "work", "floor"], "size": { "width": 32, "height": 14 }, "capabilities": ["communicate"], "renderer": "phone-table" },
25
+ { "id": "builtin/plant", "name": "Plant", "description": "Indoor decorative plant.", "tags": ["decoration", "nature", "floor"], "size": { "width": 12, "height": 21 }, "capabilities": [], "renderer": "plant" },
26
+ { "id": "builtin/presentation-screen", "name": "Presentation screen", "description": "Large display for planning and presentations.", "tags": ["meeting", "information", "wall"], "size": { "width": 162, "height": 43 }, "capabilities": ["plan", "communicate"], "renderer": "presentation-screen" },
27
+ { "id": "builtin/reception-desk", "name": "Reception desk", "description": "Front-desk station for office communication.", "tags": ["reception", "communication", "floor"], "size": { "width": 64, "height": 20 }, "capabilities": ["communicate"], "renderer": "reception-desk" },
28
+ { "id": "builtin/restroom-door", "name": "Restroom door", "description": "Door marking the office restroom entrance.", "tags": ["service", "restroom", "wall"], "size": { "width": 28, "height": 30 }, "capabilities": ["restroom"], "renderer": "restroom-door" },
29
+ { "id": "builtin/rug", "name": "Rug", "description": "Large decorative floor rug.", "tags": ["decoration", "floor"], "size": { "width": 146, "height": 42 }, "capabilities": [], "renderer": "rug" },
30
+ { "id": "builtin/server-rack", "name": "Server rack", "description": "Compute infrastructure used for server work.", "tags": ["compute", "infrastructure", "floor"], "size": { "width": 48, "height": 32 }, "capabilities": ["compute"], "renderer": "server-rack" },
31
+ { "id": "builtin/service-cart", "name": "Service cart", "description": "Mobile cart for cleaning and office service.", "tags": ["service", "cleaning", "floor"], "size": { "width": 50, "height": 30 }, "capabilities": ["research"], "renderer": "service-cart" },
32
+ { "id": "builtin/sideboard", "name": "Sideboard", "description": "Meeting-room cabinet used for refreshments.", "tags": ["meeting", "coffee", "floor"], "size": { "width": 55, "height": 18 }, "capabilities": ["coffee"], "renderer": "sideboard" },
33
+ { "id": "builtin/vending-machine", "name": "Vending machine", "description": "Self-service office refreshment machine.", "tags": ["service", "refreshment", "floor"], "size": { "width": 17, "height": 28 }, "capabilities": [], "renderer": "vending-machine" },
34
+ { "id": "builtin/venetian-window", "name": "Venetian window", "description": "Window with old-school office blinds.", "tags": ["architecture", "window", "wall"], "size": { "width": 55, "height": 23 }, "capabilities": [], "renderer": "venetian-window" },
35
+ { "id": "builtin/wall-calendar", "name": "Wall calendar", "description": "Traditional office wall calendar.", "tags": ["decoration", "time", "wall"], "size": { "width": 16, "height": 22 }, "capabilities": [], "renderer": "wall-calendar" },
36
+ { "id": "builtin/water-cooler", "name": "Water cooler", "description": "Floor-standing facility used by water-break activities.", "tags": ["service", "water", "floor"], "size": { "width": 16, "height": 26 }, "capabilities": ["water"], "renderer": "water-cooler" },
37
+ { "id": "builtin/whiteboard", "name": "Whiteboard", "description": "Planning surface used for reasoning and review.", "tags": ["planning", "work", "wall"], "size": { "width": 72, "height": 26 }, "capabilities": ["plan"], "renderer": "whiteboard" },
38
+ { "id": "builtin/window", "name": "Window", "description": "Office window showing the current environment.", "tags": ["architecture", "window", "wall"], "size": { "width": 44, "height": 22 }, "capabilities": [], "renderer": "window" },
39
+ { "id": "builtin/workstation", "name": "Workstation", "description": "Primary desk and computer for agent work.", "tags": ["work", "desk", "floor"], "size": { "width": 48, "height": 16 }, "capabilities": ["create", "research", "compute", "communicate"], "renderer": "workstation" }
40
+ ]
41
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "environment",
4
+ "id": "builtin/local-office-environment",
5
+ "name": "本地真实环境",
6
+ "version": "1.0.0",
7
+ "engine": { "min": "0.2.0" },
8
+ "render": { "dynamicTime": true, "dynamicWeather": true },
9
+ "clock": {
10
+ "mode": "local",
11
+ "phases": [
12
+ { "id": "morning", "start": "06:00" },
13
+ { "id": "noon", "start": "11:00" },
14
+ { "id": "evening", "start": "17:00" },
15
+ { "id": "night", "start": "20:00" }
16
+ ],
17
+ "preview": { "enabled": true, "startTime": "06:00", "durationMs": 24000 }
18
+ },
19
+ "weather": {
20
+ "source": "runtime",
21
+ "fallback": "clear",
22
+ "allowedConditions": ["clear", "cloudy", "rain", "snow"]
23
+ },
24
+ "lighting": { "enabled": true, "activePhases": ["evening", "night"] },
25
+ "npcSchedule": {
26
+ "enabled": true,
27
+ "defaultShift": { "start": "06:00", "end": "18:30", "endLatest": "21:30" },
28
+ "roleOverrides": {},
29
+ "labels": { "arrival": "上班啦", "departure": "下班啦" }
30
+ }
31
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "environment",
4
+ "id": "builtin/rainy-night-environment",
5
+ "name": "固定雨夜环境",
6
+ "version": "1.0.0",
7
+ "engine": { "min": "0.2.0" },
8
+ "render": { "dynamicTime": true, "dynamicWeather": true },
9
+ "clock": {
10
+ "mode": "fixed",
11
+ "fixedTime": "22:00",
12
+ "phases": [
13
+ { "id": "morning", "start": "06:00" },
14
+ { "id": "noon", "start": "11:00" },
15
+ { "id": "evening", "start": "17:00" },
16
+ { "id": "night", "start": "20:00" }
17
+ ],
18
+ "preview": { "enabled": false }
19
+ },
20
+ "weather": { "source": "fixed", "condition": "rain", "allowedConditions": ["clear", "cloudy", "rain", "snow"] },
21
+ "lighting": { "enabled": true, "activePhases": ["evening", "night"] },
22
+ "npcSchedule": {
23
+ "enabled": true,
24
+ "defaultShift": { "start": "06:00", "end": "18:30", "endLatest": "21:30" },
25
+ "roleOverrides": {},
26
+ "labels": { "arrival": "上班啦", "departure": "下班啦" }
27
+ }
28
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "environment",
4
+ "id": "builtin/static-office-environment",
5
+ "name": "静态兼容环境",
6
+ "version": "1.0.0",
7
+ "engine": { "min": "0.2.0" },
8
+ "render": { "dynamicTime": false, "dynamicWeather": false },
9
+ "clock": {
10
+ "mode": "local",
11
+ "phases": [
12
+ { "id": "morning", "start": "06:00" },
13
+ { "id": "noon", "start": "11:00" },
14
+ { "id": "evening", "start": "17:00" },
15
+ { "id": "night", "start": "20:00" }
16
+ ],
17
+ "preview": { "enabled": false }
18
+ },
19
+ "weather": { "source": "fixed", "condition": "clear", "allowedConditions": ["clear", "cloudy", "rain", "snow"] },
20
+ "lighting": { "enabled": false, "activePhases": [] },
21
+ "npcSchedule": {
22
+ "enabled": true,
23
+ "defaultShift": { "start": "06:00", "end": "18:30", "endLatest": "21:30" },
24
+ "roleOverrides": {},
25
+ "labels": { "arrival": "上班啦", "departure": "下班啦" }
26
+ }
27
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "layout",
4
+ "id": "builtin/boardroom-office",
5
+ "name": "大会议室长桌办公布局",
6
+ "version": "1.0.0",
7
+ "engine": { "min": "0.2.0" },
8
+ "contract": "single-office-v1",
9
+ "canvas": { "width": 384, "height": 216 },
10
+ "wallHeight": 54,
11
+ "camera": { "mode": "fixed", "fit": "contain", "integerScale": true },
12
+ "zones": [
13
+ { "id": "presentation", "name": "Presentation Front", "x": 82, "y": 54, "width": 220, "height": 30 },
14
+ { "id": "table-left", "name": "Left Work Side", "x": 82, "y": 76, "width": 110, "height": 126 },
15
+ { "id": "table-right", "name": "Right Work Side", "x": 192, "y": 76, "width": 110, "height": 126 },
16
+ { "id": "service-left", "name": "Document & Refreshment Service", "x": 10, "y": 60, "width": 72, "height": 150 },
17
+ { "id": "service-right", "name": "AV & Water Service", "x": 302, "y": 60, "width": 72, "height": 150 },
18
+ { "id": "circulation", "name": "Meeting Room Circulation", "x": 0, "y": 54, "width": 384, "height": 162 }
19
+ ],
20
+ "textSlots": [{"id":"company","name":"Company name / text logo","x":125,"y":11,"width":132,"height":12,"maxLength":24,"defaultText":""},{"id":"notice","name":"Notice","x":125,"y":27,"width":132,"height":12,"maxLength":48,"defaultText":""},{"id":"slogan","name":"Area slogan","x":18,"y":128,"width":52,"height":11,"maxLength":48,"defaultText":""}],
21
+ "placementSlots": [
22
+ {"id":"extra-1","zone":"circulation","x":14,"y":111,"accepts":["plant"],"maxSize":{"width":14,"height":22},"required":false},
23
+ {"id":"extra-2","zone":"circulation","x":362,"y":117,"accepts":["plant"],"maxSize":{"width":14,"height":22},"required":false},
24
+ {"id":"extra-3","zone":"circulation","x":306,"y":121,"accepts":["water-cooler","vending-machine"],"maxSize":{"width":18,"height":28},"required":false},
25
+ { "id": "front-decoration-left", "zone": "presentation", "x": 91, "y": 69, "accepts": ["plant"], "maxSize": { "width": 14, "height": 22 }, "required": false, "occupiedBy": "plant-front-left" },
26
+ { "id": "front-decoration-right", "zone": "presentation", "x": 295, "y": 69, "accepts": ["plant"], "maxSize": { "width": 14, "height": 22 }, "required": false, "occupiedBy": "plant-front-right" },
27
+ { "id": "left-refreshment", "zone": "service-left", "x": 48, "y": 105, "accepts": ["coffee-machine"], "maxSize": { "width": 26, "height": 22 }, "required": false, "occupiedBy": "coffee-main" },
28
+ { "id": "left-service-storage", "zone": "service-left", "x": 18, "y": 161, "accepts": ["service-cart", "sideboard"], "maxSize": { "width": 55, "height": 30 }, "required": false, "occupiedBy": "archive-main" },
29
+ { "id": "right-refreshment", "zone": "service-right", "x": 344, "y": 170, "accepts": ["water-cooler", "vending-machine"], "maxSize": { "width": 18, "height": 28 }, "required": false, "occupiedBy": "water-main" }
30
+ ],
31
+ "navigation": {
32
+ "lanes": [60, 112, 146, 198],
33
+ "connectors": [10, 80, 192, 304, 374],
34
+ "perimeter": { "leftX": 82, "rightX": 302, "topY": 60, "bottomY": 210 }
35
+ },
36
+ "interactions": { "handoff": "seated", "directorNpcRole": "boss" },
37
+ "seats": [
38
+ { "index": 0, "cx": 127, "renderer": "boardroom-seat", "desk": { "x": 145, "y": 88, "width": 15, "height": 10 }, "anchor": { "x": 127, "y": 101, "dir": "right", "lane": 1, "zone": "left" } },
39
+ { "index": 1, "cx": 257, "renderer": "boardroom-seat", "desk": { "x": 224, "y": 88, "width": 15, "height": 10 }, "anchor": { "x": 257, "y": 101, "dir": "left", "lane": 1, "zone": "right" } },
40
+ { "index": 2, "cx": 119, "renderer": "boardroom-seat", "desk": { "x": 141, "y": 112, "width": 15, "height": 10 }, "anchor": { "x": 119, "y": 125, "dir": "right", "lane": 1, "zone": "left" } },
41
+ { "index": 3, "cx": 265, "renderer": "boardroom-seat", "desk": { "x": 228, "y": 112, "width": 15, "height": 10 }, "anchor": { "x": 265, "y": 125, "dir": "left", "lane": 1, "zone": "right" } },
42
+ { "index": 4, "cx": 111, "renderer": "boardroom-seat", "desk": { "x": 137, "y": 138, "width": 15, "height": 10 }, "anchor": { "x": 111, "y": 151, "dir": "right", "lane": 2, "zone": "left" } },
43
+ { "index": 5, "cx": 273, "renderer": "boardroom-seat", "desk": { "x": 232, "y": 138, "width": 15, "height": 10 }, "anchor": { "x": 273, "y": 151, "dir": "left", "lane": 2, "zone": "right" } },
44
+ { "index": 6, "cx": 103, "renderer": "boardroom-seat", "desk": { "x": 133, "y": 164, "width": 15, "height": 10 }, "anchor": { "x": 103, "y": 177, "dir": "right", "lane": 3, "zone": "left" } },
45
+ { "index": 7, "cx": 281, "renderer": "boardroom-seat", "desk": { "x": 236, "y": 164, "width": 15, "height": 10 }, "anchor": { "x": 281, "y": 177, "dir": "left", "lane": 3, "zone": "right" } }
46
+ ],
47
+ "standingAnchors": [
48
+ { "x": 82, "y": 86, "dir": "right", "lane": 1, "zone": "circulation" },
49
+ { "x": 302, "y": 86, "dir": "left", "lane": 1, "zone": "circulation" },
50
+ { "x": 82, "y": 132, "dir": "right", "lane": 2, "zone": "circulation" },
51
+ { "x": 302, "y": 132, "dir": "left", "lane": 2, "zone": "circulation" },
52
+ { "x": 82, "y": 198, "dir": "right", "lane": 3, "zone": "circulation" },
53
+ { "x": 302, "y": 198, "dir": "left", "lane": 3, "zone": "circulation" },
54
+ { "x": 112, "y": 60, "dir": "down", "lane": 0, "zone": "circulation" },
55
+ { "x": 272, "y": 60, "dir": "down", "lane": 0, "zone": "circulation" }
56
+ ],
57
+ "targets": {
58
+ "staff-entry": {"x":10,"y":60,"dir":"right","lane":0,"zone":"top"},
59
+ "archive": { "x": 68, "y": 184, "dir": "left", "lane": 3 },
60
+ "server": { "x": 336, "y": 111, "dir": "up", "lane": 1 },
61
+ "whiteboard": { "x": 50, "y": 116, "dir": "up", "lane": 1 },
62
+ "phone": { "x": 192, "y": 151, "dir": "up", "lane": 2 },
63
+ "coffee": { "x": 68, "y": 148, "dir": "left", "lane": 2 },
64
+ "water": { "x": 352, "y": 198, "dir": "right", "lane": 3 },
65
+ "meetA": { "x": 145, "y": 139, "dir": "right", "lane": 2 },
66
+ "meetB": { "x": 239, "y": 139, "dir": "left", "lane": 2 },
67
+ "entry": { "x": 10, "y": 60, "dir": "right", "lane": 0, "zone": "top" },
68
+ "boss-seat": { "x": 192, "y": 68, "dir": "down", "lane": 0, "zone": "top" },
69
+ "secretary-entry": { "x": 10, "y": 198, "dir": "right", "lane": 3, "zone": "left" },
70
+ "service-entry": { "x": 374, "y": 198, "dir": "left", "lane": 3, "zone": "right" },
71
+ "decision-wall": { "x": 50, "y": 116, "dir": "up", "lane": 1, "zone": "left" },
72
+ "table-service-left": { "x": 82, "y": 151, "dir": "right", "lane": 2, "zone": "left" },
73
+ "table-service-right": { "x": 302, "y": 151, "dir": "left", "lane": 2, "zone": "right" }
74
+ },
75
+ "stations": {
76
+ "research": { "kind": "seat" },
77
+ "create": { "kind": "seat" },
78
+ "compute": { "kind": "seat" },
79
+ "plan": { "kind": "seat" },
80
+ "communicate": { "kind": "seat" },
81
+ "collaborate": { "kind": "seat", "meetingTargets": ["meetA", "meetB"] },
82
+ "coffee": { "kind": "target", "target": "coffee" },
83
+ "water": { "kind": "target", "target": "water" }
84
+ },
85
+ "legacyActions": {
86
+ "type": "create",
87
+ "archive": "research",
88
+ "server": "compute",
89
+ "whiteboard": "plan",
90
+ "phone": "communicate",
91
+ "delegate": "collaborate",
92
+ "coffee": "coffee"
93
+ },
94
+ "furniture": {
95
+ "archive": { "x": 18, "y": 161, "w": 50, "h": 30 },
96
+ "server": { "x": 306, "y": 64, "w": 60, "h": 45 },
97
+ "coffee": { "x": 48, "y": 108, "w": 26, "h": 22 },
98
+ "water": { "x": 344, "y": 170, "w": 16, "h": 26 },
99
+ "phone": { "x": 181, "y": 143, "w": 22, "h": 12 },
100
+ "whiteboard": { "x": 15, "y": 64, "w": 65, "h": 45 },
101
+ "meeting": { "x": 90, "y": 76, "w": 204, "h": 125 }
102
+ },
103
+ "propInstances": [
104
+ { "id": "boardroom-rug", "type": "rug", "x": 75, "y": 70, "width": 234, "height": 140 },
105
+ { "id": "entry-door", "type": "door", "x": 2, "y": 12, "width": 24, "height": 42 },
106
+ { "id": "city-window-left", "type": "window", "x": 32, "y": 8, "width": 67, "height": 38 },
107
+ { "id": "city-window-right", "type": "window", "x": 285, "y": 8, "width": 67, "height": 38 },
108
+ { "id": "presentation-main", "type": "presentation-screen", "x": 111, "y": 6 },
109
+ { "id": "decision-board", "type": "whiteboard", "x": 15, "y": 64, "width": 65, "height": 45 },
110
+ { "id": "av-main", "type": "av-console", "x": 306, "y": 64 },
111
+ { "id": "meeting-main", "type": "boardroom-table", "x": 90, "y": 76 },
112
+ { "id": "coffee-sideboard", "type": "sideboard", "x": 16, "y": 126 },
113
+ { "id": "coffee-main", "type": "coffee-machine", "x": 48, "y": 105 },
114
+ { "id": "archive-main", "type": "service-cart", "x": 18, "y": 161 },
115
+ { "id": "water-main", "type": "water-cooler", "x": 344, "y": 170 },
116
+ { "id": "service-cabinet", "type": "sideboard", "x": 318, "y": 157, "width": 45, "height": 42 },
117
+ { "id": "plant-front-left", "type": "plant", "x": 91, "y": 69 },
118
+ { "id": "plant-front-right", "type": "plant", "x": 295, "y": 69 },
119
+ { "id": "wall-clock", "type": "office-clock", "x": 362, "y": 8 }
120
+ ],
121
+ "npcSpawns": ["staff-entry", "boss-seat", "secretary-entry", "service-entry"]
122
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "layout",
4
+ "id": "builtin/demo-office",
5
+ "name": "原版办公室布局",
6
+ "version": "1.0.0",
7
+ "engine": { "min": "0.2.0" },
8
+ "contract": "single-office-v1",
9
+ "canvas": { "width": 384, "height": 216 },
10
+ "wallHeight": 36,
11
+ "camera": { "mode": "fixed", "fit": "contain", "integerScale": true },
12
+ "navigation": {
13
+ "lanes": [46, 100, 162],
14
+ "connectors": [76, 140, 204, 276]
15
+ },
16
+ "seats": [
17
+ { "index": 0, "cx": 44, "desk": { "x": 20, "y": 58, "width": 48, "height": 16 }, "anchor": { "x": 44, "y": 84, "dir": "up", "lane": 1 } },
18
+ { "index": 1, "cx": 108, "desk": { "x": 84, "y": 58, "width": 48, "height": 16 }, "anchor": { "x": 108, "y": 84, "dir": "up", "lane": 1 } },
19
+ { "index": 2, "cx": 172, "desk": { "x": 148, "y": 58, "width": 48, "height": 16 }, "anchor": { "x": 172, "y": 84, "dir": "up", "lane": 1 } },
20
+ { "index": 3, "cx": 236, "desk": { "x": 212, "y": 58, "width": 48, "height": 16 }, "anchor": { "x": 236, "y": 84, "dir": "up", "lane": 1 } },
21
+ { "index": 4, "cx": 44, "desk": { "x": 20, "y": 118, "width": 48, "height": 16 }, "anchor": { "x": 44, "y": 144, "dir": "up", "lane": 2 } },
22
+ { "index": 5, "cx": 108, "desk": { "x": 84, "y": 118, "width": 48, "height": 16 }, "anchor": { "x": 108, "y": 144, "dir": "up", "lane": 2 } },
23
+ { "index": 6, "cx": 172, "desk": { "x": 148, "y": 118, "width": 48, "height": 16 }, "anchor": { "x": 172, "y": 144, "dir": "up", "lane": 2 } },
24
+ { "index": 7, "cx": 236, "desk": { "x": 212, "y": 118, "width": 48, "height": 16 }, "anchor": { "x": 236, "y": 144, "dir": "up", "lane": 2 } }
25
+ ],
26
+ "standingAnchors": [
27
+ { "x": 278, "y": 92, "dir": "left", "lane": 1 },
28
+ { "x": 278, "y": 152, "dir": "left", "lane": 2 },
29
+ { "x": 92, "y": 190, "dir": "right", "lane": 2 },
30
+ { "x": 242, "y": 190, "dir": "left", "lane": 2 },
31
+ { "x": 214, "y": 46, "dir": "down", "lane": 0 },
32
+ { "x": 246, "y": 46, "dir": "down", "lane": 0 },
33
+ { "x": 278, "y": 46, "dir": "down", "lane": 0 },
34
+ { "x": 310, "y": 46, "dir": "down", "lane": 0 }
35
+ ],
36
+ "targets": {
37
+ "archive": { "x": 318, "y": 100, "dir": "up", "lane": 1 },
38
+ "server": { "x": 320, "y": 158, "dir": "up", "lane": 2 },
39
+ "whiteboard": { "x": 152, "y": 46, "dir": "up", "lane": 0 },
40
+ "phone": { "x": 364, "y": 64, "dir": "up", "lane": 1 },
41
+ "coffee": { "x": 290, "y": 188, "dir": "right", "lane": 2 },
42
+ "meetA": { "x": 108, "y": 190, "dir": "right", "lane": 2 },
43
+ "meetB": { "x": 244, "y": 190, "dir": "left", "lane": 2 },
44
+ "entry": { "x": 38, "y": 46, "dir": "down", "lane": 0 }
45
+ },
46
+ "stations": {
47
+ "research": { "kind": "target", "target": "archive" },
48
+ "create": { "kind": "seat" },
49
+ "compute": { "kind": "target", "target": "server" },
50
+ "plan": { "kind": "target", "target": "whiteboard" },
51
+ "communicate": { "kind": "target", "target": "phone" },
52
+ "collaborate": { "kind": "seat", "meetingTargets": ["meetA", "meetB"] },
53
+ "coffee": { "kind": "target", "target": "coffee" }
54
+ },
55
+ "legacyActions": {
56
+ "type": "create",
57
+ "archive": "research",
58
+ "server": "compute",
59
+ "whiteboard": "plan",
60
+ "phone": "communicate",
61
+ "delegate": "collaborate",
62
+ "coffee": "coffee"
63
+ },
64
+ "furniture": {
65
+ "archive": { "x": 296, "y": 56, "w": 44, "h": 32 },
66
+ "server": { "x": 296, "y": 116, "w": 48, "h": 32 },
67
+ "coffee": { "x": 300, "y": 176, "w": 26, "h": 22 },
68
+ "phone": { "x": 348, "y": 40, "w": 32, "h": 14 },
69
+ "whiteboard": { "x": 116, "y": 8, "w": 72, "h": 26 },
70
+ "meeting": { "x": 120, "y": 176, "w": 112, "h": 26 }
71
+ },
72
+ "propInstances": [
73
+ { "id": "meeting-rug", "type": "rug", "x": 104, "y": 170 },
74
+ { "id": "entry-door", "type": "door", "x": 20, "y": 6 },
75
+ { "id": "window-1", "type": "window", "x": 208, "y": 8 },
76
+ { "id": "window-2", "type": "window", "x": 268, "y": 8 },
77
+ { "id": "whiteboard-main", "type": "whiteboard", "x": 116, "y": 8 },
78
+ { "id": "phone-main", "type": "phone-table", "x": 348, "y": 40 },
79
+ { "id": "archive-main", "type": "archive-cabinet", "x": 296, "y": 56 },
80
+ { "id": "server-main", "type": "server-rack", "x": 296, "y": 116 },
81
+ { "id": "coffee-main", "type": "coffee-machine", "x": 300, "y": 176 },
82
+ { "id": "meeting-main", "type": "meeting-table", "x": 120, "y": 176 },
83
+ { "id": "plant-1", "type": "plant", "x": 16, "y": 200 },
84
+ { "id": "plant-2", "type": "plant", "x": 78, "y": 200 },
85
+ { "id": "plant-3", "type": "plant", "x": 366, "y": 200 }
86
+ ],
87
+ "npcSpawns": []
88
+ }