Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 1552,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 1171574,
"Shell": 1768
},
"pushed_at": "2026-07-24T01:41:54Z",
"created_at": "2022-10-14T14:17:59Z",
"owner_type": "User",
"updated_at": "2026-07-22T08:30:55Z",
"description": "自用开发工具包",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "Bowen",
"type": "User",
"login": "jcbowen",
"company": null,
"location": "中国重庆",
"followers": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/46322341?v=4",
"created_at": "2019-01-02T14:29:31Z",
"is_verified": null,
"public_repos": 37,
"account_age_days": 2760
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.13.22",
"kind": "patch",
"published_at": "2026-07-22T08:28:21Z"
},
{
"tag": "0.13.21",
"kind": "patch",
"published_at": "2026-07-17T15:07:42Z"
},
{
"tag": "v0.13.20",
"kind": "patch",
"published_at": "2026-06-18T02:12:38Z"
},
{
"tag": "v0.13.19",
"kind": "patch",
"published_at": "2026-06-05T06:27:19Z"
},
{
"tag": "v0.13.18",
"kind": "patch",
"published_at": "2026-05-24T16:15:05Z"
},
{
"tag": "v0.13.17",
"kind": "patch",
"published_at": "2026-01-21T00:40:32Z"
},
{
"tag": "v0.13.15",
"kind": "patch",
"published_at": "2025-12-20T11:00:37Z"
},
{
"tag": "v0.13.14",
"kind": "patch",
"published_at": "2025-12-19T16:11:38Z"
},
{
"tag": "v0.13.13",
"kind": "patch",
"published_at": "2025-12-19T09:33:41Z"
},
{
"tag": "v0.13.12",
"kind": "patch",
"published_at": "2025-12-17T02:05:55Z"
},
{
"tag": "v0.13.11",
"kind": "patch",
"published_at": "2025-12-06T08:12:41Z"
},
{
"tag": "v0.13.10",
"kind": "patch",
"published_at": "2025-11-24T08:35:27Z"
},
{
"tag": "v0.13.9",
"kind": "patch",
"published_at": "2025-11-14T13:37:07Z"
},
{
"tag": "v0.13.7",
"kind": "patch",
"published_at": "2025-11-12T02:27:54Z"
},
{
"tag": "v0.13.6",
"kind": "patch",
"published_at": "2025-11-10T09:43:43Z"
},
{
"tag": "v0.13.5",
"kind": "patch",
"published_at": "2025-11-05T05:10:32Z"
},
{
"tag": "v0.13.3",
"kind": "patch",
"published_at": "2025-11-02T14:09:22Z"
},
{
"tag": "v0.13.2",
"kind": "patch",
"published_at": "2025-11-01T14:42:11Z"
},
{
"tag": "v0.13.1",
"kind": "patch",
"published_at": "2025-11-01T12:18:52Z"
},
{
"tag": "v0.12.2",
"kind": "patch",
"published_at": "2025-10-29T15:02:17Z"
},
{
"tag": "v0.12.1",
"kind": "patch",
"published_at": "2025-10-27T02:08:42Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2025-10-24T16:14:04Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2025-10-19T13:52:49Z"
},
{
"tag": "v0.10.7",
"kind": "patch",
"published_at": "2025-09-30T02:35:39Z"
},
{
"tag": "v0.10.6",
"kind": "patch",
"published_at": "2025-09-27T02:31:15Z"
},
{
"tag": "v0.10.5",
"kind": "patch",
"published_at": "2025-09-18T08:58:57Z"
},
{
"tag": "v0.10.4",
"kind": "patch",
"published_at": "2025-09-13T06:45:34Z"
},
{
"tag": "v0.10.3",
"kind": "patch",
"published_at": "2025-07-23T16:20:14Z"
},
{
"tag": "v0.10.2",
"kind": "patch",
"published_at": "2025-07-19T02:31:45Z"
},
{
"tag": "v0.10.1",
"kind": "patch",
"published_at": "2025-07-11T06:24:14Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2025-07-08T01:09:04Z"
},
{
"tag": "v0.9.2",
"kind": "patch",
"published_at": "2025-05-20T07:36:32Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2025-05-19T03:11:34Z"
},
{
"tag": "v0.8.2",
"kind": "patch",
"published_at": "2025-01-22T02:23:38Z"
},
{
"tag": "v0.8.1",
"kind": "patch",
"published_at": "2024-12-16T14:09:42Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2024-11-24T14:37:34Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2024-08-13T14:32:17Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2024-08-11T04:25:47Z"
},
{
"tag": "v0.6.1",
"kind": "patch",
"published_at": "2024-07-13T14:39:52Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2022-11-08T06:11:14Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2022-10-21T03:33:00Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2022-10-18T15:31:14Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2022-10-16T06:44:49Z"
}
],
"recent_commits": [
{
"oid": "a443d274f22be89ab78709937be9e8f9e59df870",
"body": "- 在文本和时间输入框中按下回车键可直接提交筛选\n- 为筛选表单的输入框添加键盘事件监听器\n- 实现 Enter 键触发筛选提交功能\n- 保持原有的表单提交逻辑不变",
"is_bot": false,
"headline": "feat(debugger): 添加筛选表单回车提交功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-22T08:28:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e38d1293b1e2cc88ef41273c7b2ed1b53e5553b",
"body": "- 修改时间解析逻辑,对不带时区信息的格式使用本地时间解析\n- 添加注释说明时间解析的行为差异\n- 修复流式请求过滤器,排除进程记录的匹配\n- 在文件和内存存储中添加进程记录类型的检查\n- 修改模板中时间格式化方式,确保时间显示格式统一",
"is_bot": false,
"headline": "fix(debugger): 修复时间解析和流式过滤问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-22T08:09:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "84f12b0105cbfa3cdc6e3a618d2f2ad0fd11394c",
"body": "- 移除过时的时间范围样式定义\n- 添加筛选器头部标题样式优化\n- 移除冗余的网格布局属性\n- 实现筛选标签页功能支持记录类型切换\n- 调整筛选表单为垂直布局结构\n- 添加隐藏筛选组的功能支持\n- 优化移动端响应式设计\n- 调整大屏幕下的表单元素尺寸\n- 将表单提交按钮改为普通按钮触发\n- 实现记录类型标签页切换逻辑\n- 重构基础筛选字段布局\n- 分离HTTP和进程记录筛选组\n- 优化页面参数安全访问逻辑\n- 实现记录类型UI更新功能\n- 添加清除无关筛选条件功能\n- 实现按类型切换筛选提交逻辑\n- 优化筛选表单提交处理机制",
"is_bot": false,
"headline": "refactor(debugger): 重构筛选器界面和功能实现",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-22T07:21:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd540c2c71a79e918bcf816d42e238a7bb16f970",
"body": "- 添加了.json-close-line样式类,设置padding-left为0\n- 修改了closeLine元素的className,同时包含json-line和json-close-line类\n- 修复了JSON对象展开/折叠功能中的样式显示问题",
"is_bot": false,
"headline": "style(debugger): 优化JSON行样式和关闭行类名",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-22T06:40:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dcaaad112eb41850f9a9354991a61b8f01d7dfa6",
"body": "1. 新增嵌入式jsonc-parser静态资源,无需依赖外部CDN\n2. 详情页新增类VSCode的JSON查看器,支持格式化、折叠/展开、自动修复、复制等功能\n3. 新增会话数据展示模块\n4. 新增相关单元测试与文档说明",
"is_bot": false,
"headline": "feat(debugger): 集成增强型JSON查看器功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-22T06:08:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bef5e8c41bb690639fcc79ddccba4aee8f05d66c",
"body": "1. 为内存存储的关键词搜索添加host字段匹配逻辑,与其他存储层保持一致\n2. 补全文件存储header解析的缺失字段,修复快速统计时的字段遗漏问题\n3. 为数据库存储添加host字段的持久化、搜索与筛选支持,同时修复status_code筛选的类型转换问题\n4. 优化前端筛选表单的参数处理逻辑,修复分页参数重置问题\n5. 新增对应存储层的测试用例,覆盖host筛选、类型转换等场景",
"is_bot": false,
"headline": "feat(debugger): 完善全存储层的host字段搜索与筛选支持",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-22T04:18:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d1c0fc624d4134ce2742abd4c8c34645a1b862d",
"body": "- 添加 ensureConfigDataInitialized 方法确保非 nil 结构体指针\n- 实现反射检查避免 YAML/INI 解析时因 reflect.Value 不可赋值导致的 panic\n- 自动为 nil 结构体指针分配对应类型的零值实例\n- 仅处理指向结构体的指针类型,其他类型保持原有逻辑不变",
"is_bot": false,
"headline": "fix(config): 解决 ConfigData 为 nil 指针时的解析 panic 问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-18T04:07:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d38d59309c7be003f10ad6aa50376ad2e2a92c2d",
"body": "- 引入gopkg.in/yaml.v3依赖包\n- 添加ConfigTypeYAML常量定义\n- 扩展配置文件类型识别逻辑以支持.yaml和.yml扩展名\n- 在readConfigFile方法中实现YAML解析功能\n- 更新配置文件写入功能以支持YAML格式输出\n- 修改相关文档注释以反映YAML支持\n- 更新配置类型描述以包含yaml选项",
"is_bot": false,
"headline": "feat(config): 添加YAML配置文件支持",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-17T15:07:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbef4e07d376f60fe603f2a49ae24bd382f2d028",
"body": "1. 新增gorm标签解析工具,支持识别`-:update`和`-:all`等更新忽略标签\n2. 在SetValueCheckField中增加更新字段合法性校验\n3. 修复update操作中未过滤更新忽略字段的问题\n4. 补充相关文档说明和单元测试\n5. 重构ORM基础模型,提取通用逻辑到CommonBaseModel",
"is_bot": false,
"headline": "feat(orm): 完善数据表基础模型以及crud支持识别`-:update`和`-:all`等更新忽略标签",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-07-17T14:17:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a48dfb0ee38c6d514fee40c9b5e8c4bcd2589c85",
"body": "包含错误日志记录和对应的数值范围校验,提升转换过程的稳定性与正确性",
"is_bot": false,
"headline": "feat(转换辅助工具): 为数值转换函数添加[]byte类型支持",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-06-18T02:12:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5618b09cfde6ad1798e5d086c0f2a3b50b3ec45d",
"body": null,
"is_bot": false,
"headline": "更新 文档",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-06-05T06:27:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf31cc8d150c34a68ec491ad621694e8efd3c6a0",
"body": "1. 修复内存存储重建索引时nil指针风险\n2. 修复host过滤条件逻辑错误\n3. 将分页返回值从gin.H改为自定义Pagination结构体\n4. 替换分页测试的map访问为结构体字段访问\n5. 新增数据库存储的Logger日志字段支持\n6. 优化模板UI样式与布局,整理响应信息展示逻辑\n7. 修复返回列表页的跳转逻辑",
"is_bot": false,
"headline": "fix(debugger): 修复多个bug并优化代码与UI",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-06-04T08:36:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a577f0ab42a2de114931949376a599b891454c5e",
"body": "1. 将原有的具体类型断言改为面向LoggerInterface的接口断言,适配更多日志实现类型\n2. 为LoggerInterface新增GetLogs和ClearLogs方法,并为所有实现类添加对应实现\n3. 为MainLogger和noopLogger添加空操作的日志获取与清空实现\n4. 为ProcessLogger委托内部DefaultLogger实现相关方法",
"is_bot": false,
"headline": "refactor(debugger): 调整日志记录器的类型断言为接口断言",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-06-04T07:12:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97e5228af6f4d558e47ee2443d342ab36f4647fa",
"body": "本次提交对调试器进行了多维度改进:\n1. 修复并增强分页逻辑:支持配置默认分页大小,限制最大分页值,修复page<=0时的默认值问题\n2. 重构筛选逻辑:为所有存储实现添加类型安全检查,完善client_ip和host的匹配规则\n3. 优化IP白名单校验:支持IPv6标准化比较,提升兼容性\n4. 新增工具函数:新增时间解析、404渲染、模板格式化等工具方法\n5. 优化前端界面:调整筛选布局,添加分页大小选择器,优化日志展示样式和交互\n6. 修复模板渲染问题:修复流式统计显示、JSON转义、耗时格式化等问题\n7. 移除冗余代码:删除无用的generateQueryString方法,清理无效模板代码\n8. 增加健壮性:添加nil日志条目过滤,完善错误处理流程",
"is_bot": false,
"headline": "refactor(debugger): 全面优化调试器功能与代码质量",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-05-27T02:58:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "237c9241d901e75ab94c5a59c96db66e6b7c0e9a",
"body": "1. 统一各存储实现的统计指标:添加avg_duration_ms和error_rate_percent指标,替换旧的avg_duration和错误率格式\n2. 优化路由组基础路径处理,支持非/以/开头的basePath\n3. 移除冗余的getClientIP方法,简化IP获取逻辑\n4. 添加模板函数div和mul用于前端计算\n5. 优化前端UI:调整样式类名、时间筛选区域布局、分页逻辑\n6. 修复状态码1xx显示错误,优化日志时间戳格式\n7. 简化模板代码,移除冗余辅助函数,修复返回链接逻辑\n8. 移除调试用的请求头/体打印日志",
"is_bot": false,
"headline": "refactor(debugger): 重构统计与UI展示逻辑,优化用户体验",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-05-24T16:24:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f95d88bc502a78151d89877df9e4205d92f06f3",
"body": "将原有的c.ShouldBindJSON替换为手动读取并重置request body,避免后续流程无法再次读取json请求体",
"is_bot": false,
"headline": "fix(middleware): 修复gin路由重复读取json body的问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-05-24T16:15:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afbef62c257cd7b5aee9ecb2392913433a90f087",
"body": "1. 更新Helper工具包文档:\n - 修正SSH工具描述为SSH密钥管理\n - 重构文件操作、字符串处理、金额处理等模块的示例代码\n - 移除过时的SSH连接/传输示例,新增密钥管理相关示例\n - 优化类型转换、JSON处理等模块的代码示例\n2. 更新README文档:\n - 调整项目目录结构,拆分tlsconfig为单独目录\n - 更新邮件、附件、Redis、验证器、类型转换等组件的使用示例\n - 优化PHP执行、命令行工具、调试器、消息提示等模块的代码示例\n - 简化部分API调用写法,统一代码风格",
"is_bot": false,
"headline": "docs: 更新Helper工具包文档和项目使用示例",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-05-24T09:20:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10ce4bd30ff50f6e738e7e84f6b2d9e5f258cc6e",
"body": "添加对空切片和空映射的默认值设置逻辑,保持与原有错误处理方式一致\n同时移除debugger配置中AutoSkipStatic的preserve标签",
"is_bot": false,
"headline": "fix(helper): 为切片和映射类型添加空值默认设置",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-04-02T07:02:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c7e697836c6c2db2b1ce053dbc844cf10065fd0",
"body": null,
"is_bot": false,
"headline": "fix(context): 修复ActionName赋值问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-04-02T07:02:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99276b761045034310eed28c933a7103ff7b4a93",
"body": null,
"is_bot": false,
"headline": "fix(crud): 修复山下文参数传递错误问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-04-01T08:57:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6632d452aac0c343ef25021bb440b8d463c9380",
"body": "确保筛选表单能正确获取并显示用户最新的筛选条件,优先从URL参数获取值作为后备方案",
"is_bot": false,
"headline": "fix(debugger): 修复筛选表单参数获取逻辑,优先使用URL参数",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-03-11T07:15:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1f1d3a5643ed1d7d4cf7bb3ef842948cd80af63",
"body": "将服务器端渲染的筛选和分页逻辑改为客户端处理\n添加动态表单初始化功能\n实现更智能的URL参数构建\n移除不再使用的QueryString参数\n新增json和safeURL模板函数",
"is_bot": false,
"headline": "feat(debugger): 重构日志列表页的前端交互逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-03-02T02:11:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c56358bfc60d321cedcf39f3c951ca6d91d49ff",
"body": "根据配置动态显示主进程日志下载按钮\n当Glob模式未匹配到文件时,增加目录遍历作为备选方案",
"is_bot": false,
"headline": "feat(debugger): 添加主进程日志下载功能的条件渲染",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-02-27T01:21:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a678aa053f3869c03a29aa078d1a763d4e2b0738",
"body": "使用 RawQuery 直接处理原始查询字符串,避免重复解码和编码导致的参数双重编码问题",
"is_bot": false,
"headline": "fix(debugger): 修复查询字符串生成时双重编码问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-02-26T23:52:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "766711358e62e5e541a99a31e5d45c174cbf00df",
"body": "扩展搜索接口以支持过滤条件,统一各存储实现的搜索行为\n优化查询字符串生成逻辑,修复分页参数处理问题",
"is_bot": false,
"headline": "feat(debugger): 为搜索功能添加过滤条件支持",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-02-25T02:58:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a61c7f9c0fbf936034d1b74a031fc6710ad1deab",
"body": null,
"is_bot": false,
"headline": "refactor(trait/crud): 优化Success和Failure方法中的参数处理逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-01-21T00:40:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bba19c4d10ffaff4471526bc77043d3a0dc13791",
"body": "使用类型自动识别替代基于参数位置的判断,提高方法的灵活性和可读性",
"is_bot": false,
"headline": "refactor(trait/crud): 改进 Success 和 Failure 方法的参数处理逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2026-01-08T01:39:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d9908cdcfc2f18a4015ed8467114ac23ba1b534",
"body": "添加HTTP工具、IP地址处理、SSH密钥管理和单位转换等新功能的说明和使用示例\n更新项目结构和依赖要求\n完善调试工具和工具函数集合的文档描述",
"is_bot": false,
"headline": "docs: 更新README文档,添加新功能和使用示例",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-25T06:12:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6a35e154fc7e199651c8722cd1306aa0660939c",
"body": "实现主进程日志文件的查找、打包和下载功能\n- 支持按大小和日期分割的日志文件\n- 自动创建日志目录并检查路径有效性\n- 对日志文件按修改时间排序\n- 优化日志文件匹配模式",
"is_bot": false,
"headline": "feat(debugger): 添加主进程日志下载功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-25T02:59:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "77977583dadfb156500ef9543c73a55b5dc9be02",
"body": null,
"is_bot": false,
"headline": "调整 配置文件不存在的时候不再强制退出进程",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-20T11:00:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a756dc5e22a1876c006b088a47e32a30a50254a3",
"body": "实现主进程日志功能,包括配置选项、日志记录器实现和日志文件管理\n新增日志下载API接口,支持压缩下载所有主进程日志文件\n更新文档说明主进程日志功能的使用方法和配置选项",
"is_bot": false,
"headline": "feat(debugger): 添加主进程日志功能支持",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-20T10:42:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f8848c049b7bae50f272d5c616ed98f4bdadf6a",
"body": null,
"is_bot": false,
"headline": "docs(debugger): 更新调试器文档以反映API变更和日志级别调整",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-19T16:11:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a44e99f7d2cdfae0f132c07c79e74abdafca25f",
"body": "实现配置替换规则功能,允许通过节点路径、新值和条件值动态修改配置\n新增 ConfigReplaceRule 结构体定义替换规则\n添加 ReplaceConfigNode 方法实现节点值替换逻辑\n在配置初始化流程中应用替换规则",
"is_bot": false,
"headline": "feat(配置): 添加配置替换规则功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-19T09:33:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b46d10e07774e375a96f0f4ac02e797d4ebceee",
"body": "修复状态码过滤时类型转换问题,支持字符串和整数类型比较\n优化分页链接生成逻辑,使用统一的查询字符串构建方法\n修复时间范围和流式请求过滤器的类型转换问题",
"is_bot": false,
"headline": "fix(debugger): 修复状态码过滤和分页链接问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-17T05:14:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6e2d5f649d4db345da37d2a0a194001f0950d76",
"body": "添加互斥锁保护日志器的并发访问\n修改GetLoggerFromContext返回空操作日志器替代默认实例\n增加EnableCallerInfo配置控制是否收集调用位置信息",
"is_bot": false,
"headline": "fix(debugger): 修复日志器并发安全问题并优化空上下文处理",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-17T02:41:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e4c1533b732226164f899f49ff3d4fcce0bcf69",
"body": "确保在读取请求体失败时恢复请求体并记录错误信息\n添加测试用例验证请求体读取和错误处理逻辑",
"is_bot": false,
"headline": "fix(debugger): 修复请求体读取错误处理并添加测试",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-17T02:05:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f88bcdc895532766780ca5d1ae674132e52ec38",
"body": "新增 IsNumeric 方法用于检查字符串是否为有效数字\n支持严格模式(仅整数)和宽松模式(整数和浮点数)",
"is_bot": false,
"headline": "feat(helper): 添加字符串数字检查方法 IsNumeric",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-10T08:34:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43964e598ac4f79686a91fec207a6e0764f5cd59",
"body": "实现数据库连接失效时的自动重连机制,包括:\n1. 添加重连配置结构体 ReconnectConfig 及相关方法\n2. 引入读写锁保证并发安全\n3. 实现连接有效性检查及自动重连逻辑\n4. 添加连接状态缓存机制减少频繁检查",
"is_bot": false,
"headline": "feat(orm/mysql): 添加数据库连接自动重连功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-06T08:12:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4785d72cb78ab1140f3305ebc8e796bdfb96cffd",
"body": "将New和NewWithDebugger方法的返回值改为同时返回实例和错误\n添加连接校验和重试机制\n统一错误处理方式,移除PanicIfError调用",
"is_bot": false,
"headline": "refactor(orm): 重构数据库连接初始化逻辑以返回错误",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-06T03:08:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b0fe423fe1d9832d12f0a1595d4817621af39bb3",
"body": "当输入为空字符串时,直接返回0而不是尝试转换,避免不必要的错误日志",
"is_bot": false,
"headline": "fix(convert): 处理空字符串转换为int时返回0",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-06T02:00:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f37cc68ea4888eff1ec8d6208c1adcbd8a413b46",
"body": "重构内存存储实现,使用环形缓冲区替代原有切片存储,提高性能:\n- 添加head和count字段管理环形缓冲区\n- 修改Save方法实现环形插入逻辑\n- 优化FindAll和Search方法处理非nil条目\n- 改进Cleanup方法适应环形结构\n- 更新统计信息计算逻辑",
"is_bot": false,
"headline": "refactor(debugger): 将内存存储改为环形缓冲区实现",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-04T09:47:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89117fb54a83ef400b619138dc62f76b626ee07d",
"body": null,
"is_bot": false,
"headline": "style(remote): 调整导入语句顺序并移除多余空行",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-04T09:40:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9badab37274bec1440118ebdab0760ac27f113c4",
"body": "- 升级阿里云OSS SDK到v2版本并移除不必要的互斥锁\n- 为SFTP客户端添加SSH连接关闭处理\n- 实现通用的上下文超时处理函数withContextTimeout\n- 为所有远程存储客户端添加单元测试\n- 移除COSClient中不必要的互斥锁\n- 优化FTPClient的错误处理和连接关闭逻辑",
"is_bot": false,
"headline": "refactor(remote): 重构远程存储客户端实现并添加测试",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-04T08:57:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "592d5f3c7fd00d54ed8674a5c150c114d3175b3b",
"body": null,
"is_bot": false,
"headline": "refactor(helper): 使用 TrimPrefix 替换 HasPrefix 和切片操作来去除前导下划线",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-03T05:49:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f93197b9889a32ac60fb8d19acb3ef060ddddb73",
"body": "重构 CopyStruct 函数,添加深层复制支持,包括嵌套结构体、切片和映射\n添加错误处理机制,检查输入参数有效性\n支持类型转换和更灵活的类型匹配\n更新函数文档以反映新功能和注意事项",
"is_bot": false,
"headline": "refactor(helper): 重构 CopyStruct 函数以支持深层复制和错误处理",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-12-02T09:20:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "201bcc40e25cf6ae58bf1de574cb41e99439670e",
"body": "统一缩进为制表符,更新字符串类型注释说明支持命名字符串类型",
"is_bot": false,
"headline": "refactor(helper): 调整默认值设置函数的代码格式并更新注释",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-27T08:12:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58d72e7d7e29fe2cb7aaa915d8f0554b1aec6cc1",
"body": "重构 getCallerInfo 函数,通过遍历调用栈来识别并跳过调试器和GORM相关的内部调用\n确保日志中显示的是实际业务代码的调用位置而非框架内部调用",
"is_bot": false,
"headline": "fix(debugger): 改进日志调用栈信息获取逻辑以过滤内部调用",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-24T08:35:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9570b93edd63aef66607e537d9574d876a7932b2",
"body": "修改CheckAndSetDefault函数,使其支持命名整型类型的默认值设置\n添加测试用例验证内部和外部命名整型类型的默认值设置功能",
"is_bot": false,
"headline": "fix(helper): 修复命名整型类型默认值设置问题",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-20T14:05:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c78dfec96ef14a43baaf94f5d90b8d29063d028",
"body": "在日志系统中添加host字段支持,包括:\n1. 在LogEntry结构体中添加host字段\n2. 实现内存和文件存储的host过滤功能\n3. 在控制器中添加host查询参数解析\n4. 在模板中添加host字段的显示和过滤输入框\n5. 从请求头中获取host信息并记录",
"is_bot": false,
"headline": "feat(debugger): 添加host字段支持域名过滤和显示",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-20T08:17:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8207252ec0ef81f3a390c8c5a4cb6b680b4b19ee",
"body": null,
"is_bot": false,
"headline": "更新(helper) 优化GetRealIPFromHeaders函数并添加相关测试用例",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-18T02:58:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef4021ff14ffbe9f164e57d2180b7962c76b5f27",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/master'",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-18T02:41:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47868f3af326458a2fd961f0c72c082a9117368f",
"body": null,
"is_bot": false,
"headline": "新增(helper) 添加CheckAndSetDefault相关测试用例",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-18T02:41:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "217cca741db2836ef547b46e168659b0f58689b0",
"body": null,
"is_bot": false,
"headline": "优化(helper) 简化字段处理逻辑并修正nil值设置",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-18T02:41:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7209c9f6b0c58b57c5a0a37ba8248075c6cf8f6",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加禁止访问时的日志记录",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-18T02:41:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "724f544cc72f81dd85faca0304eceafcc70cb720",
"body": null,
"is_bot": false,
"headline": "更新 cursor文档",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-17T13:42:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fce89d7a43b3e71964e21899c073680c49b16058",
"body": null,
"is_bot": false,
"headline": "完善(orm) 在BeforeCreate和BeforeUpdate中添加EnsureSelects以确保时间字段被持久化",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-17T04:29:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "735f6b3537a6d16b81cacba9d4a581a43ff1aa6c",
"body": null,
"is_bot": false,
"headline": "补充(orm) 在BeforeCreate和BeforeUpdate中添加Created和Updated字段设置",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-17T02:46:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0075b6323c880fb7c9c591b6f0ee91af2f59d8e6",
"body": null,
"is_bot": false,
"headline": "优化(CRUD) 完善callCustomMethod函数以支持控制器方法优先调用及参数适配",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-16T01:19:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66031950c0e8127d0534b85d15e3cad8348c232a",
"body": null,
"is_bot": false,
"headline": "新增(CRUD) 添加GetLogger方法并设置DBI日志记录器",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T14:26:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d3a2aa3ead3233280fa5756b185d484db6c742f",
"body": null,
"is_bot": false,
"headline": "新增(orm) 添加SetDebuggerLogger和GetDebuggerLogger方法",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T14:11:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "548cecbd87a932190112b4d31f74b59f8821e836",
"body": null,
"is_bot": false,
"headline": "完善(helper) 更新CheckAndSetDefault函数文档",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T13:37:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b0cc8545090841d9fe0de33e44d5815663b4100",
"body": null,
"is_bot": false,
"headline": "还原(helper) CheckAndSetDefault",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T13:28:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "101b668c1b7acfef037a67cc47152b671457aa5f",
"body": null,
"is_bot": false,
"headline": "优化(helper) 修正快照保留字段逻辑(仅快照与默认值不一致的值)",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T13:17:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0045f3a18e11d60be70b10a41e9bd517954a1a5a",
"body": null,
"is_bot": false,
"headline": "优化(helper) 修正快照保留字段逻辑以仅保留显式提供的值",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T12:42:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c58c243e261c35b4e5bea9319b9ddf45dff745a",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加自动跳过静态资源请求的功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T12:17:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44c0f526ac6cc454030f41acdc39d3414ed948b9",
"body": null,
"is_bot": false,
"headline": "优化(orm) 完善SQL日志记录字段",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T01:39:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f60fceaed950ce8ab2a92c05388d3daa566d3f3",
"body": null,
"is_bot": false,
"headline": "修正(orm) 修复GORM日志记录器的错误处理逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T01:34:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8da92b58c64366403d16caff06fad6f0ee54f202",
"body": null,
"is_bot": false,
"headline": "更新(orm) 优化README文档和功能说明",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T01:32:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54068049f53be39977c3b0af5360825854919451",
"body": null,
"is_bot": false,
"headline": "优化(orm) 调整调试模式优先级和日志记录逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-14T01:31:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffb3e3ea3468552dd7033b1f2708513f5371a8c2",
"body": null,
"is_bot": false,
"headline": "优化(orm) 调整调试模式优先级和日志记录逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T15:27:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b199151d0759198bc14e7fe8596acecbdb79528a",
"body": null,
"is_bot": false,
"headline": "优化(orm) 简化调试日志级别判断逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T15:20:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f346e0adb28b3f4a69da9dc8c094434c5f70d62",
"body": null,
"is_bot": false,
"headline": "优化(orm) 完善SQL日志记录逻辑并调整调试日志级别判断",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T15:07:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55869d3d779f00de1ab27d875a5f6e9d675a71b3",
"body": null,
"is_bot": false,
"headline": "新增(orm) 添加SQLite和MySQL ORM示例及调试日志记录功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T14:22:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "008048c93203b195b195c3a5cf878ac44c0db9f1",
"body": null,
"is_bot": false,
"headline": "优化(helper) 修正结构体指针默认值初始化逻辑以避免无限递归",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T13:34:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33977e992d57a7c840e55f0ef57a291eb41bb123",
"body": null,
"is_bot": false,
"headline": "新增(helper) 添加CheckAndSetDefaultWithPreserveTag函数以保留特定字段的用户设置值",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T08:38:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "814b6936a9e188334ab1c6d00f6a113e72c77589",
"body": null,
"is_bot": false,
"headline": "新增(orm) 添加与Debugger集成的SQL日志记录示例及功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T08:38:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "648bfcf04298a9feeb1aa15c6695552762bf5d0c",
"body": null,
"is_bot": false,
"headline": "修正(orm) 修复GORM日志记录器的级别判断逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T07:54:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7604ebdc53a96626207aa3725015df95ebe8ba06",
"body": null,
"is_bot": false,
"headline": "优化(helper) 重构CheckAndSetDefault函数以支持更多类型和默认值解析",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T07:21:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "941a4c4d887213eafcb416ac92cbfcf7a6ea039b",
"body": null,
"is_bot": false,
"headline": "移除(helper) 删除isEmptyStruct函数",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T06:49:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5b4914a729848a32515d734e0f618463ea92efd",
"body": null,
"is_bot": false,
"headline": "新增(orm) 添加GORM调试日志记录器并集成到MySQL和SQLite实例中",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T04:18:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc184e1fc347f1f6254ef4abaa5c2011ec0522da",
"body": null,
"is_bot": false,
"headline": "优化(debugger) 重构日志级别为枚举类型并调整默认值",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-13T04:14:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21f5dade1b70da4abe960f1cf8e71bfc62b64b68",
"body": null,
"is_bot": false,
"headline": "新增(helper) 添加ToMapString方法以支持多种类型转换为map[string]string",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-12T02:27:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b1185871f2464213f12a9a8461a83036640e9f4d",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加日志位置信息记录功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-11T08:17:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ccaf33516e37261097819af7d988b49e80f4561",
"body": null,
"is_bot": false,
"headline": "优化(debugger) 重构默认日志记录器实例创建方式",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-11T06:11:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "064df6d9ed8620c7bdc705962a727578689b7db8",
"body": null,
"is_bot": false,
"headline": "优化(helper) 简化URL构建逻辑",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-10T09:43:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d14f390cbad51ad041d8560cc3e48d192ed519b",
"body": null,
"is_bot": false,
"headline": "补充 自定义控制器路由示例",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-09T12:16:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "986843dfc381b88867a0a43d1cff4536db020c1d",
"body": null,
"is_bot": false,
"headline": "优化 调试器应当默认处于打开状态",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-09T12:15:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e7791a82e9e50864fbf6ac75dfd7275104247e9",
"body": null,
"is_bot": false,
"headline": "优化 导入排序",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-07T22:27:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ede4b8d709989e11c81f3d023ca4bf32c1c3482c",
"body": null,
"is_bot": false,
"headline": "调整(attachment) 优化导入包顺序",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-05T05:10:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fcad21436ae14c5f7432184838c14b2288c504e",
"body": null,
"is_bot": false,
"headline": "新增(helper) 添加单位转换功能及字符串处理方法",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-05T04:23:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ea79271a1af49971164d73108ebbbc43eb0e1e5",
"body": null,
"is_bot": false,
"headline": "完善(debugger) 支持流式响应无限制配置及优化内存管理机制",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-05T01:13:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef43623115c3ad255a6cbebd9b010bb644036a75",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加multipart请求支持及中间件执行顺序配置",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T10:40:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca68f322f7a357f3a4ccff64f576b23e39766ea1",
"body": null,
"is_bot": false,
"headline": "完善(debugger) 文档",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T09:11:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbfdbf73928bfdd3a41a964371c95058df0e3bee",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加流式响应支持及优化内存管理和性能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T08:55:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53979906e907b87a3bf0d7bae6c625243fc3325a",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加流式响应支持和相关测试",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T07:25:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97bd151973d66ca59a2f3af9830d45598a3e04be",
"body": null,
"is_bot": false,
"headline": "调整(debugger) 更新表格列宽度样式",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T06:31:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3211f964fb13ff972deb8d31a5eeb20ec2c3d3e4",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 基础使用示例注册调试器路由",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T05:58:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a860797fa97d459261b2b1238687d8a4fc8bedb4",
"body": null,
"is_bot": false,
"headline": "调整(debugger) 更新JSON查看器样式和复制按钮位置",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T05:56:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6fb5dc2e304ed4b04e52108ee7d52caf071be8d",
"body": null,
"is_bot": false,
"headline": "优化(debugger) 增加二进制数据和multipart/form-data处理功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T05:46:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "497e85f7883fa8a64c9c4690e8f71ad7a7b30427",
"body": null,
"is_bot": false,
"headline": "新增(debugger) 添加JSON格式检测和美化显示功能",
"author_name": "Bowen",
"author_login": "jcbowen",
"committed_at": "2025-11-04T04:51:45Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 43,
"commits_last_year": 197,
"latest_release_at": "2026-07-22T08:28:21Z",
"latest_release_tag": "v0.13.22",
"releases_from_tags": true,
"days_since_last_push": 1,
"active_weeks_last_year": 25,
"days_since_latest_release": 2,
"mean_days_between_releases": 24.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/jcbowen/jcbaseGo",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/jcbowen/jcbaseGo",
"is_deprecated": false,
"latest_version": "v0.13.22",
"repository_url": "https://github.com/jcbowen/jcbaseGo",
"versions_count": 44,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-22T08:28:21Z",
"latest_version_yanked": null,
"days_since_latest_publish": 2
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 1,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 102593,
"source_files_sampled": 131,
"oversized_source_files": 1,
"agent_instruction_files": [
".cursor/rules/advanced-query-patterns.mdc",
".cursor/rules/attachment-management.mdc",
".cursor/rules/component-development.mdc",
".cursor/rules/config-management.mdc",
".cursor/rules/crud-trait.mdc",
".cursor/rules/database-orm.mdc",
".cursor/rules/go-coding-style.mdc",
".cursor/rules/helper-tools.mdc",
".cursor/rules/mailer-component.mdc",
".cursor/rules/maintenance-comments.mdc",
".cursor/rules/orm-base-models.mdc",
".cursor/rules/php-component.mdc",
".cursor/rules/project-overview.mdc",
".cursor/rules/security-components.mdc",
".cursor/rules/tls-config.mdc",
".cursor/rules/upgrade-tool.mdc",
".cursor/rules/validator-component.mdc"
],
"agent_instruction_max_bytes": 33119
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "golang.org/x/crypto",
"direct": true,
"version": "0.37.0",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 10,
"advisory_ids": [
"GHSA-45gg-vh54-h5m9",
"GHSA-5cgq-3rg8-m6cv",
"GHSA-78mq-xcr3-xm33",
"GHSA-89gr-r52h-f8rx",
"GHSA-9m57-25v3-79x9",
"GHSA-f5wc-c3c7-36mc",
"GHSA-f6x5-jh6r-wrfv",
"GHSA-j5w8-q4qc-rx2x",
"GHSA-jppx-rxg9-jmrx",
"GHSA-q4h4-gmj2-qvw2"
],
"fixed_version": "0.52.0",
"advisory_count": 32,
"oldest_advisory_days": 253
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "0.36.0",
"severity": "moderate",
"ecosystem": "go",
"cvss_score": 6.5,
"advisory_ids": [
"GHSA-5cv4-jp36-h3mw",
"GHSA-vvgc-356p-c3xw",
"GO-2025-3595",
"GO-2026-4440",
"GO-2026-4441",
"GO-2026-4918",
"GO-2026-5025",
"GO-2026-5026",
"GO-2026-5027",
"GO-2026-5028"
],
"fixed_version": "1.26.3",
"advisory_count": 13,
"oldest_advisory_days": 464
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "0.32.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5024"
],
"fixed_version": "0.44.0",
"advisory_count": 1,
"oldest_advisory_days": 63
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "0.24.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5970"
],
"fixed_version": "0.39.0",
"advisory_count": 1,
"oldest_advisory_days": 10
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"unknown": 2,
"critical": 1,
"moderate": 1
},
"advisory_count": 47,
"affected_count": 4,
"assessed_count": 54,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 1
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/aliyun/alibabacloud-oss-go-sdk-v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.0"
},
{
"name": "github.com/go-redis/redis/v8",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v8.11.5"
},
{
"name": "github.com/jlaffaye/ftp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.0"
},
{
"name": "github.com/pkg/sftp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.13.6"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.0"
},
{
"name": "github.com/tencentyun/cos-go-sdk-v5",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.7.55"
},
{
"name": "github.com/tjfoc/gmsm",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.1"
},
{
"name": "golang.org/x/crypto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.37.0"
},
{
"name": "gopkg.in/ini.v1",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.67.0"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "gorm.io/driver/mysql",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.1"
},
{
"name": "gorm.io/driver/sqlite",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.6"
},
{
"name": "gorm.io/gorm",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.25.7-0.20240204074919-46816ad31dde"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "github.com/aliyun/alibabacloud-oss-go-sdk-v2",
"direct": true,
"version": "1.3.0",
"ecosystem": "go"
},
{
"name": "github.com/gin-gonic/gin",
"direct": true,
"version": "1.10.0",
"ecosystem": "go"
},
{
"name": "github.com/go-redis/redis/v8",
"direct": true,
"version": "8.11.5",
"ecosystem": "go"
},
{
"name": "github.com/jlaffaye/ftp",
"direct": true,
"version": "0.2.0",
"ecosystem": "go"
},
{
"name": "github.com/pkg/sftp",
"direct": true,
"version": "1.13.6",
"ecosystem": "go"
},
{
"name": "github.com/stretchr/testify",
"direct": true,
"version": "1.9.0",
"ecosystem": "go"
},
{
"name": "github.com/tencentyun/cos-go-sdk-v5",
"direct": true,
"version": "0.7.55",
"ecosystem": "go"
},
{
"name": "github.com/tjfoc/gmsm",
"direct": true,
"version": "1.4.1",
"ecosystem": "go"
},
{
"name": "golang.org/x/crypto",
"direct": true,
"version": "0.37.0",
"ecosystem": "go"
},
{
"name": "gopkg.in/ini.v1",
"direct": true,
"version": "1.67.0",
"ecosystem": "go"
},
{
"name": "gopkg.in/yaml.v3",
"direct": true,
"version": "3.0.1",
"ecosystem": "go"
},
{
"name": "gorm.io/driver/mysql",
"direct": true,
"version": "1.4.1",
"ecosystem": "go"
},
{
"name": "gorm.io/driver/sqlite",
"direct": true,
"version": "1.5.6",
"ecosystem": "go"
},
{
"name": "gorm.io/gorm",
"direct": true,
"version": "1.25.7-0.20240204074919-46816ad31dde",
"ecosystem": "go"
},
{
"name": "github.com/bytedance/sonic",
"direct": false,
"version": "1.11.6",
"ecosystem": "go"
},
{
"name": "github.com/bytedance/sonic/loader",
"direct": false,
"version": "0.1.1",
"ecosystem": "go"
},
{
"name": "github.com/cespare/xxhash/v2",
"direct": false,
"version": "2.1.2",
"ecosystem": "go"
},
{
"name": "github.com/clbanning/mxj",
"direct": false,
"version": "1.8.4",
"ecosystem": "go"
},
{
"name": "github.com/cloudwego/base64x",
"direct": false,
"version": "0.1.4",
"ecosystem": "go"
},
{
"name": "github.com/cloudwego/iasm",
"direct": false,
"version": "0.2.0",
"ecosystem": "go"
},
{
"name": "github.com/davecgh/go-spew",
"direct": false,
"version": "1.1.1",
"ecosystem": "go"
},
{
"name": "github.com/dgryski/go-rendezvous",
"direct": false,
"version": "0.0.0-20200823014737-9f7001d12a5f",
"ecosystem": "go"
},
{
"name": "github.com/gabriel-vasile/mimetype",
"direct": false,
"version": "1.4.3",
"ecosystem": "go"
},
{
"name": "github.com/gin-contrib/sse",
"direct": false,
"version": "0.1.0",
"ecosystem": "go"
},
{
"name": "github.com/go-playground/locales",
"direct": false,
"version": "0.14.1",
"ecosystem": "go"
},
{
"name": "github.com/go-playground/universal-translator",
"direct": false,
"version": "0.18.1",
"ecosystem": "go"
},
{
"name": "github.com/go-playground/validator/v10",
"direct": false,
"version": "10.20.0",
"ecosystem": "go"
},
{
"name": "github.com/go-sql-driver/mysql",
"direct": false,
"version": "1.6.0",
"ecosystem": "go"
},
{
"name": "github.com/goccy/go-json",
"direct": false,
"version": "0.10.2",
"ecosystem": "go"
},
{
"name": "github.com/google/go-querystring",
"direct": false,
"version": "1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/errwrap",
"direct": false,
"version": "1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/go-multierror",
"direct": false,
"version": "1.1.1",
"ecosystem": "go"
},
{
"name": "github.com/jinzhu/inflection",
"direct": false,
"version": "1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/jinzhu/now",
"direct": false,
"version": "1.1.5",
"ecosystem": "go"
},
{
"name": "github.com/json-iterator/go",
"direct": false,
"version": "1.1.12",
"ecosystem": "go"
},
{
"name": "github.com/klauspost/cpuid/v2",
"direct": false,
"version": "2.2.7",
"ecosystem": "go"
},
{
"name": "github.com/kr/fs",
"direct": false,
"version": "0.1.0",
"ecosystem": "go"
},
{
"name": "github.com/leodido/go-urn",
"direct": false,
"version": "1.4.0",
"ecosystem": "go"
},
{
"name": "github.com/mattn/go-isatty",
"direct": false,
"version": "0.0.20",
"ecosystem": "go"
},
{
"name": "github.com/mattn/go-sqlite3",
"direct": false,
"version": "1.14.22",
"ecosystem": "go"
},
{
"name": "github.com/mitchellh/mapstructure",
"direct": false,
"version": "1.4.3",
"ecosystem": "go"
},
{
"name": "github.com/modern-go/concurrent",
"direct": false,
"version": "0.0.0-20180306012644-bacd9c7ef1dd",
"ecosystem": "go"
},
{
"name": "github.com/modern-go/reflect2",
"direct": false,
"version": "1.0.2",
"ecosystem": "go"
},
{
"name": "github.com/mozillazg/go-httpheader",
"direct": false,
"version": "0.2.1",
"ecosystem": "go"
},
{
"name": "github.com/pelletier/go-toml/v2",
"direct": false,
"version": "2.2.2",
"ecosystem": "go"
},
{
"name": "github.com/pmezard/go-difflib",
"direct": false,
"version": "1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/twitchyliquid64/golang-asm",
"direct": false,
"version": "0.15.1",
"ecosystem": "go"
},
{
"name": "github.com/ugorji/go/codec",
"direct": false,
"version": "1.2.12",
"ecosystem": "go"
},
{
"name": "golang.org/x/arch",
"direct": false,
"version": "0.8.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "0.36.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "0.32.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "0.24.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/time",
"direct": false,
"version": "0.6.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/protobuf",
"direct": false,
"version": "1.34.1",
"ecosystem": "go"
}
],
"collected": true,
"truncated": false,
"total_count": 54,
"direct_count": 14,
"indirect_count": 40
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "jcbowen",
"commits": 522,
"avatar_url": "https://avatars.githubusercontent.com/u/46322341?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "30 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "a443d274f22be89ab78709937be9e8f9e59df870",
"ran_at": "2026-07-25T05:53:29Z",
"aggregate_score": 2.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": null,
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/jcbowen/jcbaseGo",
"host": "github.com",
"name": "jcbaseGo",
"owner": "jcbowen"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"security": 31,
"vitality": 84,
"community": 24,
"governance": 34,
"engineering": 38
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 84,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 81,
"inputs": {
"commits_last_year": 197,
"human_commit_share": 1,
"days_since_last_push": 1,
"active_weeks_last_year": 25
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "25/52 weeks with commits",
"points": 17.3,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 25
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "197 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 197
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"releases_count": 43,
"latest_release_tag": "v0.13.22",
"releases_from_tags": true,
"days_since_latest_release": 2,
"mean_days_between_releases": 24.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "43 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 43
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~24.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 24.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 2,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 2 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 2
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 24,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 34,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 45,
"inputs": {
"followers": 1,
"owner_type": "User",
"is_verified": null,
"owner_login": "jcbowen",
"public_repos": 37,
"account_age_days": 2760
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "1 followers of jcbowen",
"points": 2.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1,
"login": "jcbowen"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "37 public repos, account ~7 yr old",
"points": 23.5,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 37
}
},
{
"code": "account_age_years",
"params": {
"years": 7
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/jcbowen/jcbaseGo"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 2
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 2 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 2
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "44 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 44
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "at_risk",
"name": "Engineering Quality",
"value": 38,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 31,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 26,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"scorecard_aggregate": 2.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "30 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "moderate",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 54 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 54
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 52,
"inputs": {
"source": "osv",
"advisories": 47,
"affected_packages": 4,
"assessed_packages": 54,
"unassessed_packages": 0,
"affected_by_severity": "critical 1, moderate 1, unknown 2",
"direct_affected_packages": 1
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "1 affected: golang.org/x/crypto 0.37.0 (critical 10.0)",
"points": 7,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "golang.org/x/crypto 0.37.0 (critical 10.0)"
}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 253 days ago",
"points": 32,
"status": "partial",
"details": [
{
"code": "advisories_stale",
"params": {
"days": 90,
"count": 1,
"oldest": 253
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 54,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 62,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "good",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.47,
"agent_instruction_files": [
".cursor/rules/advanced-query-patterns.mdc",
".cursor/rules/attachment-management.mdc",
".cursor/rules/component-development.mdc",
".cursor/rules/config-management.mdc",
".cursor/rules/crud-trait.mdc",
".cursor/rules/database-orm.mdc",
".cursor/rules/go-coding-style.mdc",
".cursor/rules/helper-tools.mdc",
".cursor/rules/mailer-component.mdc",
".cursor/rules/maintenance-comments.mdc",
".cursor/rules/orm-base-models.mdc",
".cursor/rules/php-component.mdc",
".cursor/rules/project-overview.mdc",
".cursor/rules/security-components.mdc",
".cursor/rules/tls-config.mdc",
".cursor/rules/upgrade-tool.mdc",
".cursor/rules/validator-component.mdc"
],
"agent_instruction_max_bytes": 33119
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": ".cursor/rules/advanced-query-patterns.mdc, .cursor/rules/attachment-management.mdc, .cursor/rules/component-development.mdc, .cursor/rules/config-management.mdc, .cursor/rules/crud-trait.mdc, .cursor/rules/database-orm.mdc, .cursor/rules/go-coding-style.mdc, .cursor/rules/helper-tools.mdc, .cursor/rules/mailer-component.mdc, .cursor/rules/maintenance-comments.mdc, .cursor/rules/orm-base-models.mdc, .cursor/rules/php-component.mdc, .cursor/rules/project-overview.mdc, .cursor/rules/security-components.mdc, .cursor/rules/tls-config.mdc, .cursor/rules/upgrade-tool.mdc, .cursor/rules/validator-component.mdc",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".cursor/rules/advanced-query-patterns.mdc, .cursor/rules/attachment-management.mdc, .cursor/rules/component-development.mdc, .cursor/rules/config-management.mdc, .cursor/rules/crud-trait.mdc, .cursor/rules/database-orm.mdc, .cursor/rules/go-coding-style.mdc, .cursor/rules/helper-tools.mdc, .cursor/rules/mailer-component.mdc, .cursor/rules/maintenance-comments.mdc, .cursor/rules/orm-base-models.mdc, .cursor/rules/php-component.mdc, .cursor/rules/project-overview.mdc, .cursor/rules/security-components.mdc, .cursor/rules/tls-config.mdc, .cursor/rules/upgrade-tool.mdc, .cursor/rules/validator-component.mdc"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "47 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 25.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 47,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 51,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "go.mod (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "go.mod"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 102593,
"source_files_sampled": 131,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/131 source files over 60KB",
"points": 54.6,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 131,
"oversized": 1
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-25T05:53:33.495399Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/jcbowen/jcbaseGo.svg",
"full_name": "jcbowen/jcbaseGo",
"license_state": "standard",
"license_spdx": "MIT"
}