@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.
- package/dist/{chunk-FXYS43D6.js → chunk-MQ4BV5H6.js} +3 -3
- package/dist/{chunk-FXYS43D6.js.map → chunk-MQ4BV5H6.js.map} +1 -1
- package/dist/{chunk-MXYFWAJG.js → chunk-PCAPI6AU.js} +2 -2
- package/dist/cli.js +1 -1
- package/dist/index.js +2 -2
- package/dist/lib.js +2 -2
- package/glama.json +2 -2
- package/manifest.json +3 -3
- package/package.json +3 -3
- package/server.json +3 -3
- /package/dist/{chunk-MXYFWAJG.js.map → chunk-PCAPI6AU.js.map} +0 -0
|
@@ -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.
|
|
281
|
+
return "0.1.2";
|
|
282
282
|
}
|
|
283
|
-
return "0.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-
|
|
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-
|
|
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-
|
|
1176
|
+
//# sourceMappingURL=chunk-PCAPI6AU.js.map
|
package/dist/cli.js
CHANGED
package/dist/index.js
CHANGED
package/dist/lib.js
CHANGED
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
StuckDetector,
|
|
8
8
|
WatchdogTimer,
|
|
9
9
|
server
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-PCAPI6AU.js";
|
|
11
11
|
import {
|
|
12
12
|
ExecutionEngine,
|
|
13
13
|
TriggerRegistry
|
|
14
|
-
} from "./chunk-
|
|
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://
|
|
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.
|
|
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://
|
|
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.
|
|
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://
|
|
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.
|
|
4
|
+
"version": "0.1.2",
|
|
5
5
|
"title": "Behavior Runtime MCP",
|
|
6
|
-
"description": "
|
|
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.
|
|
32
|
+
"version": "0.1.2",
|
|
33
33
|
"transport": {
|
|
34
34
|
"type": "stdio"
|
|
35
35
|
},
|
|
File without changes
|