@putervision/behavior-mcp 0.1.1 → 0.1.2

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.
@@ -278,9 +278,9 @@ var TriggerRegistry = class {
278
278
  // src/utils/version.ts
279
279
  function getVersion() {
280
280
  if (true) {
281
- return "0.1.1";
281
+ return "0.1.2";
282
282
  }
283
- return "0.1.1";
283
+ return "0.1.2";
284
284
  }
285
285
 
286
286
  export {
@@ -288,4 +288,4 @@ export {
288
288
  TriggerRegistry,
289
289
  getVersion
290
290
  };
291
- //# sourceMappingURL=chunk-FXYS43D6.js.map
291
+ //# sourceMappingURL=chunk-MQ4BV5H6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/engine/executor.ts","../src/engine/triggers.ts","../src/utils/version.ts"],"sourcesContent":["import Database from 'better-sqlite3';\nimport { ExecutionState, ExecutionId, ExecutionStatus, Outcome } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { NotFoundError } from '../utils/errors.js';\nimport { BehaviorRegistry } from './behaviors.js';\nimport { logRuntimeEvent } from './events.js';\n\nexport class ExecutionEngine {\n static startExecution(\n db: Database.Database,\n params: {\n project: string;\n behavior_name: string;\n behavior_version?: number;\n session_id?: string;\n intention_id?: string;\n trace_id?: string;\n parameters?: Record<string, unknown>;\n client_request_id?: string;\n }\n ): ExecutionState {\n const behavior = BehaviorRegistry.getBehavior(db, {\n project: params.project,\n name: params.behavior_name,\n version: params.behavior_version,\n });\n\n const id = generateId() as ExecutionId;\n const now = getCurrentIsoString();\n\n db.prepare(\n `\n INSERT INTO execution_state (\n id, project, behavior_name, behavior_version, session_id, intention_id,\n status, active_node_path, blackboard_json, current_tick, tick_rate_hz,\n duration_ms, stuck_score, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 'running', 'root', ?, 0, 60, 0, 0.0, ?, ?)\n `\n ).run(\n id,\n params.project,\n behavior.name,\n behavior.version,\n params.session_id ?? null,\n params.intention_id ?? null,\n safeJsonStringify(params.parameters || {}),\n now,\n now\n );\n\n logRuntimeEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'execution',\n action: 'start',\n details: {\n behavior_name: behavior.name,\n intention_id: params.intention_id,\n trace_id: params.trace_id,\n },\n });\n\n return {\n id,\n project: params.project,\n behavior_name: behavior.name,\n behavior_version: behavior.version,\n session_id: params.session_id,\n intention_id: params.intention_id,\n trace_id: params.trace_id,\n status: 'running',\n active_node_path: 'root',\n blackboard_json: safeJsonStringify(params.parameters || {}),\n current_tick: 0,\n tick_rate_hz: 60,\n duration_ms: 0,\n stuck_score: 0.0,\n created_at: now,\n updated_at: now,\n };\n }\n\n static tickExecution(\n db: Database.Database,\n params: {\n project: string;\n execution_id: string;\n active_node_path?: string;\n status?: ExecutionStatus;\n stuck_score?: number;\n blackboard?: Record<string, unknown>;\n }\n ): ExecutionState {\n const current = this.getExecution(db, { project: params.project, id: params.execution_id });\n const now = getCurrentIsoString();\n const newTick = current.current_tick + 1;\n const durationMs = Math.round(newTick * (1000 / current.tick_rate_hz));\n const status = params.status || current.status;\n const nodePath = params.active_node_path || current.active_node_path;\n const stuckScore = params.stuck_score !== undefined ? params.stuck_score : current.stuck_score;\n const bbJson = params.blackboard\n ? safeJsonStringify(params.blackboard)\n : current.blackboard_json;\n\n db.prepare(\n `\n UPDATE execution_state SET\n current_tick = ?, duration_ms = ?, status = ?, active_node_path = ?,\n stuck_score = ?, blackboard_json = ?, updated_at = ?\n WHERE id = ?\n `\n ).run(newTick, durationMs, status, nodePath, stuckScore, bbJson, now, current.id);\n\n return {\n ...current,\n current_tick: newTick,\n duration_ms: durationMs,\n status,\n active_node_path: nodePath,\n stuck_score: stuckScore,\n blackboard_json: bbJson,\n updated_at: now,\n };\n }\n\n static stopExecution(\n db: Database.Database,\n params: {\n project: string;\n execution_id: string;\n status: ExecutionStatus;\n error_message?: string;\n }\n ): Outcome {\n const current = this.getExecution(db, { project: params.project, id: params.execution_id });\n const now = getCurrentIsoString();\n\n db.prepare(\n `\n UPDATE execution_state SET\n status = ?, error = ?, updated_at = ?\n WHERE id = ?\n `\n ).run(params.status, params.error_message ?? null, now, current.id);\n\n logRuntimeEvent(db, {\n project: params.project,\n entity_id: current.id,\n entity_type: 'execution',\n action: 'stop',\n details: { status: params.status, error: params.error_message },\n });\n\n return {\n intention_id: current.intention_id || 'manual',\n execution_id: current.id,\n session_id: current.session_id || 'default',\n status: params.status,\n active_node: current.active_node_path,\n tick_count: current.current_tick,\n duration_ms: current.duration_ms,\n error_message: params.error_message,\n completed_at: now,\n };\n }\n\n static getExecution(\n db: Database.Database,\n params: { project: string; id: string }\n ): ExecutionState {\n const row = db\n .prepare('SELECT * FROM execution_state WHERE project = ? AND id = ?')\n .get(params.project, params.id) as any;\n if (!row) throw new NotFoundError(`Execution instance \"${params.id}\" not found.`);\n return this.mapRowToExecution(row);\n }\n\n static listExecutions(\n db: Database.Database,\n params: { project: string; status?: ExecutionStatus; limit?: number }\n ): ExecutionState[] {\n let sql = 'SELECT * FROM execution_state WHERE project = ?';\n const sqlParams: any[] = [params.project];\n\n if (params.status) {\n sql += ' AND status = ?';\n sqlParams.push(params.status);\n }\n\n sql += ' ORDER BY created_at DESC LIMIT ?';\n sqlParams.push(params.limit || 50);\n\n const rows = db.prepare(sql).all(...sqlParams) as any[];\n return rows.map((r) => this.mapRowToExecution(r));\n }\n\n private static mapRowToExecution(row: any): ExecutionState {\n return {\n id: row.id as ExecutionId,\n project: row.project,\n behavior_name: row.behavior_name,\n behavior_version: row.behavior_version,\n session_id: row.session_id,\n intention_id: row.intention_id,\n status: row.status as ExecutionStatus,\n active_node_path: row.active_node_path,\n blackboard_json: row.blackboard_json || '{}',\n current_tick: row.current_tick,\n tick_rate_hz: row.tick_rate_hz,\n duration_ms: row.duration_ms,\n stuck_score: row.stuck_score,\n error: row.error,\n metadata: safeJsonParse(row.metadata_json, undefined),\n created_at: row.created_at,\n updated_at: row.updated_at,\n };\n }\n}\n","import Database from 'better-sqlite3';\nimport { ReactiveTrigger, TriggerId } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { ValidationError, NotFoundError } from '../utils/errors.js';\nimport { logRuntimeEvent } from './events.js';\n\nexport class TriggerRegistry {\n static registerTrigger(\n db: Database.Database,\n params: {\n project: string;\n name: string;\n behavior_name: string;\n condition_type: string;\n condition_params: Record<string, unknown>;\n priority?: number;\n cooldown_ms?: number;\n }\n ): ReactiveTrigger {\n if (!params.name || !params.behavior_name || !params.condition_type) {\n throw new ValidationError('Trigger name, behavior_name, and condition_type are required.');\n }\n\n const id = generateId() as TriggerId;\n const now = getCurrentIsoString();\n const priority = params.priority !== undefined ? params.priority : 0.5;\n const cooldown_ms = params.cooldown_ms !== undefined ? params.cooldown_ms : 1000;\n\n db.prepare(\n `\n INSERT INTO triggers (\n id, project, name, behavior_name, condition_type, condition_params_json,\n priority, cooldown_ms, is_enabled, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)\n ON CONFLICT(project, name) DO UPDATE SET\n behavior_name = excluded.behavior_name,\n condition_type = excluded.condition_type,\n condition_params_json = excluded.condition_params_json,\n priority = excluded.priority,\n cooldown_ms = excluded.cooldown_ms,\n updated_at = excluded.updated_at\n `\n ).run(\n id,\n params.project,\n params.name,\n params.behavior_name,\n params.condition_type,\n safeJsonStringify(params.condition_params || {}),\n priority,\n cooldown_ms,\n now,\n now\n );\n\n logRuntimeEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'trigger',\n action: 'register',\n details: { name: params.name, behavior_name: params.behavior_name, priority },\n });\n\n return {\n id,\n project: params.project,\n name: params.name,\n behavior_name: params.behavior_name,\n condition_type: params.condition_type,\n condition_params: params.condition_params || {},\n priority,\n cooldown_ms,\n is_enabled: true,\n created_at: now,\n updated_at: now,\n };\n }\n\n static listTriggers(db: Database.Database, project: string): ReactiveTrigger[] {\n const rows = db\n .prepare('SELECT * FROM triggers WHERE project = ? ORDER BY priority DESC, name ASC')\n .all(project) as any[];\n return rows.map((r) => this.mapRowToTrigger(r));\n }\n\n static evaluateTriggers(\n db: Database.Database,\n params: { project: string; telemetry: Record<string, any> }\n ): ReactiveTrigger | null {\n const triggers = this.listTriggers(db, params.project).filter((t) => t.is_enabled);\n const now = Date.now();\n\n for (const trig of triggers) {\n if (trig.last_fired_at && now - new Date(trig.last_fired_at).getTime() < trig.cooldown_ms) {\n continue; // In cooldown\n }\n\n let matches = false;\n if (trig.condition_type === 'hp_threshold') {\n const hp = params.telemetry.hp ?? 100;\n const threshold = (trig.condition_params.threshold as number) ?? 30;\n matches = hp <= threshold;\n } else if (trig.condition_type === 'enemy_proximity') {\n const enemyDist = params.telemetry.enemy_distance ?? 999;\n const radius = (trig.condition_params.radius as number) ?? 10;\n matches = enemyDist <= radius;\n }\n\n if (matches) {\n db.prepare('UPDATE triggers SET last_fired_at = ?, updated_at = ? WHERE id = ?').run(\n new Date(now).toISOString(),\n new Date(now).toISOString(),\n trig.id\n );\n return trig;\n }\n }\n return null;\n }\n\n private static mapRowToTrigger(row: any): ReactiveTrigger {\n return {\n id: row.id as TriggerId,\n project: row.project,\n name: row.name,\n behavior_name: row.behavior_name,\n condition_type: row.condition_type,\n condition_params: safeJsonParse(row.condition_params_json, {}),\n priority: row.priority,\n cooldown_ms: row.cooldown_ms,\n last_fired_at: row.last_fired_at,\n is_enabled: row.is_enabled === 1,\n metadata: safeJsonParse(row.metadata_json, undefined),\n created_at: row.created_at,\n updated_at: row.updated_at,\n };\n }\n}\n","declare const __APP_VERSION__: string | undefined;\n\nexport function getVersion(): string {\n if (typeof __APP_VERSION__ !== 'undefined') {\n return __APP_VERSION__;\n }\n return '0.1.1';\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/engine/executor.ts","../src/engine/triggers.ts","../src/utils/version.ts"],"sourcesContent":["import Database from 'better-sqlite3';\nimport { ExecutionState, ExecutionId, ExecutionStatus, Outcome } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { NotFoundError } from '../utils/errors.js';\nimport { BehaviorRegistry } from './behaviors.js';\nimport { logRuntimeEvent } from './events.js';\n\nexport class ExecutionEngine {\n static startExecution(\n db: Database.Database,\n params: {\n project: string;\n behavior_name: string;\n behavior_version?: number;\n session_id?: string;\n intention_id?: string;\n trace_id?: string;\n parameters?: Record<string, unknown>;\n client_request_id?: string;\n }\n ): ExecutionState {\n const behavior = BehaviorRegistry.getBehavior(db, {\n project: params.project,\n name: params.behavior_name,\n version: params.behavior_version,\n });\n\n const id = generateId() as ExecutionId;\n const now = getCurrentIsoString();\n\n db.prepare(\n `\n INSERT INTO execution_state (\n id, project, behavior_name, behavior_version, session_id, intention_id,\n status, active_node_path, blackboard_json, current_tick, tick_rate_hz,\n duration_ms, stuck_score, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 'running', 'root', ?, 0, 60, 0, 0.0, ?, ?)\n `\n ).run(\n id,\n params.project,\n behavior.name,\n behavior.version,\n params.session_id ?? null,\n params.intention_id ?? null,\n safeJsonStringify(params.parameters || {}),\n now,\n now\n );\n\n logRuntimeEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'execution',\n action: 'start',\n details: {\n behavior_name: behavior.name,\n intention_id: params.intention_id,\n trace_id: params.trace_id,\n },\n });\n\n return {\n id,\n project: params.project,\n behavior_name: behavior.name,\n behavior_version: behavior.version,\n session_id: params.session_id,\n intention_id: params.intention_id,\n trace_id: params.trace_id,\n status: 'running',\n active_node_path: 'root',\n blackboard_json: safeJsonStringify(params.parameters || {}),\n current_tick: 0,\n tick_rate_hz: 60,\n duration_ms: 0,\n stuck_score: 0.0,\n created_at: now,\n updated_at: now,\n };\n }\n\n static tickExecution(\n db: Database.Database,\n params: {\n project: string;\n execution_id: string;\n active_node_path?: string;\n status?: ExecutionStatus;\n stuck_score?: number;\n blackboard?: Record<string, unknown>;\n }\n ): ExecutionState {\n const current = this.getExecution(db, { project: params.project, id: params.execution_id });\n const now = getCurrentIsoString();\n const newTick = current.current_tick + 1;\n const durationMs = Math.round(newTick * (1000 / current.tick_rate_hz));\n const status = params.status || current.status;\n const nodePath = params.active_node_path || current.active_node_path;\n const stuckScore = params.stuck_score !== undefined ? params.stuck_score : current.stuck_score;\n const bbJson = params.blackboard\n ? safeJsonStringify(params.blackboard)\n : current.blackboard_json;\n\n db.prepare(\n `\n UPDATE execution_state SET\n current_tick = ?, duration_ms = ?, status = ?, active_node_path = ?,\n stuck_score = ?, blackboard_json = ?, updated_at = ?\n WHERE id = ?\n `\n ).run(newTick, durationMs, status, nodePath, stuckScore, bbJson, now, current.id);\n\n return {\n ...current,\n current_tick: newTick,\n duration_ms: durationMs,\n status,\n active_node_path: nodePath,\n stuck_score: stuckScore,\n blackboard_json: bbJson,\n updated_at: now,\n };\n }\n\n static stopExecution(\n db: Database.Database,\n params: {\n project: string;\n execution_id: string;\n status: ExecutionStatus;\n error_message?: string;\n }\n ): Outcome {\n const current = this.getExecution(db, { project: params.project, id: params.execution_id });\n const now = getCurrentIsoString();\n\n db.prepare(\n `\n UPDATE execution_state SET\n status = ?, error = ?, updated_at = ?\n WHERE id = ?\n `\n ).run(params.status, params.error_message ?? null, now, current.id);\n\n logRuntimeEvent(db, {\n project: params.project,\n entity_id: current.id,\n entity_type: 'execution',\n action: 'stop',\n details: { status: params.status, error: params.error_message },\n });\n\n return {\n intention_id: current.intention_id || 'manual',\n execution_id: current.id,\n session_id: current.session_id || 'default',\n status: params.status,\n active_node: current.active_node_path,\n tick_count: current.current_tick,\n duration_ms: current.duration_ms,\n error_message: params.error_message,\n completed_at: now,\n };\n }\n\n static getExecution(\n db: Database.Database,\n params: { project: string; id: string }\n ): ExecutionState {\n const row = db\n .prepare('SELECT * FROM execution_state WHERE project = ? AND id = ?')\n .get(params.project, params.id) as any;\n if (!row) throw new NotFoundError(`Execution instance \"${params.id}\" not found.`);\n return this.mapRowToExecution(row);\n }\n\n static listExecutions(\n db: Database.Database,\n params: { project: string; status?: ExecutionStatus; limit?: number }\n ): ExecutionState[] {\n let sql = 'SELECT * FROM execution_state WHERE project = ?';\n const sqlParams: any[] = [params.project];\n\n if (params.status) {\n sql += ' AND status = ?';\n sqlParams.push(params.status);\n }\n\n sql += ' ORDER BY created_at DESC LIMIT ?';\n sqlParams.push(params.limit || 50);\n\n const rows = db.prepare(sql).all(...sqlParams) as any[];\n return rows.map((r) => this.mapRowToExecution(r));\n }\n\n private static mapRowToExecution(row: any): ExecutionState {\n return {\n id: row.id as ExecutionId,\n project: row.project,\n behavior_name: row.behavior_name,\n behavior_version: row.behavior_version,\n session_id: row.session_id,\n intention_id: row.intention_id,\n status: row.status as ExecutionStatus,\n active_node_path: row.active_node_path,\n blackboard_json: row.blackboard_json || '{}',\n current_tick: row.current_tick,\n tick_rate_hz: row.tick_rate_hz,\n duration_ms: row.duration_ms,\n stuck_score: row.stuck_score,\n error: row.error,\n metadata: safeJsonParse(row.metadata_json, undefined),\n created_at: row.created_at,\n updated_at: row.updated_at,\n };\n }\n}\n","import Database from 'better-sqlite3';\nimport { ReactiveTrigger, TriggerId } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { ValidationError, NotFoundError } from '../utils/errors.js';\nimport { logRuntimeEvent } from './events.js';\n\nexport class TriggerRegistry {\n static registerTrigger(\n db: Database.Database,\n params: {\n project: string;\n name: string;\n behavior_name: string;\n condition_type: string;\n condition_params: Record<string, unknown>;\n priority?: number;\n cooldown_ms?: number;\n }\n ): ReactiveTrigger {\n if (!params.name || !params.behavior_name || !params.condition_type) {\n throw new ValidationError('Trigger name, behavior_name, and condition_type are required.');\n }\n\n const id = generateId() as TriggerId;\n const now = getCurrentIsoString();\n const priority = params.priority !== undefined ? params.priority : 0.5;\n const cooldown_ms = params.cooldown_ms !== undefined ? params.cooldown_ms : 1000;\n\n db.prepare(\n `\n INSERT INTO triggers (\n id, project, name, behavior_name, condition_type, condition_params_json,\n priority, cooldown_ms, is_enabled, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)\n ON CONFLICT(project, name) DO UPDATE SET\n behavior_name = excluded.behavior_name,\n condition_type = excluded.condition_type,\n condition_params_json = excluded.condition_params_json,\n priority = excluded.priority,\n cooldown_ms = excluded.cooldown_ms,\n updated_at = excluded.updated_at\n `\n ).run(\n id,\n params.project,\n params.name,\n params.behavior_name,\n params.condition_type,\n safeJsonStringify(params.condition_params || {}),\n priority,\n cooldown_ms,\n now,\n now\n );\n\n logRuntimeEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'trigger',\n action: 'register',\n details: { name: params.name, behavior_name: params.behavior_name, priority },\n });\n\n return {\n id,\n project: params.project,\n name: params.name,\n behavior_name: params.behavior_name,\n condition_type: params.condition_type,\n condition_params: params.condition_params || {},\n priority,\n cooldown_ms,\n is_enabled: true,\n created_at: now,\n updated_at: now,\n };\n }\n\n static listTriggers(db: Database.Database, project: string): ReactiveTrigger[] {\n const rows = db\n .prepare('SELECT * FROM triggers WHERE project = ? ORDER BY priority DESC, name ASC')\n .all(project) as any[];\n return rows.map((r) => this.mapRowToTrigger(r));\n }\n\n static evaluateTriggers(\n db: Database.Database,\n params: { project: string; telemetry: Record<string, any> }\n ): ReactiveTrigger | null {\n const triggers = this.listTriggers(db, params.project).filter((t) => t.is_enabled);\n const now = Date.now();\n\n for (const trig of triggers) {\n if (trig.last_fired_at && now - new Date(trig.last_fired_at).getTime() < trig.cooldown_ms) {\n continue; // In cooldown\n }\n\n let matches = false;\n if (trig.condition_type === 'hp_threshold') {\n const hp = params.telemetry.hp ?? 100;\n const threshold = (trig.condition_params.threshold as number) ?? 30;\n matches = hp <= threshold;\n } else if (trig.condition_type === 'enemy_proximity') {\n const enemyDist = params.telemetry.enemy_distance ?? 999;\n const radius = (trig.condition_params.radius as number) ?? 10;\n matches = enemyDist <= radius;\n }\n\n if (matches) {\n db.prepare('UPDATE triggers SET last_fired_at = ?, updated_at = ? WHERE id = ?').run(\n new Date(now).toISOString(),\n new Date(now).toISOString(),\n trig.id\n );\n return trig;\n }\n }\n return null;\n }\n\n private static mapRowToTrigger(row: any): ReactiveTrigger {\n return {\n id: row.id as TriggerId,\n project: row.project,\n name: row.name,\n behavior_name: row.behavior_name,\n condition_type: row.condition_type,\n condition_params: safeJsonParse(row.condition_params_json, {}),\n priority: row.priority,\n cooldown_ms: row.cooldown_ms,\n last_fired_at: row.last_fired_at,\n is_enabled: row.is_enabled === 1,\n metadata: safeJsonParse(row.metadata_json, undefined),\n created_at: row.created_at,\n updated_at: row.updated_at,\n };\n }\n}\n","declare const __APP_VERSION__: string | undefined;\n\nexport function getVersion(): string {\n if (typeof __APP_VERSION__ !== 'undefined') {\n return __APP_VERSION__;\n }\n return '0.1.2';\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  ExecutionEngine,
3
3
  TriggerRegistry,
4
4
  getVersion
5
- } from "./chunk-FXYS43D6.js";
5
+ } from "./chunk-MQ4BV5H6.js";
6
6
  import {
7
7
  BehaviorRegistry,
8
8
  generateId,
@@ -1173,4 +1173,4 @@ export {
1173
1173
  StuckDetector,
1174
1174
  server
1175
1175
  };
1176
- //# sourceMappingURL=chunk-MXYFWAJG.js.map
1176
+ //# sourceMappingURL=chunk-PCAPI6AU.js.map
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  ExecutionEngine,
4
4
  TriggerRegistry,
5
5
  getVersion
6
- } from "./chunk-FXYS43D6.js";
6
+ } from "./chunk-MQ4BV5H6.js";
7
7
  import {
8
8
  runInit
9
9
  } from "./chunk-NCJFRFRK.js";
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  server
3
- } from "./chunk-MXYFWAJG.js";
3
+ } from "./chunk-PCAPI6AU.js";
4
4
  import {
5
5
  getVersion
6
- } from "./chunk-FXYS43D6.js";
6
+ } from "./chunk-MQ4BV5H6.js";
7
7
  import {
8
8
  runAutoInit
9
9
  } from "./chunk-NCJFRFRK.js";
package/dist/lib.js CHANGED
@@ -7,11 +7,11 @@ import {
7
7
  StuckDetector,
8
8
  WatchdogTimer,
9
9
  server
10
- } from "./chunk-MXYFWAJG.js";
10
+ } from "./chunk-PCAPI6AU.js";
11
11
  import {
12
12
  ExecutionEngine,
13
13
  TriggerRegistry
14
- } from "./chunk-FXYS43D6.js";
14
+ } from "./chunk-MQ4BV5H6.js";
15
15
  import {
16
16
  BehaviorRegistry,
17
17
  computeEventHash,
package/glama.json CHANGED
@@ -2,13 +2,13 @@
2
2
  "$schema": "https://glama.ai/mcp/schemas/server.json",
3
3
  "name": "behavior-mcp",
4
4
  "title": "Behavior MCP",
5
- "description": "In-browser ~60Hz behavior tree execution engine with reactive triggers and safety.",
5
+ "description": "In-browser ~60Hz behavior tree execution engine with reactive triggers and safety guardrails.",
6
6
  "maintainers": [
7
7
  "putervision"
8
8
  ],
9
9
  "author": "PuterVision",
10
10
  "license": "MIT",
11
- "homepage": "https://putervision.com",
11
+ "homepage": "https://behaviormcp.com",
12
12
  "repository": "https://github.com/putervision/behavior-mcp",
13
13
  "categories": [
14
14
  "developer-tools",
package/manifest.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "manifest_version": "0.2",
3
3
  "name": "@putervision/behavior-mcp",
4
- "version": "0.1.1",
5
- "description": "In-browser ~60Hz behavior tree execution engine with reactive triggers and safety.",
4
+ "version": "0.1.2",
5
+ "description": "In-browser ~60Hz behavior tree execution engine with reactive triggers and safety guardrails.",
6
6
  "author": {
7
7
  "name": "PuterVision"
8
8
  },
9
- "homepage": "https://github.com/putervision/behavior-mcp#readme",
9
+ "homepage": "https://behaviormcp.com",
10
10
  "server": {
11
11
  "type": "node",
12
12
  "entry_point": "./dist/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putervision/behavior-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "High-frequency in-browser behavior tree execution engine for autonomous AI agents — 60Hz tick loops, reactive triggers, telemetry recordings, and safety guardrails.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -30,7 +30,7 @@
30
30
  "sqlite",
31
31
  "developer-tools"
32
32
  ],
33
- "homepage": "https://github.com/putervision/behavior-mcp#readme",
33
+ "homepage": "https://behaviormcp.com",
34
34
  "bugs": {
35
35
  "url": "https://github.com/putervision/behavior-mcp/issues"
36
36
  },
@@ -130,4 +130,4 @@
130
130
  "engines": {
131
131
  "node": ">=18.18.0"
132
132
  }
133
- }
133
+ }
package/server.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.putervision/behavior-mcp",
4
- "version": "0.1.1",
4
+ "version": "0.1.2",
5
5
  "title": "Behavior Runtime MCP",
6
- "description": "High-frequency in-browser behavior tree runtime for AI agents 60Hz tick loops and reactive triggers.",
6
+ "description": "In-browser ~60Hz behavior tree execution engine with reactive triggers and safety guardrails.",
7
7
  "publisher": "PuterVision",
8
8
  "license": "MIT",
9
9
  "websiteUrl": "https://behaviormcp.com",
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "registryType": "npm",
31
31
  "identifier": "@putervision/behavior-mcp",
32
- "version": "0.1.1",
32
+ "version": "0.1.2",
33
33
  "transport": {
34
34
  "type": "stdio"
35
35
  },